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
| 'Permet d'agreger les lignes
Public Sub FaireSousTotaux()
Dim colonneCle As Integer
Dim colonnesAddition() As Integer
Dim rg As Range
Dim i As Integer, j As Integer
Dim nbRows As Integer
Dim dic As Dictionary
Dim cle As String
Dim oldVal As Double
colonneCle = 1 'L'identifiant unique du produit
colonnesAddition = Array(4, 6) 'Les colonnes pour lesquelles il faut faire des totaux
Set rg = Selection 'C'est pour les tests, il faudrait sans doute définir la plage autrement
' je prends ici les données sans la ligne de titres
Set dic = New Dictionary 'La collection qui va contenir la correspondance identifiant ligne
nbRows = rg.Rows.Count
i = 1
Do While i <= nbRows
cle = rg.Cells(i, colonneCle)
'On regarde si le produit existe déjà
If dic.Exists(cle) Then
'S'il existe, on ajoute les valeurs et on efface la ligne
For j = 0 To UBound(colonnesAddition)
oldVal = rg.Cells(dic(cle), colonnesAddition(j)).Value
oldVal = oldVal + rg.Cells(i, colonnesAddition(j)).Value
rg.Cells(dic(cle), colonnesAddition(j)).Value = oldVal
Next j
rg.Cells(i, 1).EntireRow.Delete
Else
'S'il n'existe pas on l'ajoute
dic.Add cle, i
i = i + 1
End If
Loop
End Sub |
Partager