Private test As Boolean 'déclare la variable test
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim plv As Range 'déclare la variable plv (PLage des Valeurs)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim tot As Integer 'déclare la variable tot (TOTal)
If test = True Then Exit Sub 'si test est vraie, sort de la procédure
dl = Cells(Application.Rows.Count, 6).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 6 (=F)
Set pl = Range("F2:F" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
If cel.Offset(0, -1).Value <> "" Then 'condition 1 : si la cellule à gauche n'est pas vide
If plv Is Nothing Then 'condition 2 : si la plage plv n'a pas encore été définie
Set plv = cel 'définit la plage plv (cellule unique)
Else 'sinon
Set plv = Application.Union(plv, cel) 'définit la plage plv (union des cellules)
End If 'fin de la condition 2
End If 'fin de la condition 1
Next cel 'prochaine cellule de la boucle
test = True 'définit la variable test
For Each cel In plv 'boucle sur toutes les cellule cel de la plage plv
tot = tot + cel.Value 'définit le total tot
If cel.Offset(1, -1).Value = "" Then 'condition : si la cellule en dessous de cel, colonne E est vide
cel.Offset(1, 0).Value = tot 'place le total dans la cellule en dessous de cel
tot = 0 'réinitialise le total tot
End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
test = False 'redéfinit la variable test
End Sub