Détecter doublons et colorer la ligne

gimli

XLDnaute Occasionnel
Bonjour à tous,

je joint un classeur exemple pour illustrer mon problème de doublons.
Dans l'exemple j'ai 3 colonnes et je dois trouver les doublons présents sur la deuxième colonne (la B). J'ai un début de macro que j'avai trouvé sur ce forum, mais j'ai dû mal l'appliquer car elle me renvoi un msgbox vide alors qu'il y a bel et bien des doublons :(
Dans un deuxième temps (après le repérage) j'aimerai si c'est possible , colorer les lignes ou il y a des doublons.

Merci d'avance

Bon après-midi :)

Gimli
 

Pièces jointes

  • Classeurexemple.xls
    28.5 KB · Affichages: 260
  • Classeurexemple.xls
    28.5 KB · Affichages: 260
  • Classeurexemple.xls
    28.5 KB · Affichages: 277

job75

XLDnaute Barbatruc
Re : Détecter doublons et colorer la ligne

Bonjour gimli,

Cela m'étonne de vous gimli...

La macro corrigée (mais pas optimisée) :

Code:
Private Sub VerifierDoublons_Click()
Application.DisplayAlerts = False

            With ThisWorkbook.Sheets(1)
                For n = 2 To [COLOR="Red"]Range("B19541").End(xlUp).Row[/COLOR] 'curieux... j'aurais mis 65536...

                     If Application.WorksheetFunction.SumIf(.Range("B2:B" & n - 1), .Range("B" & n)) > 0 Then
                         List = List & "Doublon ligne " & n & Chr(13)
                     End If

                Next n

            End With
            MsgBox (List) 'boîte de dialogue listant tous les doublons présents dans la feuille 1
            
                Application.DisplayAlerts = True

          
End Sub

Pour repérer les doublons, MFC en colonne B avec la formule sur B1 :

=NB.SI(B:B;$B1)>1

A+
 

gimli

XLDnaute Occasionnel
Re : Détecter doublons et colorer la ligne

Bonjour job75 ,

Range("B19541").End(xlUp).Row

euuh que dire...erreur d'étourderie ? Non parce que là, bon ok je suis loin d'être bon sur excel mais je connais quand même le nombre max de lignes (65536) ^^ donc oui je valide c'est une erreur d'étourderie :D

Je n'ai encore jamais fais de MFC :eek:
Si cela est possible je préfèrerai faire par macro, mais bon je vais quand même regarder ce que ça donne avec ta formule job75 :)
merci

Gimli
 

commandant

XLDnaute Junior
Re : Détecter doublons et colorer la ligne

Le plus simple est probablement d'utiliser les mises en formes conditionelles.

Place toi sur ta cellule B2, puis Format/Mise en forme conditonnelles. Une pop-up va s'ouvrir.
Dans la liste déroulante sous Condition1 tu choisis "la formule est:", tu remplis ensuite dans la formule:
Code:
=SI(SOMME.SI(B$1:B1;B2)<>0;VRAI;FAUX)

Tu clique ensuite sur le bouton "Format", tu choisis par exemple un fond rouge dans l'onglet motif.

Tu copie ensuite le format de ta cellule sur toute la colonne (avec le pinceau).

Et voila, plus besoin de macros pour faire ce qui existe déja dans Excel
 

job75

XLDnaute Barbatruc
Re : Détecter doublons et colorer la ligne

Re,

La macro un peu plus propre :

Code:
Private Sub VerifierDoublons_Click()
Dim n As Integer
With ThisWorkbook.Sheets(1)
  For n = 2 To Range("B65536").End(xlUp).Row
    If [COLOR="Red"]Application.CountIf[/COLOR](.Range("B:B"), .Range("B" & n)) > 1 Then
      List = List & "Doublon ligne " & n & Chr(13)
    End If
  Next
End With
MsgBox (List) 'boîte de dialogue listant tous les doublons présents dans la feuille 1
End Sub

A+
 

gimli

XLDnaute Occasionnel
Re : Détecter doublons et colorer la ligne

bonjour Commandant, re job

merci pour vos propositions, mais c'est la macro de job75 qui me plait le plus.
Par contre job75, la macro est très bien mais est ce que c'est possible de mettre sur la même ligne (genre séparé par une virgule) les doublons ?
Je m'explique, si j'ai une liste comme ça :

1) 123
2) 256
3) 897
4) 123
5) 897
6) 745
7) 123
8) 256
si j'ai cette liste je pourrai avoir un msgbox qui affiche :
"Doublon ligne 1,4,7
Doublon ligne 3,5
Doublon ligne 2,8
"

Penses-tu que cela soit faisable ?

Je te suis déja très reconnaissant pour ton aide,

merci encore

Gimli
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Détecter doublons et colorer la ligne

Re,

L'artillerie lourde avec un tableau auxiliaire de repérage :

Code:
Private Sub VerifierDoublons_Click()
Dim tablo(), ub As Integer, i As Integer, txt As String, j As Integer, List As String
ReDim tablo(1 To Range("B65536").End(xlUp).Row) 'tableau auxiliaire pour le repérage
ub = UBound(tablo)
For i = 2 To ub
  If tablo(i) = "" And Application.CountIf(Range("B:B"), Cells(i, 2)) > 1 Then
     txt = "Doublon ligne "
     For j = i To ub
       If Cells(i, 2) = Cells(j, 2) Then
         txt = txt & IIf(txt = "Doublon ligne ", "", ", ") & j
         tablo(j) = "x" 'pour le repérage
       End If
      Next
    List = List & txt & Chr(13)
  End If
Next
MsgBox List 'boîte de dialogue listant tous les doublons présents dans la feuille 1
End Sub

A+
 

Pièces jointes

  • Classeurexemple(1).xls
    39 KB · Affichages: 407

Discussions similaires

Statistiques des forums

Discussions
312 088
Messages
2 085 201
Membres
102 816
dernier inscrit
bolivier