Formule pour faire un cumul annuel mobile dans un TCD
#1
Débutant XLPages

Inscription: 22/11/2012

Messages: 2

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 22-11-2012 19h14
Bonjour,
Je débute complètement dans les TCD.
J'ai un TCD avec des volumes indiqués pour chaque mois sur plusieurs années. Je souhaite créer une formule pour avoir un cumul annuel mobile, c'est à dire la somme des 12 derniers mois.
Je souhaite aussi créer une formule pour un cumul civil, c'est à dire par exemple 4 mois (de janvier à avril) pour le mois d'avril et 7 mois (de janvier à juillet) pour le mois de juillet.

Quelqu'un peut m'aider?
Hors Ligne
Rapport   Haut 

Re: Formule pour faire un cumul annuel mobile dans un TCD
#2
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 23-11-2012 22h07
Bonsoir Eric2Pau et bienvenue parmi nous,

Pour ta première question, tu peux utiliser les filtres (comme ici par exemple) mais cela t'obligera à intervenir chaque mois à la main sur le filtre pour choisir les 12 mois glissants (en retirant un mois et en ajoutant le nouveau mois)
J'imagine que le mieux, si tes données sont triées par date, est d'utiliser une zone dynamique pour ta plage source, avec une formule de calcul adaptée te permettant de calculer la première et la dernière ligne de ta plage.

Pour la seconde question, je pense que tu peux simplement utiliser les groupements, comme expliqué ici par exemple.

Si tu n'y arrives pas joins un extrait de fichier (sans données confidentielles) représentatif de ton problème, nous pourrons ainsi t'aider plus concrètement.
(voir ici pour savoir comment déposer un fichier sur le forum)

Bien à toi,

mth
Edité par Mth le 23/11/2012 22:42:34
Hors Ligne
Rapport   Haut 

Re: Formule pour faire un cumul annuel mobile dans un TCD
#3
Débutant XLPages

Inscription: 22/11/2012

Messages: 2

Système d'exploitation:
PC
Version Excel utilisée:
2007
Posté le : 23-11-2012 23h17
Bonsoir mth, et merci de votre accueil.

J'en profite pour remercier ce site qui est une vraie mine d'or, et tous ses contributeurs!
Je ne pense pas que la fonction filtre puisse me permettre de faire ce que je veux. Pour la zone dynamique, il faut que je me penche sur la question dés que possible.
En fait, il s'agit d'une BDD indiquant les exportations de plusieurs produits vers tous les pays, pour chaque mois. Dans ma base de données j'ai donc une colonne année (chiffres), une colonne mois (chiffres), une colonne produit (texte), une colonne pays (texte) et bien sûr une colonne volume (chiffres).
Je peux donc comparer les mois entre eux, ou les années entre elles. Mais pour pouvoir me rendre compte de l'évolution réelle de mes exportations, j'ai besoin de créer une colonne cumul mobile, où, dans chaque case, j'aurais le cumul des 12 derniers mois finissant le mois de l'année indiqué sur ma ligne, pour le produit et le pays indiqués sur ma ligne. Ainsi, je pourrais créer un graphique qui me donnera la tendance générale.


Je pense que le problème est quasi le même pour mon cumul en année civile.
Malheureusement,, je ne peux pas tester les propositions faites de weekend car il s'agit bien sûr d'un fichier au boulot... je testerai donc cela dans la semaine, et si je n'y arrive pas, je posterais mon fichier. En attendant, si avec ces précisions supllémentaires, quelqu'un trouve une solution, j'en sauterais au plafond! et zou!
Merci encore!   
Hors Ligne
Rapport   Haut 

Re: Formule pour faire un cumul annuel mobile dans un TCD
#4
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 24-11-2012 14h59
Bonjour Eric, bonjour le forum,

Grâce à tes nouvelles explications j'ai avancé un peu sur une piste légèrement différente, car je pense que mes premières indications ne conviendraient pas pour les TCD (il manquerait la ligne d'en-tête).
Tu trouveras mon essai dans le fichier joint en espérant que cela pourra t'être utile.

Dans ce fichier l'onglet "Base" contient les données structurées comme ce que tu as décrit, et des onglets TCD sans grand intérêt pour l'instant mais qui sont juste présents pour l'exemple de rafraichissement automatique que j'ai inscrit dans le code.

