J'ai une liste de deux colonnes nom/prénom. Comment repérer les doubons sur les deux colonnes (même nom et même prénom sur une ligne) ?
- Sélectionne la plage, disons A2:B11 (pas les colonnes entières)
- Format/Mise en forme conditionnelle
- Choisir la formule est:
=SOMMEPROD(($A$2:$A$11=$A2)*($B$2:$B$11=$B2))>1
- Format/Mise en forme conditionnelle
- Choisir la formule est:
=SOMMEPROD(($A$2:$A$11=$A2)*($B$2:$B$11=$B2))>1
Jacques Boisgontier,
Ajouté ou modifié le 05/04/2008 (N°2002)
Ajouté ou modifié le 05/04/2008 (N°2002)
Je voudrais en VBA sélectionner une plage de cellules, vérifier si chaque cellule ne trouve pas
son double dans la selection et si oui, lui affecter un format différent.
Une variation sur la particularité des collections de déclencher une erreur
lorsqu'on tente de leur ajouter un membre qui a déjà le même nom de clé. En
prenant comme clé la valeur "texte" des cellules parcourues, une erreur signe
l'apparition d'un doublon. La cellule qui a déclenché l'erreur est coloriée en
vert. A la fin du traitement, les doublons apparaissent en vert et les cellules
doublonnées ou uniques apparaissent en jaune :
Sub DoublonOrNotDoublon()
Dim Collec As New Collection, Cell As Range, Plage As Range
On Error Resume Next
Set Plage = Application.InputBox("Plage à examiner", Type:=8)
If IsEmpty(Plage) Then Exit Sub
For Each Cell In Plage
If Cell.Value <> "" Then
Collec.Add Cell.Value, CStr(Cell.Value)
If Err <> 0 Then
Err.Clear
Cell.Interior.ColorIndex = 43
Else
Cell.Interior.ColorIndex = 6
End If
End If
Next Cell
End Sub
Attention : cette macro te signale la première valeur identifiée comme doublon.
Maintenant s'il y en a plusieurs identiques et que tu veux toutes les marquer :
Utilises plutôt la macro ci dessous. Mais la double boucle peut rendre
l'exécution longuette selon la taille de la plage à examiner et la puissance de
ta machine ...
Sub MarqueLesDoublons()
Dim Plage As Range, i&, Cell As Range, Rng As Range
On Error Resume Next
Set Plage = Application.InputBox("Plage à examiner", Type:=8)
If IsEmpty(Plage) Then Exit Sub
Application.ScreenUpdating = False
For Each Cell In Plage
For i = 1 To Plage.Count
Set Rng = Cell.Offset(i)
If Rng <> "" And Rng = Cell Then
Cell.Interior.ColorIndex = 43
Rng.Interior.ColorIndex = 43
Exit For
End If
Next i
Next Cell
End Sub
lorsqu'on tente de leur ajouter un membre qui a déjà le même nom de clé. En
prenant comme clé la valeur "texte" des cellules parcourues, une erreur signe
l'apparition d'un doublon. La cellule qui a déclenché l'erreur est coloriée en
vert. A la fin du traitement, les doublons apparaissent en vert et les cellules
doublonnées ou uniques apparaissent en jaune :
Sub DoublonOrNotDoublon()
Dim Collec As New Collection, Cell As Range, Plage As Range
On Error Resume Next
Set Plage = Application.InputBox("Plage à examiner", Type:=8)
If IsEmpty(Plage) Then Exit Sub
For Each Cell In Plage
If Cell.Value <> "" Then
Collec.Add Cell.Value, CStr(Cell.Value)
If Err <> 0 Then
Err.Clear
Cell.Interior.ColorIndex = 43
Else
Cell.Interior.ColorIndex = 6
End If
End If
Next Cell
End Sub
Attention : cette macro te signale la première valeur identifiée comme doublon.
Maintenant s'il y en a plusieurs identiques et que tu veux toutes les marquer :
Utilises plutôt la macro ci dessous. Mais la double boucle peut rendre
l'exécution longuette selon la taille de la plage à examiner et la puissance de
ta machine ...
Sub MarqueLesDoublons()
Dim Plage As Range, i&, Cell As Range, Rng As Range
On Error Resume Next
Set Plage = Application.InputBox("Plage à examiner", Type:=8)
If IsEmpty(Plage) Then Exit Sub
Application.ScreenUpdating = False
For Each Cell In Plage
For i = 1 To Plage.Count
Set Rng = Cell.Offset(i)
If Rng <> "" And Rng = Cell Then
Cell.Interior.ColorIndex = 43
Rng.Interior.ColorIndex = 43
Exit For
End If
Next i
Next Cell
End Sub
Frédéric Sigonneau, (N°486)
Je voudrais pouvoir compter le nombre de données de la colonne B qui sont également dans la
colonne A.
Une formule matricielle permet de répondre à cette question :
{=SOMME(NB.SI(A1:A5;B1:B5))}
Attention! Les accolades ne doivent pas être saisies. La formule :
=SOMME(NB.SI(A1:A5;B1:B5))
doit être saisie telle quelle et validée avec Ctrl+Shift+Enter. Les
accolades sont ajoutées automatiquement par Excel.
Pierre fauconnier
Petite variante :
{=SOMME(1*(Zone1=Zone2))}
ChrisV
Commentaire de AV : sur la formule de Chris :
Avec {=SOMME(1*(A1:A5=B1:B5))} tu fais une comparaison ligne à ligne des 2
plages
Ex. : si on prend les 2 séries de valeurs suivantes : de A1 à A5 :1, 2, 3,
4, 5 et de B1 à B5 : 5, 4, 3, 2, 1
Ta formule renvoie 1 (puisque la matrice renvoyée par le A1:A5=B1:B5 est
(FAUX;FAUX;VRAI;FAUX;FAUX)) pour une valeur commune en ligne 3 alors que le
nbre de doublons est bien 5 !
PS : une variante pour le comptage des doublons :
{=NB(EQUIV(A1:A5;B1:B5;0))}
{=SOMME(NB.SI(A1:A5;B1:B5))}
Attention! Les accolades ne doivent pas être saisies. La formule :
=SOMME(NB.SI(A1:A5;B1:B5))
doit être saisie telle quelle et validée avec Ctrl+Shift+Enter. Les
accolades sont ajoutées automatiquement par Excel.
Pierre fauconnier
Petite variante :
{=SOMME(1*(Zone1=Zone2))}
ChrisV
Commentaire de AV : sur la formule de Chris :
Avec {=SOMME(1*(A1:A5=B1:B5))} tu fais une comparaison ligne à ligne des 2
plages
Ex. : si on prend les 2 séries de valeurs suivantes : de A1 à A5 :1, 2, 3,
4, 5 et de B1 à B5 : 5, 4, 3, 2, 1
Ta formule renvoie 1 (puisque la matrice renvoyée par le A1:A5=B1:B5 est
(FAUX;FAUX;VRAI;FAUX;FAUX)) pour une valeur commune en ligne 3 alors que le
nbre de doublons est bien 5 !
PS : une variante pour le comptage des doublons :
{=NB(EQUIV(A1:A5;B1:B5;0))}
ChrisV, Alain Vallon, (N°485)
Comment trouver s'il y a des doublons entre deux plages de données ?
{=SI(MAX(NB.SI(Données;Données))>1;"Y'a des doublons";
"Pas de doublon")}
à saisir sans les { } et valider par Ctrl+Shift+Entrée
ou petite variante...
{=SI(SOMME(NB.SI(Données;Données))>NB(Données);"Doublons";
"Pas de doublon")}
Complément : va voir aussi là : http://www.cpearson.com/excel/duplicat.htm
"Pas de doublon")}
à saisir sans les { } et valider par Ctrl+Shift+Entrée
ou petite variante...
{=SI(SOMME(NB.SI(Données;Données))>NB(Données);"Doublons";
"Pas de doublon")}
Complément : va voir aussi là : http://www.cpearson.com/excel/duplicat.htm
ChrisV, (N°484)
Comment indiquer par une couleur de fond ou autre qu'une donnée est identique à une autre dans
la colonne ?
Sélectionne ta colonne, puis mise en forme conditionnelle, puis tu choisis
"La formule est " et tu tape =A1=B1, puis tu choisis la couleur appropriée.
Il ne faut pas mettre les $ sinon ca ne marchera pas.
"La formule est " et tu tape =A1=B1, puis tu choisis la couleur appropriée.
Il ne faut pas mettre les $ sinon ca ne marchera pas.
Gaétan Mourmant, (N°483)
J'ai deux colonnes, A et B comportant environ 300 cellules chacune mais pas forcément le même nombre. Je souhaiterais marquer en rouge les cellules de la colonne A qui ne sont pas dans la B et en vert celles qui y sont. Certaines données peuvent être répétées. Dans certains cas, ça peut être important de faire la discrimination sur la casse.
Trois solutions qui fonctionnent parfaitement sans discriminer la casse :
########################################
Tu sélectionnes la colonne A
format / mise en forme conditionnelle
condition1, la formule est : =RECHERCHEV(A1;$B:$B;1;0)=A1
format / motif / vert bouteille
puis Ajouter condition 2, la formule est
=ET(A1<>"";ESTNA(RECHERCHEV(A1;$B:$B;1;0)))
format / motif / rouge bordeaux
c'est très zouli !
J@C
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Sélection de col A >> MFC >>
Condition 1 : =SI(NB.SI($b:$b;A1)>=1;SI(NB.SI($B:$B;A1)=0;1;0)) >> rouge
Condition 2 : =SI(NB.SI($B:$B;A1)>1;1;0) >> vert
AV
+++++++++++++++++++++++++++++++++++++++
Pour compléter la collection :
avec la plage nommée data (cellules de la colonne B)
et les données de la première colonne où appliquer la MFC à partir de A1
Condition1, la formule est : =OU(A1=data)
Format, vert
Condition2, la formule est : OU(A1<>data)
Format, rouge
ChrisV
***************************************
Pour respecter la casse des caractères (toujours par MFC) :
Condition1: la formule est : =OU(EXACT(A1;Col2))
Format / Police / gras et vert
Condition2: =OU(A1<>Col2)
Format / Police / gras et rouge
ChrisV (2)
Attention :la MEFC plus simple ci dessous
ne fonctionne pas si dans la colonne A deux valeurs sont identiques
Sélection de la colonne A et Condition 1 > Formule :
=SI(NB.SI($B:$B;A1)=1;1;0) > Rouge
Condition 2 > Formule :
=SI(NB.SI($B:$B;A1)>1;1;0) > Vert
AV (2)
########################################
Tu sélectionnes la colonne A
format / mise en forme conditionnelle
condition1, la formule est : =RECHERCHEV(A1;$B:$B;1;0)=A1
format / motif / vert bouteille
puis Ajouter condition 2, la formule est
=ET(A1<>"";ESTNA(RECHERCHEV(A1;$B:$B;1;0)))
format / motif / rouge bordeaux
c'est très zouli !
J@C
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Sélection de col A >> MFC >>
Condition 1 : =SI(NB.SI($b:$b;A1)>=1;SI(NB.SI($B:$B;A1)=0;1;0)) >> rouge
Condition 2 : =SI(NB.SI($B:$B;A1)>1;1;0) >> vert
AV
+++++++++++++++++++++++++++++++++++++++
Pour compléter la collection :
avec la plage nommée data (cellules de la colonne B)
et les données de la première colonne où appliquer la MFC à partir de A1
Condition1, la formule est : =OU(A1=data)
Format, vert
Condition2, la formule est : OU(A1<>data)
Format, rouge
ChrisV
***************************************
Pour respecter la casse des caractères (toujours par MFC) :
Condition1: la formule est : =OU(EXACT(A1;Col2))
Format / Police / gras et vert
Condition2: =OU(A1<>Col2)
Format / Police / gras et rouge
ChrisV (2)
Attention :la MEFC plus simple ci dessous
ne fonctionne pas si dans la colonne A deux valeurs sont identiques
Sélection de la colonne A et Condition 1 > Formule :
=SI(NB.SI($B:$B;A1)=1;1;0) > Rouge
Condition 2 > Formule :
=SI(NB.SI($B:$B;A1)>1;1;0) > Vert
AV (2)
Alain Vallon, Jacques Chaussard, ChrisV, (N°482)