Option Explicit
Private Sub Worksheet_Activate()
Dim Rng As Range, AnDéb As Long, AnFin As Long, M As Long, CMax As Long, T(), L As Long, _
Compte As SsGr, Groupe As SsGr, LDéb As Long, Ligne As SsGr, BudReel As SsGr, _
LTot As Long, NonBudget As Boolean, Détail As Variant, An As Long, C As Long
Set Rng = ColUti(Feuil2.[B2])
AnDéb = Year(WorksheetFunction.Min(Rng))
AnFin = Year(WorksheetFunction.Max(Rng))
CMax = (AnFin - AnDéb + 1) * 14 + 4
ReDim T(1 To 5000, 1 To CMax)
For An = AnDéb To AnFin: For M = 1 To 12
T(1, (An - AnDéb) * 14 + 4 + M) = Format(DateSerial(An, M, 1), "'mmm yy"): Next M, An
For Each Compte In Gigogne(Feuil2.[A2], 6, 8, 9, -5)
L = L + 2: T(L, 1) = "Compte """ & Compte.ID & """."
For Each Groupe In Compte.Co
L = L + 1: LDéb = L ' On note cette ligne de début comme celle du total groupe REEL.
T(L, 1) = " Groupe """ & Groupe.ID & """.": T(L, 2) = "Total toutes lignes."
T(L, 3) = "REEL"
T(L + 1, 3) = "BUDGET"
T(L + 2, 3) = "Écart"
L = L + 3
For Each Ligne In Groupe.Co
For Each BudReel In Ligne.Co
NonBudget = BudReel.ID <> "BUDGET"
If NonBudget Then
L = L + 1
T(L, 2) = Ligne.ID
T(L, 3) = BudReel.ID
LTot = LDéb ' Ligne total Groupe REEL
Else
LTot = LDéb + 1 ' Ligne total Groupe BUDGET
End If
For Each Détail In BudReel.Co
If Détail(15) = "OUI" Then
An = Year(Détail(2))
C = (An - AnDéb) * 14 + 4 + Month(Détail(2))
If NonBudget Then T(L, C) = T(L, C) + Détail(18)
T(LTot, C) = T(LTot, C) + Détail(18) ' Cumul en ligne total Groupe.
C = (An - AnDéb) * 14 + 17
If NonBudget Then T(L, C) = T(L, C) + Détail(18)
T(LTot, C) = T(LTot, C) + Détail(18) ' Cumul en ligne total Groupe.
End If: Next Détail
Next BudReel
Next Ligne
For C = 4 To CMax: T(LDéb + 2, C) = T(LDéb, C) - T(LDéb + 1, C): Next C
Next Groupe
Next Compte
Me.[A30].Resize(5000, UBound(T, 2)).Value = T
End Sub