| |
On souhaite récupérer les items d'une plage, mais on ne veut pas inclure les items en double.
La technique consiste à créer un objet Collection.
Vous pouvez ajouter des éléments à une collection avec la syntaxe suivante :
| |
object.Add item,key, before, after |
Définition de key :
Expression de chaîne unique indiquant une chaîne de clé susceptible d'être utilisée à la place de l'index de
position pour accéder à un membre de la collection.
On commence par déclarer une nouvelle collection nommée NoDupes.
| |
Dim
NoDupes
As New Collection
|
On sélectionne une plage contenant la liste des items dont certains peuvent être dupliqués.
Le code VBA effectue une boucle sur la plage sélectionnée et tente d'ajouter la valeur de
chaque item (converti en une chaîne de caractères) pour l'argument clé :
| |
NoDupes.Add A(j,
1
),
CStr
(A(j,
1
))
|
En utilisant la déclaration On Error Resume Next, VBA ignore l'erreur qui se produit si la
clé n'est pas unique.
En cas d'erreur, l'item n'est pas ajouté à la collection, ce qui est exactement ce que l'on veut.
L'argument "Key", s'il est utilisé, doit être une chaîne de texte (CStr) qui spécifie une clé qui
peut être utilisée pour accéder à un membre de la collection.
Ce mot important (Key) ici est unique. Si vous tentez d'ajouter une "NonUnique" Key à la collection,
une erreur se produit et les données ne sont pas ajoutés.
Vous pouvez tirer parti de cette situation et l'utiliser pour créer une collection qui se compose
uniquement de données uniques.
Exemple de cas d'utilisation :
- Remplir une Listbox ou une ComboBox avec des items uniques
- Extraire les items uniques d'une liste et les mettre dans un Tableau()
- Extraire les items uniques d'une liste sans passer par un filtre élaboré
- Compter les items uniques d'une liste et afficher le résultat
Ce qui donne le code suivant :
| |
' Déclaration d'une nouvelle collection
Dim
NoDupes
As New Collection
' Sélection de la plage à traiter
A = Range([A2], [A65536].End(xlUp)).Value
' Désactivation du gestionnaire d'erreurs
On Error Resume Next
' Boucle pour récupérer la collection d'items uniques
For
j =
1
To
UBound
(A,
1
)
NoDupes.Add A(j,
1
),
CStr
(A(j,
1
))
Next
j
' Réactivation du gestionnaire d'erreurs
On Error GoTo
0
|
Ensuite en fonction du besoin on lit la collection ...
Ecrire la collection dans une feuille de calcul
| |
For
i =
1
To NoDupes.Count
Cells(i +
1
,
4
).Value = NoDupes(i)
Next
i
|
Remplir une ListBox ou Combobox
| |
For
i =
1
To NoDupes.Count
Me.ListBox1.AddItem NoDupes(i)
Next
i
|
Remplir un tableau
| |
ReDim
Tableau(
1
To NoDupes.Count)
For
i =
1
To NoDupes.Count
Tableau(i) = NoDupes(i)
Next
i
|
Compter les items uniques contenus dans une liste et afficher le résultat
| |
MsgBox
"Le nombre d'items uniques est de : "
&
NoDupes.Count
|
|