Sub Bouton1_QuandClic()
Dim data As New Collection
Dim tablo
Dim tablores()
Dim c As Range
Dim i As Integer, j As Integer
Dim k As Byte
Dim plage1 As Range
Dim plage2 As Range
'crée une variable (plage1) objet(set) contenant la plage A1:a...
Set plage1 = Range('a1:a' & Range('a65536').End(xlUp).Row)
'crée une variable (plage2) objet(set) contenant la plage j1:a...
Set plage2 = Range('j1:j' & Range('j65536').End(xlUp).Row)
'stock dans un tableau variant l'ensemble des données
tablo = Range('a1:j' & Range('j65536').End(xlUp).Row)
'utilisation d'une collection pour extraire sans doublons
'on error resume next, annule les erreurs provoquées par des clées doublons
On Error Resume Next
'pour chaque cellule (c) de la plage1
For Each c In plage1
'ajoute (add) à la collection (data) l'item (c), et la clé (cstr(c))
data.Add c, CStr(c)
'cellule suivante
Next c
'réinitialise le gestionnaire d'erreur
On Error GoTo 0
'prépare un tableau dynamique (tablores)
'en le dimmensionnant pour x lignes (1 to data.count) et 9 colonnes (1 to 9)
ReDim tablores(1 To data.Count, 1 To 10)
'boucle sur chaque élément de la collection data
For i = 1 To data.Count
'remplit la premiere colonne de la ligne i de tablores avec
'l'element i de la collection (data(i))
tablores(i, 1) = data(i)
'boucle sur chaque ligne du tableau de stock des données (tablo)
'de la ligne 1 jusqu'à la limite supérieur du tableau
For j = 1 To UBound(tablo)
'si la premiere colonne de la ligne i du tableau de stockage est
'egale à la valeur de la premiere colonne du tableau de resultat
'j'aurais pu faire aussi : if tablo(j,i)=data(i)
If tablo(j, 1) = tablores(i, 1) Then
'boucle sur les 8 colonne du tablo de stockage
For k = 2 To 9
'et alimente les 8 colonnes du tableau de résultat
tablores(i, k) = tablo(j, k)
Next k
End If
Next j
'ici c'est la somme
'j'utilise simplement la syntaxe vba de la formule somme.si
'somme.si(plage,critere,plageàsommer)
'somme.si(range('a1:ax),criteres,range('j1:jx')
'et je stocke le résultat dans la derniere colonne du tableau résultat
tablores(i, 10) = Application.SumIf(plage1, data(i), plage2)
Next i
'renvoi en feuille 2 à partir de A1 le tableau de résultat
Sheets(2).Range('a1').Resize(UBound(tablores, 1), 10) = tablores
End Sub