Listbox alimenté avec une extraction sans doublon

Je voudrais alimenter un listbox avec des noms contenu dans une colonne. Il y a des noms répétés et je n'en veux qu'un exemplaire. De plus il y a dans cette colonne le mot "utilisateur" que je ne dois pas prendre en compte.

Cette routine, qui ignore les cellules vides et les valeurs d'erreur utilise l'objet Dictionnary de l'environnement des scripts.

Private sub UserForm_Initialize() 
Dim Table As Scripting.Dictionary
 Dim i&, j&, Valide As Boolean, A As Variant  
Set Table = New Scripting.Dictionary 
j = 0  
With Sheets("toto") ' À adapter 
For Each A In .Range("B2:B" & .Range("A1").End(xlDown).Row)  
'Vérifie si le nom n'est pas une erreur, n'est pas vide 
'n'a pas déjà été récupéré, ne contient pas "utilisateur"  
Valide = True  
If IsError(A) Then   
Valide = False ' on n'y met pas les valeurs d'erreur 
 ElseIf Len(A) = 0 Then   
Valide = False 
 ElseIf Table.Exists(A.Value) Then   
Valide = False  
Else ' test spécial   
If InStr(LCase(A), "utilisateur") > 0 Then 
Valide = False  
End If  
 If Valide Then Table.Add A.Value, j: j = j + 1 'rajoute Next 
End With 
 For i = 0 To Table.Count - 1  
Debug.Print Table.Keys(i)  
ListBox1.AddItem (Table.Keys(i)) 
Next i 
Set Table = Nothing ' Nettoyage 
End sub 

Attention, si tu rencontres une erreur au moment de l'exécution du code et que celui-ci s'arrête sur Dim Table as Scripting.Dictionary, dans la Fenêtre VBE(visual basic editor) / barre des menus / outils / références / vérifie bien que "Microsoft scripting Runtime" est coché

Auteurs : ,

Mots clefs associés à cette page : , ,