J'utilise un filtre élaboré pour extraire de la base les 12 derniers mois. Le résultat de ce filtre élaboré sert de plage de données source à l'un des TCD, onglet "TCD Glissant".
Cette plage est dynamique et tu la trouveras dans le fichier sous le nom "ZoneTCD"
(Onglet "Formules", "Gestionnaire de noms", ZoneTCD fait référence à la plage calculée par cette formule:
=DECALER(Base!$J$1;;;NBVAL(Base!$J:$J);6)

J'ai mis tous les commentaires dans le code que voici: 
Option Explicit
Sub Macro1()
'Déclaration des variables:
Dim vDerlig As Long, vPlage As Range, c As Range

'Désactive le rafraichissement de l'écran
'Pour tester en pas à pas et voir le résultat à l'écran il faut
'désactiver cette ligne:
Application.ScreenUpdating = False
'Travail sur l'onglet BAse
With Sheets("Base")
   
    'vDerlig = dernière ligne remplie colonne A (soit la colonne numéro 1)
    'Rows.count indique le nombre de lignes de la feuille (soit 1048576 à partir d'Excel 2007)
    '.end(xlUp) permet de remonter de la dernière ligne de la feuille à la dernière ligne remplie de la colonne
    '.Row permet d'indiquer le numéro de cette ligne
   
    vDerlig = .Cells(Rows.Count, 1).End(xlUp).Row
    ' Décrit la variable vPlage qui couvre la zone de travail, des colonnes
    ' A à F, de la ligne 1 à la dernière ligne remplie
    Set vPlage = .Range("A1:F" & vDerlig)
    'Remplit la cellule F1 avec le libellé "Date"
    .Range("F1") = "Date"
    'Pour chaque cellule de la colonne F, de la ligne 2 à la dernière ligne de travail
    For Each c In .Range("F2:F" & vDerlig)
        'calucle une date à partir des informations colonnes A et B
        'Dateserial équivaut à la fonction DATE() dans notre Excel français
        'Elle s'écrit DATE(Année;Mois;Jour) est renvoie une date
        'Ici année est indiquée en colonne 1, soit sur la même ligne mais 5 colonnes avant
        'd'où l'expression c.offset(0,-5)
        'Même raisonnement pour le mois, et le jour est renseigné à 1
        'Pour calculer la fin du mois correspondant à cette date, la fonction EoMonth() équivaut
        'à FIN.MOIS() dans la feuille Excel francisée.
        c = WorksheetFunction.EoMonth(DateSerial(c.Offset(0, -5), c.Offset(0, -4), 1), 0)
    Next c
   
'*-*-*-*-*-*-*-*
'  Préparation du filtre élaboré:
'*-*-*-*-*-*-*-*

    'Inscription du libellé "Date" dans les cellules H1 et I1
    .Range("H1") = "Date"
    .Range("I1") = "Date"
    'Préparation des critères de iltre en H2 et I2
    'En H2 Excel écrit ="<="&MAX(F:F), ce qui indique la date la plus récente
    'En I2 on inscrit =">="&FIN.MOIS(MAX(F:F);-12), ce qui permet d'avoir la date 12 mois avant
    'Le filtre va donc pouvoir extraire les lignes dont les dates sont comprises entre ces deux bornes
    'soit les 12 derniers mois glissants
    .Range("H2").FormulaR1C1 = "=""<=""&MAX(C[-2])"
    .Range("I2").FormulaR1C1 = "="">=""&EOMONTH(MAX(C[-3]),-12)"
   
    'Lancement du filtre: la plage de cellules vPlage est filtrée, selon les critères définis
    ' en cellules H1:I2, l'extrait de la base d'origne est copié en J1
    vPlage.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range _
        ("H1:I2"), CopyToRange:=.Range("J1:O1"), Unique:=False
    'Permet de rafraichir les TCD: la zone nommée "ZoneTCD" dans le fichier
    'est la source des TCD, cette "ZoneTCD" correspond au filtre qui vient d'être éxécuté ci-dessus
    ActiveWorkbook.RefreshAll
    'Efface les données des colonnes F à O pour ne pas garder de données inutiles
    .Columns("H:O").ClearContents
   
End With

'Rétablit le rafraichissement écran
Application.ScreenUpdating = True
End Sub
 

Pour le TCD de l'onglet "TCD Annuel" la zone source est la zone nommée "Base" (dynamique également).

En espérant que cela pourra t'aider,

Bon week end,

mth
Pièce jointe:
zip Eric.zip   [ Taille: 71.07 Ko - Téléchargements: 590 ]
Hors Ligne
Rapport   Haut 

Re: Formule pour faire un cumul annuel mobile dans un TCD
#5
Régulier XLPages

Inscription: 29/07/2007
De yvelines

Messages: 59

Système d'exploitation:
PC
Version Excel utilisée:
2010, 2013
Posté le : 25-11-2012 20h32
Bonjour
Coucou Mth

Ayant planché pour un autre fil sur une période glissante de 7 jours, je l'ai appliqué ici à 12 mois glissants.

Cela répond à la problématique sans macro.

Je me sers de la référence au tableau (qu'il faudrait nommer plus judicieusement) : la plage est dynamique ou élastique dans les 2 sens sans passer par une formule nommée à base de DECALER.

Si le tableau de données (importées ou saisies) s'allonge, les formules suivront.

En plus des cumuls faist dans le second TCD par Mth, on peut aussi calculer les écarts d'un mois à l'autre.
Voir si un seul TCD reste lisible ou s'il en faut plusieurs.

Edit : j'ai du enlever le 1er TCD de MTH et le smacros pour que la taille du fichier passe

Pièce jointe:
zip Eric2.zip   [ Taille: 76.88 Ko - Téléchargements: 921 ]

Chris
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes