Création d'un objet Collection

Page mise à jour le : 22/03/2008

         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

Fichier disponible en téléchargement