Sub Traitement()
Dim TabTemp As Variant
Dim D As Date
Dim L As Long
With ActiveSheet
'Charge les données dans un tableau variant temporaire
L = .Range('A65536').End(xlUp).Row
TabTemp = .Range(.Cells(1, 1), .Cells(L, 1)).Value
'Date de référence = dernière date du tableau
D = TabTemp(L, 1)
'On parcourt chaque ligne en partant de la fin
For L = UBound(TabTemp, 1) To 1 Step -1
'Si c'est une date
If IsDate(TabTemp(L, 1)) Then
'Si Mois de référence <> Mois en cours de lecture
If Month(D) <> Month(TabTemp(L, 1)) Then
'On insère une ligne
InsereLigne L + 1, D
'On redéfinit la date de référence
D = TabTemp(L, 1)
End If
Else
InsereLigne L + 1, D
Exit For
End If
Next L
'S'il n'y a pas de ligne de titre (dates commencent en ligne 1)
If L = 0 Then InsereLigne 1, D
End With
End Sub
Sub InsereLigne(Lig As Long, M As Date)
With ActiveSheet
'Insertion de la ligne
.Rows(Lig).Insert
'Cellules grisées
.Range(.Cells(Lig, 1), .Cells(Lig, 10)).Interior.ColorIndex = 15
'Mois
.Cells(Lig, 1).Value = Application.WorksheetFunction.Proper(Format(M, 'mmmm yyyy'))
End With
End Sub