1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| Sub Somme()
Dim c As Range, Plage As Range
'"Cells(Rows.Count, 4)" est la dernière cellule de la colonne D
'"Cells(Rows.Count, 4).End(xlUp)" est la dernière cellule remplie de la colonne D
'"Range([D2], Cells(Rows.Count, 4).End(xlUp))" est la plage qui va de D2
'à la dernière cellule rermplie de la colonne D (ici, D17)
'on examine chaque cellule de cette plage
For Each c In Range([D2], Cells(Rows.Count, 4).End(xlUp))
'si il y a 3 caractères
If Len(c.Value) = 3 Then
'on retrouve "Cells(Rows.Count, 4).End(xlUp)" dernière cellule remplie
'"Cells(Rows.Count, 4).End(xlUp).Row" est le numéro de ligne de cette cellule
'on boucle sur les cellules à partir de la celluule au dessous de la cellule représentée par "c"
For i = c.Row + 1 To Cells(Rows.Count, 4).End(xlUp).Row
'si la cellule Cells(i, 4) a 4 caractères
If Len(Cells(i, 4)) = 4 Then
'"c.Offset(, 1)" ou "c.Offset(0, 1)" représente le décalage par rapport à c.
'"0" est le décalage en nombre de lignes et 1 en nombre de colonnes
' donc "c.Offset(, 1)" est la cellule à droite de la cellule c.
'"c.Offset(, 1).Formula" représente la formule de cette cellule
' "sum" représente la fonction Excel SOMME
'"Cells(c.Row + 1, 5).Address" est l'adresse de la cellule sous la cellule examinée
'"Cells(i, 5).Address" est l'adresse de la cellule définie par "i"
c.Offset(, 1).Formula = "=sum(" & Cells(c.Row + 1, 5).Address & _
":" & Cells(i, 5).Address & ")"
Else
'sinon on sort de la boucle commencée par "For i = ..."
Exit For
End If
Next i
ElseIf Len(c.Value) = 1 Then
Set Plage = Nothing
i = c.Row + 1
Do While Len(Cells(i, 4)) > 1
If Len(Cells(i, 4)) = 3 Then
If Plage Is Nothing Then
Set Plage = Cells(i, 5)
Else
Set Plage = Union(Plage, Cells(i, 5))
End If
End If
i = i + 1
Loop
c.Offset(, 1).Formula = "=sum(" & Plage.Address & ")"
End If
Next c
End Sub |
Partager