Option Base 1
Sub test()
Dim c As Range, Tabl(12) As String, Ctr As Double
Dim Ligne As Long, LigneDeb As Long, LigneCred As Long
Ligne = 2
For Each c In Range([E4], Cells(Rows.Count, 5).End(xlUp))
Tabl(Month(c.Value)) = "X"
Next c
For i = 1 To 12
Ctr = 0
If Tabl(i) <> "" Then
Ligne = Ligne + 2
Cells(Ligne, 26) = DateSerial(2012, i, 1)
Cells(Ligne, 26).NumberFormat = "mmm-yyyy"
LigneDeb = Ligne
LigneCred = Ligne
For Each c In Range([E4], Cells(Rows.Count, 5).End(xlUp))
If DateSerial(Year(c.Value), Month(c.Value), 1) = Cells(Ligne, 26) Then
If c.Offset(, 2) > 0 Then
Cells(LigneCred, "AA") = Cells(c.Row, 3)
Cells(LigneCred, "AB") = Cells(c.Row, 5)
Cells(LigneCred, "AC") = Cells(c.Row, 8)
Cells(LigneCred, "AD") = Cells(c.Row, 7)
Ctr = Ctr + Cells(c.Row, 7)
LigneCred = LigneCred + 1
Else
Cells(LigneDeb, "V") = Cells(c.Row, 3)
Cells(LigneDeb, "W") = Cells(c.Row, 5)
Cells(LigneDeb, "X") = Cells(c.Row, 8)
Cells(LigneDeb, "Y") = Cells(c.Row, 7)
Ctr = Ctr + Cells(c.Row, 7)
LigneDeb = LigneDeb + 1
End If
End If
Next c
Cells(Ligne + 1, 26) = Ctr
Cells(Ligne + 1, 26).NumberFormat = "General"
Ligne = Application.Max(LigneCred, LigneDeb)
End If
Next i
End Sub