Sub SommeSi()
Range("C10").Formula = "=SUMIF($A$2:$A$9,$A$2,C2:C9)"
Range("C10").AutoFill Range("C10:J10")
Range("C11").Formula = "=SUMIF($A$2:$A$9,$A$6,C2:C9)"
Range("C11").AutoFill Range("C11:J11")
End Sub
Option Explicit
Function TotauxPers(ByVal Src As Range) ' pas inspiré du tout par un code de J. BOISGONTIER !!!
Dim Ts(), Pers As SsGroup, Acti As SsGroup, TotActi(8 To 41) As Double, Ls&, Détail, C&
ReDim Ts(1 To Application.Caller.Rows.Count, 1 To 41)
For Each Pers In GroupOrg(Src, 1, 2)
Ls = Ls + 6: Ts(Ls, 1) = Pers.Id: Ts(Ls, 2) = "Total"
For Each Acti In Pers.Contenu
For C = 8 To 41: TotActi(C) = 0: Next C
For Each Détail In Acti.Contenu
For C = 8 To 41: TotActi(C) = TotActi(C) + Détail(C): Next C, Détail
For C = 8 To 41: Ts(Ls, C) = Ts(Ls, C) + TotActi(C): Next C, Acti, Pers
TotauxPers = Ts
End Function
Function TotauxPers(ByVal Src As Range)
Dim Ts(), Pers As SsGroup, Ls&, Détail, dC&, C&
With Application.Caller: ReDim Ts(1 To .Rows.Count, 1 To .Columns.Count): End With
dC = Src.Columns.Count - UBound(Ts, 2)
For Each Pers In GroupOrg(Src, 1)
Ls = Ls + 1: Ts(Ls, 1) = "Total " & Pers.Id
For Each Détail In Pers.Contenu
For C = 2 To UBound(Ts, 2): Ts(Ls, C) = Ts(Ls, C) + Détail(C + dC): Next C, Détail, Pers
While Ls < UBound(Ts): Ls = Ls + 1: For C = 1 To UBound(Ts, 2): Ts(Ls, C) = "": Next C: Wend
TotauxPers = Ts
End Function
=TotauxPers($A$2:DECALER($J10;-1;0))
=TotauxPers(A$12:DECALER($AO3853;-1;0))
Total Tata | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 8 | 0 | 0 |
Total Titi | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 4 | 4 | 0 | 0 |
Total Toto | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 8 | 0 | 0 |
Total | 764 | 768 | 768 | 768 | 768 | 0 | 0 | 768 | 0 | 768 | 760 | 768 | 0 | 0 | 768 | 760 | 768 | 768 | 768 | 0 | 0 | 768 | 768 | 768 | 768 | 768 | 0 | 0 | ### | ### | 0 | 0 |
With Application.Caller
ReDim Ts(1 To .Rows.Count, 1 To .Columns.Count)
dC = .Column - 1: End With