Bonjour le fil, bonjour le forum,
Une proposition VBA. Comme tu avais Tiroirs et tiroirs j'ai tout converti en majuscule (assez d'accord avec Patrick...). Les données sont renvoyées dans les colonnes G et H.
le code :
Sub Macro2()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable i (Incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Set O = Worksheets("Feuil1") 'définit l'onglet O
O.Columns("G:H").Clear 'efface les colonnes G et H (d'éventuelles anciennes données)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
D(UCase(TV(I, 1))) = D(UCase(TV(I, 1))) + TV(I, 2) 'alimente le dictionnaire I avec la donnée ligne I colonne 1 de TV (convertie en majuscule)
Next I 'prochaine ligne de la boucle
TV = O.Range("D1").CurrentRegion 'redéfinit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
D(UCase(TV(I, 1))) = D(UCase(TV(I, 1))) + TV(I, 2) 'alimente le dictionnaire I avec la donnée ligne I colonne 1 de TV (convertie en majuscule)
Next I 'prochaine ligne de la boucle
'renvoie dans la cellule G1 redimensionné de l'onglet O la liste des éléments du dictionnaire D sans doublon
O.Range("G1").Resize(D.Count, 1).Value = Application.Transpose(D.Keys)
'renvoie dans la cellule H1 redimensionné de l'onglet O le total de chaque élément du dictionnaire D sans doublon
O.Range("H1").Resize(D.Count, 1).Value = Application.Transpose(D.items)
End Sub
Si tu ne voulais que les liste sans les valeurs (car tes explications ne sont pas très claires), utilise ce code :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DLA As Integer 'déclare la variable DLA (Dernière Ligne de la colonne A)
Dim DLD As Integer 'déclare la variable DLD (Dernière Ligne de la colonne D)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable i (Incrément)
Dim D As Object 'déclare la variable D (Dictionnaire)
Set O = Worksheets("Feuil1") 'définit l'onglet O
O.Columns("G:G").Clear 'efface la colonne G (d'éventuelles anciennes données)
DLA = O.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLA de la colonne A de l'onglet O
DLD = O.Cells(Application.Rows.Count, "D").End(xlUp).Row 'définit la dernière ligne éditée DLD de la colonne D de l'onglet O
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
TV = O.Range("A2:A" & DLA) 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
D(UCase(TV(I, 1))) = "" 'alimente le dictionnaire I avec la donnée ligne I colonne 1 de TV (convertie en majuscule)
Next I 'prochaine ligne de la boucle
TV = O.Range("D2:DA" & DLD) 'redéfinit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
D(UCase(TV(I, 1))) = "" 'alimente le dictionnaire I avec la donnée ligne I colonne 1 de TV (convertie en majuscule)
Next I 'prochaine ligne de la boucle
'renvoie dans la cellule G1 redimensionné de l'onglet O la liste des éléments du dictionnaire D sans doublon
O.Range("G1").Resize(D.Count, 1).Value = Application.Transpose(D.Keys)
End Sub