Comment faire un cumul mensuel ?
Bel_6625
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
Bel_6625 Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Bel_6625 Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai écrit un programme afin de me permettre de faire un cumul sur chaque mois mais ce code me fait que des sommes mensuelles.
Comment faire pour faire un cumul ?
Exemple: le résultat de mars= janvier +février+ mars
Merci d'avance
J'ai écrit un programme afin de me permettre de faire un cumul sur chaque mois mais ce code me fait que des sommes mensuelles.
Comment faire pour faire un cumul ?
Exemple: le résultat de mars= janvier +février+ mars
Merci d'avance
Sub Resulatscat() Dim Dict As New Scripting.Dictionary Dim IDX As Integer Dim Key As Variant Dim Key1 As Variant Dim Key2 As Variant Dim Annee As Integer Dim SumAnnee() As Variant Dim NumMois As Integer Dim CodeEtabli As String Dim DerniereligneRCAT As Integer Dim DerniereligneRM As Integer Dim Colo25 As String Dim Colo22 As String Dim Colo28 As String Dim Colo13 As String Dim Colo16 As String Dim Cumul As Double Dim RM As Worksheet Dim RCAT As Worksheet Set RCAT = Sheets("RCAT") 'Libellés de colonnes RCAT.Cells(8, 1) = "Code Etablissement " RCAT.Cells(8, 2) = "Libellés réseau" RCAT.Cells(8, 3) = "Codes Catégories" RCAT.Cells(8, 4) = "Libellés Catégories" RCAT.Cells(8, 5) = "Codes Types Financements" RCAT.Cells(8, 6) = "Codes Départements MOA Projet" RCAT.Cells(8, 7) = "Sous Catégories techniques" RCAT.Cells(8, 8) = "PPI" 'Constitution de clés : onglets RM(WSlist),clés de colonnes(keylist) et les années(anneelist) Set wslist = CreateObject("System.Collections.ArrayList") Set Keylist = CreateObject("System.Collections.ArrayList") Set Anneelist = CreateObject("System.Collections.ArrayList") 'Colonnes à partir desquelles on commence à remplir les mois Anneelist.Add 8 Anneelist.Add 21 'Mise en place de la prise en compte automatique des feuilles RM For Each WS In ThisWorkbook.Worksheets If WS.Name Like "*RM20*" Then wslist.Add WS.Name End If Next 'classement desfichiers RM du plus ancien (N-1) au plus récent(N) wslist.Sort For Each WS In wslist Set RM = Sheets(WS) NbLigneRM = RM.Cells(Rows.Count, 1).End(xlUp).Row LigneRM = 2 Do While LigneRM <= NbLigneRM CodeEtabli = RM.Cells(LigneRM, 5) 'filtre sur le code établissement GI If CodeEtabli = "GI" Then Key = RM.Cells(LigneRM, 25) + "!" + RM.Cells(LigneRM, 22) + "!" + RM.Cells(LigneRM, 28) + "!" + RM.Cells(LigneRM, 13) + "!" + RM.Cells(LigneRM, 16) + "!" + Right(RM.Cells(LigneRM, 24), 2) If Not Keylist.contains(Key) Then Keylist.Add (Key) 'Debug.Print Key End If 'if not If Dict.Exists(Key) Then IDX = wslist.IndexOf(WS, 0) SumAnnee = Dict(Key) SumAnnee(IDX) = SumAnnee(IDX) + RM.Cells(LigneRM, 26) Dict(Key) = SumAnnee Else ReDim SumAnnee(0 To 1) SumAnnee(0) = 0 SumAnnee(1) = 0 IDX = wslist.IndexOf(WS, 0) SumAnnee(IDX) = SumAnnee(IDX) + RM.Cells(LigneRM, 26) Dict(Key) = SumAnnee End If End If 'codeetabli LigneRM = LigneRM + 1 Loop Next WS DerniereligneRCAT = 8 'Ecriture des résultats Keylist.Sort Key2 = "" For Each Key In Keylist Colo25 = Split(Key, "!")(0) Colo22 = Split(Key, "!")(1) Colo28 = Split(Key, "!")(2) Colo13 = Split(Key, "!")(3) Colo16 = Split(Key, "!")(4) WSname = CInt(Split(Key, "!")(5)) Key1 = Colo25 + Colo22 + Colo28 + Colo13 + Colo16 If Key2 <> Key1 Then DerniereligneRCAT = DerniereligneRCAT + 1 Key2 = Key1 End If RCAT.Cells(DerniereligneRCAT, 1) = "GI" RCAT.Cells(DerniereligneRCAT, 2) = Colo25 RCAT.Cells(DerniereligneRCAT, 3) = Colo22 RCAT.Cells(DerniereligneRCAT, 4) = Colo28 RCAT.Cells(DerniereligneRCAT, 5) = Colo13 RCAT.Cells(DerniereligneRCAT, 6) = Colo16 RCAT.Cells(DerniereligneRCAT, 7) = Colo25 + "." + Colo22 + "." + Colo13 + "." + Colo16 RCAT.Cells(DerniereligneRCAT, 8 + WSname) = Dict(Key)(0) RCAT.Cells(DerniereligneRCAT, 21 + WSname) = Dict(Key)(1)
Configuration: Windows / Edge 94.0.992.47
A voir également:
- Comment faire un cumul mensuel ?
- Fiche de pointage mensuel - Télécharger - Tableur
- Tableau depense recette mensuel - Guide
- Calendrier mensuel excel à télécharger - Télécharger - Bureautique
- Créer un calendrier mensuel gratuit avec photo - Télécharger - Organisation
- Calendrier budget mensuel - Télécharger - Bourse & Finance
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
commence par expliquer à quelles lignes de code tu fais ces sommes, et où tu les stockes.
tu peux soit faire les cumuls au fir et à mesure, soit calculer les cumuls ensuite.
commence par expliquer à quelles lignes de code tu fais ces sommes, et où tu les stockes.
tu peux soit faire les cumuls au fir et à mesure, soit calculer les cumuls ensuite.
Bonjour,
Merci pour ton retour.
J'ai d'abord commencé par faire un dictionnaire des éléments à sommer par mois:
Après cela J'ai créer une variable sumAnnee(1) pour l'année 2020 et sumAnnee(2) pour l'année 2021 qui sont les onglets de bases e données utilisées dans le code.
En gros les sommes sont stockées dans sumAnnee(1) et sumAnnee(2).
Merci pour ton retour.
J'ai d'abord commencé par faire un dictionnaire des éléments à sommer par mois:
Key = RM.Cells(LigneRM, 25) + "!" + RM.Cells(LigneRM, 22) + "!" + RM.Cells(LigneRM, 28) + "!" + RM.Cells(LigneRM, 13) + "!" + RM.Cells(LigneRM, 16) + "!" + Right(RM.Cells(LigneRM, 24), 2)
Après cela J'ai créer une variable sumAnnee(1) pour l'année 2020 et sumAnnee(2) pour l'année 2021 qui sont les onglets de bases e données utilisées dans le code.
En gros les sommes sont stockées dans sumAnnee(1) et sumAnnee(2).
If CodeEtabli = "GI" Then Key = RM.Cells(LigneRM, 25) + "!" + RM.Cells(LigneRM, 22) + "!" + RM.Cells(LigneRM, 28) + "!" + RM.Cells(LigneRM, 13) + "!" + RM.Cells(LigneRM, 16) + "!" + Right(RM.Cells(LigneRM, 24), 2) If Not Keylist.contains(Key) Then Keylist.Add (Key) 'Debug.Print Key End If 'if not If Dict.Exists(Key) Then IDX = wslist.IndexOf(WS, 0) SumAnnee = Dict(Key) SumAnnee(IDX) = SumAnnee(IDX) + RM.Cells(LigneRM, 26) Dict(Key) = SumAnnee Else ReDim SumAnnee(0 To 1) SumAnnee(0) = 0 SumAnnee(1) = 0 IDX = wslist.IndexOf(WS, 0) SumAnnee(IDX) = SumAnnee(IDX) + RM.Cells(LigneRM, 26) Dict(Key) = SumAnnee End If
Les mois sont dans une colonne des onglets bases de données sous la forme "202103", j'ai précisé dans le dictionnaire qu'il fallait prendre les deux dernier chiffre de la droite.
Right(RM.Cells(LigneRM, 24), 2)
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
tu pourrais simplifier ton code:
- supprimer les déclarations de variables que tu n'utilises pas
- donner des noms plus clairs à tes variable "Colonn"
- assigner la valeur à IDX en dehors de la boucle while
- ne pas faire de multiples
- retirer du
- supprimer les déclarations de variables que tu n'utilises pas
- donner des noms plus clairs à tes variable "Colonn"
- assigner la valeur à IDX en dehors de la boucle while
- ne pas faire de multiples
redimde sumannee
- retirer du
If Dict.Exists(Key)tout le code qui est fait dans les deux cas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question