Un problème récurrent sous Excel consiste à créer une liste de valeurs uniques de données, à partir d’une ou plusieurs listes. Je vais vous montrer 2 méthodes pour éliminer les doublons à partir d’une ou plusieurs listes.
Imaginez par exemple que vous travaillez sur des listes d’email de clients à qui vous avez envoyé plusieurs campagnes de marketing, et vous souhaitez supprimer les doublons pour avoir une liste unique des emails utilisés.
Méthode N°1: manuelle avec les fonctions natives d’Excel
Il existe un outil intégré à Excel pour retirer les doublons d’une liste. C’est parfait si vous hésitez à utiliser des formules ou du VBA.
Il vous suffit de sélectionner votre liste puis d’aller dans le menu Données > Supprimer les doublons
Dans la fenêtre qui s’ouvre, il vous suffit de cliquer sur « Supprimer les doublons« .
Excel va tout simplement remplacer votre liste par une liste toute propre de valeurs uniques! Dans notre cas on est passé de 27 à 18 emails.
Si vous souhaitez travailler avec plusieurs listes… il vous suffit de les copier coller les unes à la suite des autres en une grosse liste, puis de supprimer les doublons sur cette liste globale avec la méthode exposée ci dessus.
Vous voulez une méthode plus sexy, qui se calcule automatiquement? C’est parti, je vous montre comment faire avec des formules.
Méthode N°2 : Avec des formules
La première méthode est facile à utiliser, mais ne se calcule pas automatiquement. C’est limitant si vous faites souvent appel à ce type d’opération. D’autre part, dans certains cas on n’a pas envie de modifier les données de départ (par exemple données exportées d’un autre logiciel, et qu’on veut garder intactes car utilisées dans plusieurs onglets).
Je vais donc vous montrer une solution pour automatiser tout ça (et sans macros s’il vous plait).
Pour calculer la liste des valeurs uniques, on a besoin d’une étape intermédiaire. Il nous faut à chaque valeur répondre à la question: Quelle est la prochaine valeur unique? Cela revient à se demander: Dans mes valeurs d’origine, quelle est la première valeur qui ne se trouve pas dans la liste des valeurs que j’ai déjà identifiées comme uniques?
La colonne D reproduit le calcul dont on a besoin en B9 : quelle est la première valeur unique qui n’est pas déjà incluses dans les valeurs B2 à B8 ? Pour cela on a besoin de générer pour chaque cellule de la colonne A, le test de savoir si c’est une nouvelle valeur unique ou pas. C’est la liste de valeurs entre D2 et D27. La formule utilisée renvoie 1 si la valeur de la colonne A est déjà présente dans le tableau B, 0 sinon. On voit bien ici que ce qui va nous intéresser c’est de chercher le premier 0… Pour générer ce tableau, on utilise la formule:
=NB.SI($B$1:B8;$A$2:$A$27)
Seulement attention si vous voulez reproduire ce calcul intermédiaire chez vous, comme la formule renvoie un tableau de valeurs et non pas une valeur, on appelle ça une formule matricielle. Il faut donc sélectionner toute la plage ou vous voulez afficher le tableau (ici D2:D27), entrer la formule, puis la valider en appuyer sur CTRL + MAJ + ENTREE
Seul le calcul intermédiaire est matriciel, on retraite ensuite ce résultat matriciel avec une fonction INDEX pour retourner une seule valeur et retomber sur une formule classique.
Maintenant que l’on sait isoler ou est la prochaine valeur unique à afficher, il ne nous reste plus que 3 choses à faire.
- Trouver le numéro de case du premier 0 dans la colonne D (dans notre exemple c’est 8), avec la fonction EQUIV
- Aller chercher la 8e valeur de la colonne A grâce à la fonction INDEX
- Mettre un joli format au cas ou la formule renvoie une erreur avec la fonction SIERREUR (on renverra alors une cellule vide)
Je ne vous fais pas mariner plus longtemps que ça, la formule est :
=SIERREUR(INDEX($A$2:$A$27;EQUIV(0;INDEX(NB.SI($B$1:B1;$A$2:$A$27);0;0);0)); » »)
Combiner plusieurs listes en une seule liste de valeurs uniques
Comment faire dans le cas ou l’on travaille avec plusieurs listes? Dans ce cas nous allons décomposer le travail en 2 étapes:
- Chercher la prochaine valeur unique dans la liste A (nous utilisons la même formule que précédemment)
- S’il n’y a plus de nouvelle valeur unique dans A (la formule retourne une erreur, détectée avec SIERREUR), chercher une valeur unique dans B
La formule à utiliser est donc:
=SIERREUR(SIERREUR(INDEX($A$2:$A$13; EQUIV(0;INDEX(NB.SI($C$1:C15;$A$2:$A$13);0;0);0)); INDEX($B$2:$B$14;EQUIV(0; INDEX(NB.SI($C$1:C15;$B$2:$B$14);0;0);0))); « »)
La formule commence à être longue, il peut être intéressant dans ce cas de nommer vos plages afin d’améliorer la lisibilité de la formule.