cathodique
XLDnaute Barbatruc
Bonsoir,
Merci de m'aider à comprendre cette incohérence. Cherchant à faire un cumul par mois, j'ai utilisé la fonction Sumifs (sur proposition de Chris que je salue) et ce pour la première fois (jamais utilisé même sur une feuille de calcul.
L'incohérence réside dans les dates, si je mets pour le format des dates "mmmm yyyy", c-à-d afficher mois et année complet (janvier 2017), là tout va bien le mois est à gauche et l'année à droite.
Par contre, si je veux afficher en mois réduit (mmm yyyy) tous les affichages sont bons sauf pour sepembre, octobre et novembre, il y a une inversion c-à-d année puis mois.
Voici le résultat obtenu:
janv 17
févr 17
mars 17
avr 17
mai 17
juin 17
juil 17
août 17
17-sept
17-oct
17-nov
déc 17
Je suis déboussolé. Est-ce qu'il y a une erreur dans mon code. Merci à vous par avance.
Merci de m'aider à comprendre cette incohérence. Cherchant à faire un cumul par mois, j'ai utilisé la fonction Sumifs (sur proposition de Chris que je salue) et ce pour la première fois (jamais utilisé même sur une feuille de calcul.
L'incohérence réside dans les dates, si je mets pour le format des dates "mmmm yyyy", c-à-d afficher mois et année complet (janvier 2017), là tout va bien le mois est à gauche et l'année à droite.
Par contre, si je veux afficher en mois réduit (mmm yyyy) tous les affichages sont bons sauf pour sepembre, octobre et novembre, il y a une inversion c-à-d année puis mois.
Voici le résultat obtenu:
janv 17
févr 17
mars 17
avr 17
mai 17
juin 17
juil 17
août 17
17-sept
17-oct
17-nov
déc 17
VB:
Sub Mensuel()
Dim mois As Integer, An As Integer, derlig As Integer, NBd As Long, dl As Long
Dim TotMoisD As Currency, TotMoisR As Currency
Dim ShBd As Worksheet, ShSyn As Worksheet
Application.ScreenUpdating = False
'On Error Resume Next
Set ShBd = Worksheets("BD")
Set ShSyn = Worksheets("MaFeuille")
NBd = ShBd.Cells(ShBd.Rows.Count, 1).End(xlUp).Row
dl = ShSyn.Cells(ShSyn.Rows.Count, 1).End(xlUp).Row
If dl > 5 Then ShSyn.Range("A6:I" & dl).Rows.Delete
derlig = 6
For An = Year(WorksheetFunction.Min(ShBd.Range("A2:A" & NBd))) To Year(WorksheetFunction.Max(ShBd.Range("A2:A" & NBd)))
For mois = 1 To 12
TotMoisR = WorksheetFunction.SumIfs(ShBd.Range("B2:B" & NBd), ShBd.Range("A2:A" & NBd), ">=" & mois & "/01/" & An, ShBd.Range("A2:A" & NBd), "<" & WorksheetFunction.EoMonth(mois & "/01/" & An, 0))
TotMoisD = WorksheetFunction.SumIfs(ShBd.Range("c2:c" & NBd), ShBd.Range("A2:A" & NBd), ">=" & mois & "/01/" & An, ShBd.Range("A2:A" & NBd), "<" & WorksheetFunction.EoMonth(mois & "/01/" & An, 0))
If TotMoisR <> 0 Or TotMoisD <> 0 Then
ShSyn.Cells(derlig, 1) = Format(CDate("01/" & mois & "/" & An), "mmmm yyyy")
ShSyn.Cells(derlig, 2) = TotMoisR
ShSyn.Cells(derlig, 3) = TotMoisD
derlig = derlig + 1
End If
Next mois
Next An
End Sub