Extraire des valeurs uniques d’une colonne, Excel VBA
Voici une explication détaillée pour un code VBA permettant d’extraire des valeurs uniques d’une colonne dans Excel.
Objectif :
L’objectif de ce code VBA est d’extraire les valeurs uniques d’une colonne donnée de données et de les afficher dans une autre colonne (ou même sur une autre feuille). Par « valeurs uniques », on entend seulement les entrées distinctes, sans doublons.
Explication étape par étape :
1. Comprendre la tâche :
- Dans une feuille Excel, les données peuvent contenir des doublons, ce qui peut rendre l’analyse plus difficile.
- Le but de ce code est d’extraire uniquement les valeurs uniques à partir d’une colonne de données donnée.
- Par exemple, si vous avez une liste de noms et que certains se répètent, ce code extraira et affichera seulement les noms distincts.
2. Logique de base du code :
- Identifier la plage de données contenant les valeurs (supposons que ce soit dans la colonne A).
- Utiliser une collection (une structure de données) pour stocker uniquement les valeurs uniques de cette colonne.
- La raison pour laquelle nous utilisons une collection est que cette structure de données ne permet pas les doublons lorsqu’on tente d’ajouter des éléments, ce qui permet de garder uniquement les valeurs distinctes.
- Une fois toutes les valeurs uniques extraites, nous les afficherons dans une autre colonne (par exemple la colonne B).
Code VBA pour Extraire des Valeurs Uniques :
Sub ExtraireValeursUniques() ' Déclaration des variables nécessaires Dim plageSource As Range Dim plageSortie As Range Dim collectionUnique As Collection Dim cellule As Range Dim element As Variant Dim derniereLigne As Long Dim ligneSortie As Long ' Définir la plage source (ajuster si nécessaire) derniereLigne = Cells(Rows.Count, "A").End(xlUp).Row ' Trouver la dernière ligne des données dans la colonne A Set plageSource = Range("A1:A" & derniereLigne) ' Définir la plage source de A1 à la dernière ligne ' Créer une nouvelle collection pour stocker les valeurs uniques Set collectionUnique = New Collection ' Boucle à travers la plage source et ajouter les valeurs uniques à la collection On Error Resume Next ' Ignorer les erreurs lors de l'ajout de valeurs en double dans la collection For Each cellule In plageSource If cellule.Value <> "" Then ' Vérifier que la cellule n'est pas vide collectionUnique.Add cellule.Value, CStr(cellule.Value) ' Utiliser la valeur comme élément et clé (la clé doit être unique) End If Next cellule On Error GoTo 0 ' Désactiver le gestionnaire d'erreurs ' Définir la plage de sortie, en commençant par B1 (ou un autre emplacement) Set plageSortie = Range("B1") ligneSortie = 1 ' Commencer à afficher à partir de la première ligne de la colonne B ' Boucle à travers la collection et afficher les valeurs uniques For Each element In collectionUnique plageSortie.Cells(ligneSortie, 1).Value = element ligneSortie = ligneSortie + 1 ' Passer à la ligne suivante pour l'affichage Next element ' Avertir l'utilisateur que la tâche est terminée MsgBox "Les valeurs uniques ont été extraites avec succès !", vbInformation End Sub
Explication du Code :
1. Déclaration des Variables :
- plageSource : Cette variable contient la plage de cellules à partir de laquelle nous voulons extraire les valeurs uniques. C’est la colonne qui contient les données initiales.
- plageSortie : Cette variable spécifie où nous souhaitons afficher les valeurs uniques. Vous pouvez modifier cette plage pour afficher les valeurs où vous le souhaitez dans votre feuille de calcul.
- collectionUnique : Il s’agit d’un objet Collection qui stockera uniquement les valeurs uniques. L’objet Collection en VBA ne permet pas les doublons lorsqu’on tente d’ajouter un élément via la méthode Add. C’est cette fonctionnalité qui nous permet de ne garder que les valeurs uniques.
- cellule : Un objet Range utilisé pour parcourir chaque cellule dans la plage source.
- element : Une variable qui contient un élément (valeur unique) lorsque nous parcourons la collection.
- derniereLigne : Cette variable détermine la dernière ligne contenant des données dans la colonne A. Cela nous permet de ne pas traiter des cellules vides inutilement.
- ligneSortie : Permet de suivre la ligne où nous devons placer la prochaine valeur unique dans la colonne de sortie.
2. Définir la Plage Source :
- Nous déterminons la dernière ligne des données dans la colonne A en utilisant Cells(Rows.Count, « A »).End(xlUp).Row. Cela trouve la dernière cellule contenant des données dans la colonne A. Nous définissons ensuite la plage source de A1 à cette dernière ligne.
3. Créer la Collection pour les Valeurs Uniques :
- Une nouvelle Collection est créée. C’est là que nous allons stocker les valeurs uniques. La clé utilisée dans la collection est la valeur elle-même (CStr(cellule.Value)). La raison d’utiliser CStr(cellule.Value) est que la collection utilise la clé pour s’assurer qu’il n’y a pas de doublons, et la clé doit être une chaîne unique.
4. Boucle à Travers la Plage Source :
- Nous parcourons chaque cellule dans la plageSource. Si la cellule contient une valeur (i.e. qu’elle n’est pas vide), nous essayons d’ajouter cette valeur à la collectionUnique.
- La ligne On Error Resume Next permet d’ignorer les erreurs générées lorsqu’un doublon est trouvé (lorsqu’on essaie d’ajouter une valeur qui existe déjà dans la collection).
- On Error GoTo 0 rétablit le comportement normal de gestion des erreurs après que nous ayons fini d’ajouter les éléments à la collection.
5. Afficher les Valeurs Uniques :
- Après avoir extrait toutes les valeurs uniques dans la collection, nous commençons à les afficher dans la plageSortie (en commençant à la cellule B1).
- Nous parcourons la collection avec For Each element In collectionUnique et affichons chaque valeur unique dans la plage de sortie, ligne après ligne.
- La variable ligneSortie permet de s’assurer que les valeurs uniques sont affichées sur des lignes consécutives.
6. Message Final :
- Une fois que toutes les valeurs uniques ont été extraites et affichées, une boîte de message apparaît pour informer l’utilisateur que la tâche est terminée.
Comment Cela Fonctionne dans la Pratique :
- Supposons que vous ayez les données suivantes dans la colonne A :
A1: Pomme
A2: Banane
A3: Pomme
A4: Orange
A5: Banane
A6: Raisin
- Après l’exécution du code, les valeurs uniques seront affichées dans la colonne B :
B1: Pomme
B2: Banane
B3: Orange
B4: Raisin
Points à Considérer :
- Gestion des Cellules Vides : Le code ignore les cellules vides grâce à la vérification If cellule.Value <> « ». Vous pouvez modifier ce comportement si vous souhaitez inclure les valeurs vides également.
- Performance : Ce code est optimisé pour des petits ensembles de données. Toutefois, pour des ensembles de données très volumineux (par exemple des milliers de lignes), les performances peuvent être affectées. Dans ce cas, il pourrait être nécessaire d’optimiser davantage, par exemple en utilisant des tableaux pour gérer les données avant de les traiter.
Conclusion :
Ce code VBA fournit une méthode efficace pour extraire les valeurs uniques d’un ensemble de données dans Excel. En utilisant des collections VBA, nous nous assurons que seules les entrées distinctes sont extraites, ce qui en fait un outil puissant pour le nettoyage ou la préparation des données.