Bonjour le fil, bonjour le forum,
Peut-être comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Private Sub UserForm_Initialize() 'à l'initialisation de l'userForm Dim O As Worksheet 'déclare la variable O (Onglet) Dim TC As Variant 'déclare la variable TC (Tableau de Cellules) Dim D As Object 'déclare la variable D (Dictionnaire) Dim I As Integer 'déclare la variable I (Incrément) Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire) Me.ListBox1.ColumnCount = 2 'définit le nombre de colonnes de la Listbox1 Set O = Sheets("Feuil1") 'définit l'onglet O (à adaper) TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC Set D = CreateObject("Scripting.Dictionary") For I = 2 To UBound(TC, 1) 'boucle sut toutes les lignes I du tableau de cellules TC (en partant de la seconde) D(TC(I, 1) & "/" & TC(I, 2)) = "" 'alimente le dicionnaire D avec la donnée colonne 1 séparée de "/" de la donnée de la colonne 2 Next I 'prochaine ligne de la boucle TMP = D.keys 'récupere dans le tableau temporaire TMP la liste du dictionnaire D sans doublon Call tri(TMP, LBound(TMP, 1), UBound(TMP, 1)) 'tri alphabétique (par rapport à la colonne 1 du tableau TMP) For I = 0 To UBound(TMP, 1) 'boucle sur toutes les données (triées et sans doublon) du tableau temporaire TMP With Me.ListBox1 'prend en compte la ListBox1 .AddItem 'ajoute l'élément .Column(0, .ListCount - 1) = Split(TMP(I), "/")(0) 'récupère dans la colonne 0 de la ListBox1 la donnée de la première colonne du tableau TC .Column(1, .ListCount - 1) = Split(TMP(I), "/")(1) 'récupère dans la colonne 1 de la ListBox1 la donnée de la seconde colonne du tableau TC End With 'fin de la prise en compte de la ListBox1 Next I 'prochaine donnée de la boucle End Sub Sub tri(a, gauc, droi) ' Quick sort tiré du site de Jacques BOISGONTIER : http://boisgontierjacques.free.fr/pages_site/Dictionnaire.htm ref = a((gauc + droi) \ 2) g = gauc: D = droi Do Do While a(g) < ref: g = g + 1: Loop Do While ref < a(D): D = D - 1: Loop If g <= D Then temp = a(g): a(g) = a(D): a(D) = temp g = g + 1: D = D - 1 End If Loop While g <= D If g < droi Then Call tri(a, g, droi) If gauc < D Then Call tri(a, gauc, D) End Sub
Partager