Vous êtes sur la page 1sur 22

La gestion des doublons dans Excel

par SilkyRoad

Date de publication : 5 aot 2007

Cet article montre comment identifier et manipuler les doublons dans les feuilles de calcul Excel. Les exemples ont t tests avec Excel2002 et Excel2007.

La gestion des doublons dans Excel par SilkyRoad

I - Introduction..............................................................................................................................................................3 II - Les outils Excel......................................................................................................................................................4 II-A - Le menu Validation: empcher la saisie de doublons dans une plage de cellules....................................... 4 II-B - La mise en forme conditionnelle: Visualiser les doublons............................................................................4 II-B-1 - Identifier les doublons dans une colonne............................................................................................ 4 II-B-2 - Identifier les doublons sur plusieurs colonnes..................................................................................... 4 II-B-3 - La mise en forme conditionnelle dans Excel 2007.............................................................................. 5 II-C - Le filtre labor.............................................................................................................................................5 II-D - Le menu 'Supprimer les doublons' Excel 2007............................................................................................ 6 III - Les formules..........................................................................................................................................................7 III-A - Les fonctions statistiques.............................................................................................................................7 III-A-1 - Compter le nombre de valeurs identiques.......................................................................................... 7 III-A-2 - Compter le nombre de donnes diffrentes........................................................................................7 III-A-3 - Compter le nombre de doublons dans une plage...............................................................................8 III-A-4 - Trouver la donne qui apparat le plus souvent..................................................................................8 III-A-5 - Compter le nombre de cellules contenant une donne spcifique..................................................... 8 III-A-6 - Compter les chanes de caractres.................................................................................................... 9 III-B - Les fonctions de recherche......................................................................................................................... 9 III-B-1 - Retrouver les donnes uniques et les doublons.................................................................................9 III-B-2 - Trouver les communs entre deux plages..........................................................................................10 III-B-3 - Extraire les donnes d'une plage sans les doublons........................................................................10 III-B-4 - Gnrer une srie de nombres entiers alatoires sans doublon...................................................... 10 III-C - Les fonctions logiques............................................................................................................................... 11 III-D - Alimenter des listes de validation sans doublon....................................................................................... 11 IV - Les macros......................................................................................................................................................... 12 IV-A - Crer une liste sans doublons.................................................................................................................. 12 IV-B - Quelques informations sur l'objet Collection............................................................................................. 12 IV-C - Empcher la saisie de doublons dans une plage de cellules................................................................... 13 IV-D - Compter le nombre de doublons dans une plage.....................................................................................14 IV-E - Compter le nombre de donnes communes entre deux plages............................................................... 15 IV-F - Marquer ou supprimer les doublons..........................................................................................................16 IV-G - Alimenter un contrle ComboBox sans doublon.......................................................................................19 IV-H - Gnrer une srie de nombres entiers alatoires sans doublon.............................................................. 19 V - Liens.....................................................................................................................................................................21 VI - Tlchargement.................................................................................................................................................. 22

-2Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

I - Introduction
Comment grer les doublons? Cette question est rcurrente lorsque l'on souhaite traiter et analyser des donnes, que ce soit pour les compter, les filtrer, les regrouper ou les supprimer. Ce tutoriel prsente quelques solutions disponibles dans l'application Excel: * Les fonctions intgres. * Les formules. * Les macros. Plusieurs exemples sont transposables dans diffrents chapitres et vous pourrez aisment les adapter vos projets.

-3Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

II - Les outils Excel II-A - Le menu Validation: empcher la saisie de doublons dans une plage de cellules
Vous pouvez utiliser les options du menu Validation pour empcher la saisie de doublons dans une plage de cellules: Par exemple dans Excel2002: Slectionnez la plage de cellules A1:A10. Utilisez le menu Donnes Option Validation Onglet Options Slectionnez l'option Personnalis dans la liste de choix. Saisissez dans le champ Formule: =NB.SI($A$1:$A$10;A1)<2 Cliquez sur le bouton OK pour valider. Dsormais un message d'alerte s'affichera lorsque deux donnes identiques seront saisies dans la plage A1:A10.

Dans Excel2007, le menu validation est accessible dans l'onglet Donnes, groupe Outils de donnes. La procdure de paramtrage reste identique.

II-B - La mise en forme conditionnelle: Visualiser les doublons


