Option Explicit
Sub test()
Dim Arrêté As Date, TRés(), Code As SsGr, LaDate As Date, Montant As Currency, MtRçPréc As Currency, Détail, L&
Arrêté = [B1].Value
ReDim TRés(1 To 5000, 1 To 10)
L = -1
For Each Code In Gigogne(TableUnique(Feuil2.[A2:C2], Feuil3.[A2:C2]), 1, Null, 2)
L = L + 1: MtRçPréc = 0
For Each Détail In Code.Co
LaDate = Détail(2)
Montant = Détail(3)
If LaDate > Arrêté Then Exit For
L = L + 1
TRés(L, 1) = Code.Id
TRés(L, 2) = MtRçPréc
If Détail(0) = 0 Then
TRés(L, 3) = LaDate
TRés(L, 4) = Montant
MtRçPréc = MtRçPréc + Montant
Else
TRés(L, 5) = LaDate
TRés(L, 6) = Montant
TRés(L, 7) = IIf(TRés(L, 6) > TRés(L, 2), TRés(L, 2), TRés(L, 6))
TRés(L, 8) = TRés(L, 2) + TRés(L, 4) - TRés(L, 7)
TRés(L, 9) = TRés(L, 6) - TRés(L, 7) + TRés(L - 1, 8)
TRés(L, 10) = IIf(TRés(L, 5) > Arrêté, Arrêté, "")
MtRçPréc = MtRçPréc - Montant
End If: Next Détail, Code
[L16].Resize(5000, 10).Value = TRés
End Sub