Bonjour Dranreb,
J'essaye d'avancer en utilisant tes recommandations,
1- Dans les 2 premières lignes de la macro, j'ai le message suivant "L'indice n'appartient pas à la sélection" au niveau du Next C. La valeur de C reste à 1.
For C = 1 To 10: TS(1, C) = Choose(C, "OP", "DPT", "SITE", "SUB", _
"", "", "A+D+F", "B+C+G", "E", "Total"):
Next C
2- Où utiliser ColGrStat.Id dans la macro ?
Les autres macros de synthèse et de récap fonctionnent par contre je n'arrive pas à avancer avec celle là.
Merci de ton aide
KIM
Ci-dessous la macro Synthese_ParOP_DPT_Site_GrouperCol_v3
Sub Synthese_ParOP_DPT_Site_GrouperCol_v3()
'Synthese R3
Dim Données As Range, DCols As Dictionary, TS(), CFin As Long, L As Long, C As Long, Détail, _
DR As SsGr, TotDR As Double, SITE As SsGr, TotSite As Double, Statut As SsGr, Tot As Double
Dim OP As SsGr, TotOP As Double
Dim NbDR As Long, NbSite As Long, DRtot As Double, TotGlobal As Double, NbC(), NbG()
Dim ColTitre As Long, TotOP_G As Long, TotDR_G As Long, TotSite_G As Long
Dim TitOP As Range, TitDR As Range, TitDét As Range
Dim TotD(), TSpl(), TE(), TotG(), N
For C = 1 To 10: TS(1, C) = Choose(C, "OP", "DPT", "SITE", "SUB", _
"", "", "A+D+F", "B+C+G", "E", "Total"): Next C
Set DCols = New Dictionary
For C = 7 To 9: TSpl = Split(TS(1, C), "+")
For N = 0 To UBound(TSpl): DCols(TSpl(N)) = C: Next N, C
TE = ColUti(FBase1.[A5
5]).Value
For L = 1 To UBound(TE, 1)
If Not DCols.Exists(TE(L, 16)) Then MsgBox "Statut """ & TE(L, 16) & """ non prévu.", vbCritical: Exit Sub
TE(L, 16) = DCols(TE(L, 16)): Next L
L = 1
For Each OP In Gigogne(TE, 10, 1, 2, 16)
TotOP = 0
For Each DR In OP.Co
TotDR = 0
For Each SITE In DR.Co
L = L + 1
TS(L, 1) = OP.Id
TS(L, 2) = DR.Id
TS(L, 3) = SITE.Id
TotSite = 0
NbDR = 0
For Each Statut In SITE.Co
C = DCols(Statut.Id)
Tot = 0
For Each Détail In Statut.Co
Tot = Tot + Détail(14): Next Détail
TS(L, C) = Tot
TotSite = TotSite + Tot
TotOP = TotOP + Tot
TotDR = TotDR + Tot
NbDR = NbDR + Statut.Count
TotG(C) = TotG(C) + Tot: TotG(CFin) = TotG(CFin) + Tot
TotD(C) = TotD(C) + Tot
NbG(C) = NbG(C) + Statut.Count: NbG(CFin) = NbG(CFin) + Statut.Count
Next Statut
TS(L, 4) = TotSite
TS(L, CFin) = TotSite: Next SITE
L = L + 1: TS(L, 2) = "Total DPT": TS(L, 4) = TotDR: TS(L, CFin) = TotDR
L = L + 1: Next DR
L = L + 1: TS(L, 1) = "Total OP": TS(L, 4) = TotOP: TotGlobal = TotGlobal + TotOP: L = L + 1: Next OP
L = L + 1
L = L + 1: TS(L, 1) = "Total"
TS(L, 4) = TotGlobal
For C = 7 To CFin
TS(L, C) = TotG(C)
TS(L + 1, C) = NbG(C)
Next C
FR3.[4:1000].ClearContents
FR3.[A4].Resize(1000, CFin).Value = TS
End Sub