La mise en forme conditionnelle est un outil pratique pour visualiser rapidement les donnes qui apparaissent plusieurs fois dans une plage de cellules. Dans Excel 2002, la mise en forme conditionnelle est accessible par le menu Format/Mise en forme conditionnelle. Dans Excel 2007, la mise en forme conditionnelle est accessible dans l'onglet Accueil, groupe Style. Les critres de mise en forme peuvent tre dfinis par des formules qui vrifieront si des donnes sont similaires dans la plage de cellules. Les fonctions utilises doivent tre de type logique et renvoyer un rsultat Vrai ou Faux.

II-B-1 - Identifier les doublons dans une colonne


Cet exemple identifie toutes les donnes qui sont identiques dans la colonne A. Slectionnez la colonne A. Choisissez l'option "La formule est:" dans la bote de dialogue de mise en forme conditionnelle et saisissez la formule: Formule
=NB.SI(A:A;A1)>1

Ensuite, cliquez sur le bouton "Format" pour dfinir la mise en forme. Pour cibler uniquement les doublons, slectionnez la colonne partir de la cellule A2 puis utilisez la formule: Formule
=SOMMEPROD(($A$1:$A1=$A2)*($A2<>""))

II-B-2 - Identifier les doublons sur plusieurs colonnes


Vous disposez par exemple une table d'enregistrements sur deux colonnes (A et B), la premire colonne contient des noms et la seconde contient des prnoms.

-4Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Vous pouvez reprer qu'un couple Nom/Prnom se retrouve sur plusieurs lignes en appliquant une formule de mise en forme conditionnelle. Slectionnez la plage tester (A2:B6 dans la capture d'cran ci-dessous), puis appliquez le critre conditionnel: Formule
=SOMMEPROD(($A$1:$A1=$A2)*($B$1:$B1=$B2)*($A2<>""))

La ligne 5 est identifie comme doublon car des donnes identiques existent dj dans la ligne 2.

II-B-3 - La mise en forme conditionnelle dans Excel 2007


Excel2007 dispose d'une option spcifique de mise en forme conditionnelle permettant de visualiser rapidement les doublons. Slectionnez la plage de cellules tester. Cliquez sur l'onglet Accueil Groupe Style Bouton Mise en forme conditionnelle Option Rgles de mise en surbrillance des cellules Slectionnez Valeurs en double Dans la bote de dialogue, vous pouvez choisir de mettre en forme les cellules en double ou les donnes uniques. Paramtrez la mise en forme associe la condition. Cliquez sur le bouton OK pour valider.

Tout comme dans les versions antrieures d'Excel, vous pouvez aussi toujours utiliser des formules logiques afin d'identifier des doublons: Slectionnez la ou les cellules. Cliquez sur l'option Nouvelle rgle dans le menu du bouton Mise en forme conditionnelle. Slectionnez Utiliser une formule ... dans le champ Type de rgle. Saisissez votre formule. Choisissez le format de mise en forme (bouton Format). Cliquez sur le bouton OK pour valider.

II-C - Le filtre labor


Le filtre labor dispose d'une option pour filtrer une colonne, ou les lignes d'un tableau, afin d'obtenir une liste de donnes uniques sans doublons: * Utilisez le menu Donnes * Filtrer
-5Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

* Filtre labor

Spcifiez la plage filtrer. Cochez l'option "Extraction sans doublons" pour liminer les lignes en double. Vous avez la possibilit de filtrer directement dans la plage initiale ou vers un autre emplacement dans la feuille active. Nota: Dans Excel 2007, le menu "filtre labor" est renomm "filtre avanc" et se trouve dans l'onglet Donnes, groupe Trier et filtrer, bouton Avanc.

II-D - Le menu 'Supprimer les doublons' Excel 2007


L'application Excel 2007 possde une nouvelle transaction pour supprimer les doublons d'une plage de cellules. La fonction est accessible depuis l'onglet Donnes.

Slectionnez la plage de cellules et cliquez sur le bouton Supprimer les doublons.

La bote de dialogue permet de spcifier les paramtres pour la suppression des doublons:

* Prcisez si la premire ligne est un en-tte (Celle-ci ne sera pas prise en compte pour la suppression). * Par dfaut, toutes les colonnes de la plage sont coches. Cela signifie que la recherche de doublon est effectue sur des lignes compltes. Vous pouvez dcocher certains champs afin d'effectuer la requte sur une ou quelques colonnes spcifiques du tableau. Par exemple dans le tableau prsent ci dessus, si les 3 colonnes sont coches, la fonction va supprimer la ligne 6. Si seule la colonne "Champ1" est coche, la fonction va supprimer les lignes 4 et 6.

-6Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

III - Les formules


Les exemples sont tlchargeables en bas de cette page.

III-A - Les fonctions statistiques III-A-1 - Compter le nombre de valeurs identiques


Pour compter le nombre de donnes (alpha ou numriques) identiques entre deux plages A1:A10 et B1:B10, utilisez: Formule
=SOMMEPROD(NB.SI(A1:A10;B1:B10))

Si les cellules ne contiennent que des valeurs numriques, la fonction suivante permet de compter le nombre de valeurs identiques (uniques) entre deux plages: Formule
=SOMMEPROD((FREQUENCE(A1:A10;B1:B10)>0)*1)-1

III-A-2 - Compter le nombre de donnes diffrentes


Pour compter le nombre de donnes diffrentes dans la plage A1:A10, utilisez: Formule
=SOMMEPROD(1/NB.SI(A1:A10;A1:A10))

Un autre exemple par formule matricielle ( valider en appuyant simultanment sur les touches Ctrl + Maj + Entre). Formule
=SOMME(SI(FREQUENCE(EQUIV(A1:A10;A1:A10;0);EQUIV(A1:A10;A1:A10;0))>0;1))

Une autres solution, dans le cas o il y aurait des cellules vides dans la plage (A valider par Ctrl + Maj + Entre): Formule
=SOMMEPROD(SI(A1:A10<>"";1/NB.SI(A1:A10;A1:A10)))

Les fonctions suivantes comptent le nombre de valeurs numriques diffrentes dans la plage A1:A10. Remarque: La plage A1:A10 peut contenir du texte et des cellules vides. Formule
=SOMME(SI(FREQUENCE(A1:A10;A1:A10)>0;1))

Formule
=SOMME(N(FREQUENCE(A1:A10;A1:A10)>0))

Une autre possibilit par formule matricielle ( valider en appuyant simultanment sur les touches Ctrl + Maj + Entre).

-7Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Formule
=SOMME(SI(ESTNUM(A1:A10);1/NB.SI(A1:A10;A1:A10)))

Un autre exemple qui ne prend pas en compte les 0 (Formule matricielle valider par Ctrl + Maj + Entre). Formule
=SOMME(SI(A1:A10>0;1/NB.SI(A1:A10;A1:A10)))

III-A-3 - Compter le nombre de doublons dans une plage


La fonction suivante compte le nombre de doublons dans la plage A1:A10. Cet exemple n'accepte pas les cellules vides dans la plage contrler. Formule
=NBVAL(A1:A10)-SOMMEPROD(1/NB.SI(A1:A10;A1:A10))

Si la plage contient des cellules vides, utilisez: Formule


=NBVAL(A1:A10)-SOMMEPROD(SI(A1:A10<>"";1/NB.SI(A1:A10;A1:A10)))

Formule matricielle valider par Ctrl + Maj + Entre.

III-A-4 - Trouver la donne qui apparat le plus souvent


La fonction MODE permet de trouver la valeur numrique qui apparait le plus souvent dans une plage de cellules: Formule
=MODE(A1:A10)

Une autre version qui affiche la valeur qui apparat le plus souvent et au moins 5 fois dans la plage A1:A10: Formule
=SI(NB.SI(A1:A10;MODE(A1:A10))>4;MODE(A1:A10);"")

Pour afficher la donne (texte ou numrique) qui apparait le plus souvent dans la plage A1:A10, utilisez: (Formule matricielle valider par Ctrl + Maj + Entre). Formule
=INDEX(A1:A10;EQUIV(MAX(NB.SI(A1:A10;A1:A10));NB.SI(A1:A10;A1:A10);0))

III-A-5 - Compter le nombre de cellules contenant une donne spcifique


La fonction NB.SI permet de compter le nombre de cellules rpondant au critre dfini. (La valeur "dvp" dans la colonne A, pour l'exemple ci dessous):

-8Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Formule
=NB.SI(A:A;"dvp")

Vous pouvez aussi compter le nombre de cellules qui contient le texte DVP, uniquement quand saisi en majuscules: Formule
=SOMMEPROD((EXACT(A1:A10;"DVP")*1))

III-A-6 - Compter les chanes de caractres


Si vous avez besoin de compter le nombre de fois qu'apparait une chane de caractres dans une autre chane, utilisez les fonctions suivantes. Cet exemple compte le nombre de "a" dans la cellule A1: Formule
=NBCAR(A1)-NBCAR(SUBSTITUE(A1;"a";""))

Un autre exemple qui compte le nombre de chane "mimi" dans la cellule A1: Formule
=(NBCAR(A1)-NBCAR(SUBSTITUE(A1;"mimi";"")))/4

III-B - Les fonctions de recherche III-B-1 - Retrouver les donnes uniques et les doublons
Il est possible d'identifier facilement les donnes uniques et les doublons dans une plage de cellules. Si par exemple les lments contrler sont dans la plage A1:A20, saisissez la formule ci-dessous dans la cellule B1: Formule
=SI(NB.SI($A$1:$A$20;A1)>1;"Multiple";"Unique")

Puis, utilisez les poignes de recopie jusqu'en B20. Si vous souhaitez identifier les doublons sur plusieurs colonnes, utilisez la fonction SOMMEPROD: Vous avez par exemple des enregistrements sur deux colonnes (A et B), la premire colonne contient des noms et la seconde contient des prnoms. Vous pouvez reprer qu'un couple Nom/Prnom se retrouve sur plusieurs lignes en appliquant la fonction suivante dans la colonne C. Formule
=SI(SOMMEPROD(($A$1:$A1=$A2)*($B$1:$B1=$B2)*($A2<>"") )=0;"Unique";"Doublon")

Saisissez la formule en C2, puis utilisez les poignes de recopie vers le bas.

-9Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

La ligne 5 est identifie comme doublon car des donnes identiques existent dj dans la ligne 2. Nota: Vous remarquerez que cette dernire formule est identique au chapitre II-B-2, ceci pour montrer que les diffrents exemples prsents dans cette page peuvent tre transposs en fonction de la mthode que vous allez mettre en oeuvre.

III-B-2 - Trouver les communs entre deux plages


Pour retrouver les donnes de la plage A1:A10 qui sont aussi dans la plage B1:B10, saisissez la formule suivante en C1 par exemple, puis tirez la vers le bas. Formule
=SI(NB.SI($B$1:$B$10;A1)>0;A1;"")

III-B-3 - Extraire les donnes d'une plage sans les doublons


Si votre liste initiale se trouve dans la colonne A, saisissez en B2 cette formule matricielle ( valider par Ctrl+Maj+Entre) Formule
=(INDEX($A:$A;MIN(SI(NB.SI(B$1:B1;$A$1:$A$100)=0;LIGNE($A$1:$A$100))))&"")

Puis utilisez les poignes de recopie vers le bas. Vous obtenez, dans la colonne B, la liste des lments sans doublons. Si vous souhaitez ensuite compter le nombre de fois qu'apparait chaque lment dans la colonne A, saisissez la formule suivante dans la cellule C2, puis tirez la vers le bas. Formule
=SI(B2<>"";NB.SI(A:A;B2);"")

Nota: Il ne doit pas y avoir de cellules vides entre les diffrentes donnes de la colonne A.

III-B-4 - Gnrer une srie de nombres entiers alatoires sans doublon


Le mode opratoire suivant cre une srie de nombres, de 1 25, de faon alatoire et sans doublon. Insrez la formule = Alea() dans la cellule A1, puis utilisez les poignes de recopie jusqu'en A25. Saisissez les nombres 1 25 par ordre croissant dans la plage B1:B25 Dans la cellule C1, saisissez:

- 10 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Formule
=RECHERCHEV(PETITE.VALEUR($A$1:$A$25;LIGNE());$A$1:$B$25;2;0)

Puis utilisez les poignes de recopie jusqu'en C25. Utilisez la touche clavier F9 pour lancer un nouveau tirage.

III-C - Les fonctions logiques


Cet exemple vrifie si 2 plages de cellules (A1:A10 et B1:B10) sont identiques. La formule renvoie VRAI si les donnes des 2 plages sont identiques, et FAUX dans le cas contraire. Formule
=ET(A1:A10=B1:B10)

III-D - Alimenter des listes de validation sans doublon


Tlchargez le classeur dmo.

- 11 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

IV - Les macros IV-A - Crer une liste sans doublons


Ce premier code montre comment boucler sur une plage de cellules (A1:A20) et obtenir une liste d'lments sans doublons. Vba
Option Explicit Sub Test() Creer_Liste_SansDoublons Range("A1:A20") End Sub

Sub Creer_Liste_SansDoublons(Plage As Range) Dim Cell As Range Dim Un As Collection Dim i As Long Set Un = New Collection On Error Resume Next 'Boucle sur la plage de cellule For Each Cell In Plage 'If Cell <> "" Permet de ne pas prendre en compte les cellules vides 'Un.Add Cell, CStr(Cell) Ajoute le contenu de la cellule dans la collection If Cell <> "" Then Un.Add Cell, CStr(Cell) Next Cell On Error GoTo 0 'Boucle sur les lments de la collection. For i = 1 To Un.Count 'Ecrit le rsultat dans la fentre d'excution (Ctrl+G) Debug.Print Un.Item(i) Next i Set Un = Nothing End Sub

IV-B - Quelques informations sur l'objet Collection


En cherchant des exemples pour grer les doublons, vous avez peut-tre constat que les procdures font parfois appel aux notions de Collection (comme dans le code du chapitre prcdent). Une Collection est constitue par un groupe d'lments, en les considrants comme un seul objet. Cet objet est facile manipuler et trs rapide d'utilisation. L'argument Key (cl) de chaque lment doit obligatoirement tre unique dans la Collection et cette particularit peut tre mise profit afin d'identifier et filtrer les doublons. Une collection peut tre cre partir de l'instruction: Vba
Dim Un As Collection Set Un = New Collection

Une fois l'objet Collection cr, il est possible: * D'ajouter des lments l'aide de la mthode Add. * De supprimer des lments au moyen de la mthode Remove.
- 12 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

* De compter le nombre d'lments au moyen de la proprit Count. La ligne de code ci-dessous montre comment ajouter des lments dans la collection. Vba
Un.Add Cell, CStr(Cell)

Description des arguments pour ajouter un lment dans une collection: object.Add [item], [key], [before], [after] [Item] est l'lment ajout dans la collection. [before] et [after] (Facultatifs et non utiliss ici) indiquent la position au sein de la collection. [Key] est une cl, reprsente par une chane unique, qui permet d'accder chaque lment de la collection. La fonction de conversion Cstr permet de convertir la cl en type de donne String (L'argument Key doit imprativement tre de type String). Une erreur apparait si une cl existe dj dans la collection. C'est justement cette spcificit qui va tre utilise pour identifier rapidement des doublons. Le gestionnaire d'erreur va "forcer" le passage la ligne suivante lorsqu'une erreur survient. Vba
On Error Resume Next ' 'Un.Add Cell, CStr(Cell) ' On Error GoTo 0

Pour lire le contenu de la collection et donc visualiser la liste d'lments uniques, il suffit de boucler sur les lments de la collection: Vba
For i = 1 To Un.Count 'Ecrit le rsultat dans la fentre d'excution (Ctrl+G) Debug.Print Un.Item(i) Next i

Et enfin, n'oubliez pas de vider la variable en fin de procdure. Vba


Set Un = Nothing

IV-C - Empcher la saisie de doublons dans une plage de cellules


Cette macro montre comment identifier et empcher la saisie de deux donnes identiques dans la colonne A. La procdure utilise l'vnement Worksheet_Change qui va tre dclench chaque modification dans la feuille de calcul. Si une donne similaire existe dj dans la colonne, un message d'alerte s'affiche et la saisie va tre annule. Vba
Option Explicit Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim Colonne As Integer Dim Adresse As String

- 13 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Vba

'On sort si plus d'une cellule a t modifie If Target.Count > 1 Then Exit Sub 'On sort si la cellule modifie est vide If Target.Value = "" Then Exit Sub 'Dfinit la colonne vrifier (1=Colonne A, 2=colonne B ...etc...) Colonne = 1 'Vrifie si c'est la colonne cible a t modifie If Target.Column = Colonne Then

'Recherche si la nouvelle donne existe dj dans la colonne. Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, _ SearchDirection:=xlNext).Address 'Si l'adresse de cellule trouve ne correspond pas la cellule modifie, cela 'signifie qu'il y a un doublon dans la colonne. If Adresse <> Target.Address Then MsgBox "La donne '" & Target & "' existe dj dans la cellule " & Adresse 'Suppression de la donne Target.Value = "" Target.Select End If End If End Sub

IV-D - Compter le nombre de doublons dans une plage


Le code propos dans ce chapitre liste et compte les informations qui se rptent dans une plage de cellules (La plage est limite une colonne). Vba
Option Explicit Option Base 1 Sub listeDoublonsPlage() Dim Plage As Range Dim Tableau(), Resultat() As String Dim i As Integer, j As Integer, m As Integer Dim Un As Collection Dim Doublons As String Set Un = New Collection 'La plage de cellules (sur une colonne) tester Set Plage = Range("A1:A" & Range("A65536").End(xlUp).Row) Tableau = Plage.Value On Error Resume Next 'boucle sur la plage tester For i = 1 To Plage.Count ReDim Preserve Resultat(2, m + 1) 'Utilise une collection pour rechercher les doublons '(les collections n'acceptent que des donnes uniques) Un.Add Tableau(i, 1), CStr(Tableau(i, 1)) 'S'il y a une erreur (donc prsence d'un doublon) - 14 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Vba

If Err <> 0 Then 'boucle sur le tableau des doublons pour vrifier s'il a dj 't identifi For j = 1 To m + 1 'Si oui, on incrmente le compteur If Resultat(1, j) = Tableau(i, 1) Then Resultat(2, j) = Resultat(2, j) + 1 Err.Clear Exit For End If Next j 'Si non, on ajoute le doublon dans le tableau If Err <> 0 Then Resultat(1, m + 1) = Tableau(i, 1) Resultat(2, m + 1) = 1 m = m + 1 Err.Clear End If Next i End If

'----- Affiche la liste et le nombre de doublons -------For j = 1 To m Doublons = Doublons & Resultat(1, j) & " --> " & _ Resultat(2, j) & vbCrLf Next j MsgBox Doublons Set Un = Nothing End Sub

IV-E - Compter le nombre de donnes communes entre deux plages


La procdure recherche et compte les donnes d'une premire plage qui existent aussi dans une deuxime plage. Le tableau de rsultat s'affiche dans la feuille nomme Feuil2. Vba
Option Explicit Sub Test() CommunsPlages_CountIf Range("A6:A25"), Range("B1:B17") End Sub

'La procdure recherche et compte les donnes de Plage_A qui apparaissent 'aussi dans Plage_B Sub CommunsPlages_CountIf(Plage_A As Range, Plage_B As Range) Dim Cell As Range Dim i As Integer, k As Integer Dim Tableau() As Variant 'boucle sur les cellules de la plage Plage_A For Each Cell In Plage_A 'Vrifie si la donne de Plage_A apparait dans Plage_B If Application.CountIf(Plage_B, Cell) > 0 Then 'Redimensionne le tableau de rsultats i = i + 1 - 15 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Vba

ReDim Preserve Tableau(1 To 2, 1 To i) 'Compte le nombre de fois que la donne apparait 'dans Plage_B. k = Application.CountIf(Plage_B, Cell) '--- Remplissage tableau: 'La donne Tableau(1, i) = Cell 'Le nombre de fois que la donne apparait dans Plage_B. Tableau(2, i) = k '----------------------End If Next Cell

'Copie le tableau de rsultats dans la Feuil2 Worksheets("Feuil2").Range("A1:B" & i) = Application.Transpose(Tableau) End Sub

IV-F - Marquer ou supprimer les doublons


Cette premire procdure applique une couleur verte dans les cellules contenant des doublons. Vba
Option Explicit Sub Test() IdentifieDoublons Range("A1:C20") End Sub

Sub IdentifieDoublons(Plage As Range) Dim Cell As Range Dim Un As Collection Set Un = New Collection On Error Resume Next 'Boucle sur la plage de cellule For Each Cell In Plage 'Pour ne pas prendre en compte les cellules vides If Cell <> "" Then 'Ajoute le contenu de la cellule dans la collection Un.Add Cell, CStr(Cell) 'Si la procdure renvoie une erreur, cela signifie que l'lment 'existe dj dans la collection et donc qu'il s'agit d'un doublon. 'Dans ce cas la macro colorie la cellule en vert. If Err <> 0 Then Cell.Interior.ColorIndex = 4 'Efface toutes les valeurs de l'objet Err. Err.Clear End If Next Cell Set Un = Nothing End Sub

La procdure ci-dessous ( partir d'Excel 2007) utilise la mise en forme conditionnelle pour mettre en surbrillance les donnes identiques:

- 16 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Vba
'Excel 2007 With Range("A1:A10") .FormatConditions.AddUniqueValues .FormatConditions(.FormatConditions.Count).SetFirstPriority 'Utilisez xlUnique pour identifier les valeurs uniques .FormatConditions(1).DupeUnique = xlDuplicate .FormatConditions(1).Interior.Color = RGB(255, 0, 0) End With

Dans le chapitre II-C nous avons vu qu'il est possible d'utiliser les options du filtre labor afin de crer une liste sans doublons. L'exemple suivant montre comment raliser la mme opration par macro. Vba
Sub FiltreDoublons() Dim Plage As Range 'Dfinit la plage filtrer (A1 correspond l'entte et 'ne sera pas pris en compte dans le filtre) Set Plage = Range("A1:C10") 'La plage filtre sans doublons va s'afficher 'dans la cellule H1. Plage.AdvancedFilter Action:=xlFilterCopy, _ CopyToRange:=Range("H1"), Unique:=True End Sub

Lorsque vous souhaitez liminer les doublons dans une colonne, une solution consiste trier les donnes de cette colonne puis de supprimer les lments identiques qui se suivent: Vba
Option Explicit Sub Test() 'Supprime les doublons dans la colonne B SuppressionDoublonColonne 2 End Sub

Sub SuppressionDoublonColonne(NumCol As Integer) Dim Cible As Range, Suivant As Range Application.ScreenUpdating = False With Columns(NumCol) .Cells(1, 1).Sort Key1:=.Cells(1, 1), Order1:=xlAscending Set Cible = .Cells(1, 1) Do Set Suivant = Cible.Offset(1, 0)

If Suivant = Cible Then Cible.Delete xlUp Set Cible = Suivant Loop Until Cible = "" End With Application.ScreenUpdating = True End Sub

Vous pouvez aussi supprimer les doublons sans trier les colonnes. Voici un code qui boucle sur la plage A1:A10 et enregistre dans un tableau les numros de lignes si les cellules contiennent des doublons.
- 17 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

La macro enregistre dans le tableau les numros de lignes, mais vous pouvez bien entendu l'adapter votre projet et le remplacer par la mise en mmoire des adresses de cellules, le contenu des cellules ... etc ... La procdure utilise ensuite les lments du tableau pour supprimer les lignes compltes dans la feuille de calcul. Vous remarquerez que dans cet exemple les enregistrements sont supprims partir de la dernire ligne, en remontant vers la premire ligne. Cette mthode simplifie la rdaction des macros sinon vous seriez obligs d'intgrer le dcalage des lignes chaque suppression. Vba
Option Explicit Option Base 1 Sub Dim Dim Dim Dim SupprimeDoublons() Plage As Range, Cell As Range Un As Collection Tableau() As Long x As Integer

Set Un = New Collection Set Plage = Worksheets("Feuil1").Range("A1:A10") For Each Cell In Plage On Error Resume Next 'Alimente la collection de donnes sans doublons. Un.Add Cell, CStr(Cell) 'Une erreur survient si l'lment existe dans la collection. 'La procdure enregistre le numro de ligne correspondant dans un tableau. If Err.Number <> 0 Then x = x + 1 ReDim Preserve Tableau(x) Tableau(x) = Cell.Row End If Next Cell 'On sort de la procdure s'il n'y a pas de doublons. If x = 0 Then Exit Sub 'Permet de figer l'cran pendant la suppression des lignes. Application.ScreenUpdating = False 'boucle sur le tableau pour supprimer les lignes contenant les doublons. For x = UBound(Tableau) To LBound(Tableau) Step -1 Worksheets("Feuil1").Rows(Tableau(x)).EntireRow.Delete Next x Application.ScreenUpdating = True MsgBox "Termin." Set Un = Nothing End Sub

Si vous disposez d'Excel 2007, utilisez directement la mthode RemoveDuplicates pour liminer les valeurs en double dans une plage de cellules: Vba
Sub SuppressionDoublons_Excel2007() 'Header:=xlYes 'permet de spcifier que la 1ere ligne correspond un entte 'Columns:=Array(1, 3) 'Dfinit la ou les colonnes prendre en compte pour identifier les doublons

- 18 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Vba

'Supprime les donnes dans la plage A1:C10 si les enregistrements des colonnes A et C 'forment un doublon. Worksheets("Feuil1").Range("A1:C10").RemoveDuplicates _ Columns:=Array(1, 3), Header:=xlYes End Sub

IV-G - Alimenter un contrle ComboBox sans doublon


Les contrles ComboBox, dans les UserForm ou placs dans la feuille de calcul, ncessitent souvent d'tre aliments sans doublon. Ce chapitre montre comment alimenter ce type d'objet en supprimant les lments similaires. Nota: la proprit Style du ComboBox doit avoir la valeur 0 (fmStyleDropDownCombo) pour que la saisie de donnes soit autorise dans la zone d'dition. Vba
Private Sub UserForm_Initialize() Dim i As Integer 'Boucle sur les cellule de la colonne A For i = 1 To Range("A65536").End(xlUp).Row 'Remplit la zone d'dition du ComboBox ComboBox1 = Range("A" & i) 'ComboBox1.ListIndex renvoie -1 si la donne n'existe pas dans 'la liste droulante. Dans ce cas, on va pouvoir utiliser la mthode AddItem 'pour intgrer la donne dans le ComboBox. '(Range("A" & i) <> "" permet simplement de grer les ventuelles cellules vides 'dans la colonne A). If ComboBox1.ListIndex = -1 And Range("A" & i) <> "" Then _ ComboBox1.AddItem Range("A" & i) Next i End Sub

Tlchargez cet autre exemple qui permet d'alimenter une srie de ComboBox en cascade et sans doublon. La procdure alimente chaque Combobox en fonction de la slection prcdente. La slection du ComboBox1 dfinit le contenu du ComboBox2. La slection du ComboBox2 dfinit le contenu du ComboBox3 ...etc... Le classeur dmo.

IV-H - Gnrer une srie de nombres entiers alatoires sans doublon


La procdure suivante cre une srie de nombres, de 1 25, de faon alatoire et sans doublon. Les valeurs sont crites verticalement dans la feuille de calcul, et une option permet d'indiquer partir de quelle cellule vont tre inscrites les donnes (B1 dans cet exemple). Vba
Sub Test() GenereSerieAleatoireSansDoublons 25, Range("B1") End Sub Sub GenereSerieAleatoireSansDoublons(NbValeurs As Integer, Cell As Range) Dim Tableau() As Integer, TabNumLignes() As Integer Dim i As Integer, k As Integer ReDim Tableau(NbValeurs) ReDim TabNumLignes(NbValeurs)

- 19 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

Vba

For i = 1 To NbValeurs TabNumLignes(i) = i Tableau(i) = i Next 'Initialise le gnrateur de nombres alatoires Randomize For i = NbValeurs To 1 Step -1 k = Int((i * Rnd) + 1) Cells(Cell.Row + i - 1, Cell.Column) = Tableau(TabNumLignes(k)) TabNumLignes(k) = TabNumLignes(i) Next

End Sub

Un autre exemple qui inscrit une srie de 20 valeurs alatoires, sans doublons et comprises entre 1 et 150. Vba
Option Explicit Sub Test() 'Inscrit une srie de 20 valeurs alatoires dans la colonne, partir 'de la cellule A1. 'Les valeurs alatoires seront comprises entre 1 et 150. SerieAleatoire Range("A1"), 150, 20 End Sub Sub SerieAleatoire(Cellule As Range, ValMaxi As Integer, NbVal As Integer) Dim i As Integer Randomize Cellule = Int(ValMaxi * Rnd + 1) For i = 1 To NbVal - 1 Do Cellule.Offset(i, 0) = Int(ValMaxi * Rnd + 1) Loop Until Application.IsNA(Application.Match _ (Cellule.Offset(i, 0), Cellule.Resize(i, 1), 0)) Next i End Sub

- 20 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

V - Liens
La mise en forme conditionnelle mDF Doublons

- 21 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.

La gestion des doublons dans Excel par SilkyRoad

VI - Tlchargement
Tlchargez un exemple de classeur qui reprend les formules prsentes dans cette page.

- 22 Les sources prsentes sur cette page sont libres de droits et vous pouvez les utiliser votre convenance. Par contre, la page de prsentation constitue une uvre intellectuelle protge par les droits d'auteur. Copyright 2007 Developpez LLC. Tous droits rservs Developpez LLC. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts. Cette page est dpose la SACD.