VBA pour détecter les doublons d'une colonne

pepsi

XLDnaute Occasionnel
Bonjour le forum :)

j'ai récupéré un code qui permet de détecter les doublons d'une colonne
le problème c'est qu 'il considère le 0 comme un doublon, et j'aimerai éviter cela

comment puis je modifie le code?

merci d'avance
Code:
Sub Doublon()
 
    Dim Plage As Range
    Dim Cel As Range
 
    With Worksheets("Feuil1")
 
    'en colonne "A" à partir de A2
       Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
 
    End With
 
 
    'boucle la plage de la feuille "Compte" et cherche chaque valeur
   'en correspondance exacte dans la plage de la feuille "Source"
   For Each Cel In Plage
 
        If Application.CountIf(Plage, Cel.Value) > 1 Then
 
            MsgBox "Attention, la valeur '" & Cel.Value & "' est en doublon," _
                   & " veuillez éliminer manuellement le double situé en '" & Cel.Address(0, 0) _
                   & "' avant de pouvoir exporter les données !"
 
            Cel.Interior.ColorIndex = 3
 
        End If
 
    Next Cel
 
End Sub
 

CPk

XLDnaute Impliqué
Re : VBA pour détecter les doublons d'une colonne

Bonjour, eh bien après For Each Cel In Plage
Rajouter une condition, exemple : if not Cel.value = 0 then

Qui veut dire littéralement, si ma cellule n'est pas égale à zéro.

Non ?
 

thebenoit59

XLDnaute Accro
Re : VBA pour détecter les doublons d'une colonne

En gardant ta procédure tu peux faire :
Code:
 If Cel.Value <> 0 Then
If Application.CountIf ...
End If
End If
Mais tu devrais regarder du côté du dictionary qui sera sans aucun doute plus rapide pour sortir les doublons.

Edit: Bonjour Cpk.
 

CISCO

XLDnaute Barbatruc
Re : VBA pour détecter les doublons d'une colonne

Bonjour

Tu dois pouvoir faire avec un truc du style

For Each Cel In Plage
If cel.Value <> 0 then
If Application.CountIf(Plage, Cel.Value) > 1 Then
.......
End If
End If
Next cel
End Sub

@ plus
 

pepsi

XLDnaute Occasionnel
Re : VBA pour détecter les doublons d'une colonne

C'est vrai que la procédure peut s'avérer longue.

en fait l'idéal serait un code, qui dès que je tape une valeur en doublon, la valeur s'affiche en rouge pour signaler le doublon

mais je n'arrive pas à trouver une écriture
 

thebenoit59

XLDnaute Accro
Re : VBA pour détecter les doublons d'une colonne

Pour vérifier les doublons en colonne A avec une MsgBox qui affiche la liste et les adresse.
Code:
Sub Doublon()
    Dim Plage As Range
    Dim Cel As Variant
 
Set Plage = Worksheets("Feuil1").Range("a2:a" & [a65000].End(xlUp).Row)
Set d = CreateObject("Scripting.Dictionary"): Set d2 = CreateObject("Scripting.Dictionary")

   For Each Cel In Plage
        If Cel.Value <> 0 And d.exists(Cel.Value) Then
            Cel.Interior.ColorIndex = 3: d2(Cel.Address) = Cel.Value
                Else: d(Cel.Value) = ""
        End If
    Next Cel
    
    For Each Cel In d2.Keys
        m = m & Chr(10) & d2(Cel) & " en " & Cel
    Next Cel
    
MsgBox "Les valeurs suivantes sont en doublons, les supprimer manuellement" & m, vbCritical
End Sub
 

thebenoit59

XLDnaute Accro
Re : VBA pour détecter les doublons d'une colonne

Il doit y avoir plus simple que le code ci-après, mais c'est une idée.

Code:
Public a
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Columns(1)) Is Nothing Then
Set d = CreateObject("Scripting.Dictionary")
        For Each c In a: d(c) = "": Next c
            If d.exists(Target.Value) Then MsgBox "La valeur existe déjà", 16
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Columns(1)) Is Nothing Then
a = Worksheets("Feuil1").Range("a2:a" & [a65000].End(xlUp).Row).Value
End If
End Sub
 

pepsi

XLDnaute Occasionnel
Re : VBA pour détecter les doublons d'une colonne

Pour vérifier les doublons en colonne A avec une MsgBox qui affiche la liste et les adresse.
Code:
Sub Doublon()
    Dim Plage As Range
    Dim Cel As Variant
 
Set Plage = Worksheets("Feuil1").Range("a2:a" & [a65000].End(xlUp).Row)
Set d = CreateObject("Scripting.Dictionary"): Set d2 = CreateObject("Scripting.Dictionary")

   For Each Cel In Plage
        If Cel.Value <> 0 And d.exists(Cel.Value) Then
            Cel.Interior.ColorIndex = 3: d2(Cel.Address) = Cel.Value
                Else: d(Cel.Value) = ""
        End If
    Next Cel
    
    For Each Cel In d2.Keys
        m = m & Chr(10) & d2(Cel) & " en " & Cel
    Next Cel
    
MsgBox "Les valeurs suivantes sont en doublons, les supprimer manuellement" & m, vbCritical
End Sub

le code est sensible à la casse. si je met une majuscule à un mot il ne le considère plus en doublon.
je ne vois pas ou cela est déclaré
 

thebenoit59

XLDnaute Accro
Re : VBA pour détecter les doublons d'une colonne

Code:
Sub Doublon()
    Dim Plage As Range
    Dim Cel As Variant
 
Set Plage = Worksheets("Feuil1").Range("a2:a" & [a65000].End(xlUp).Row)
Set d = CreateObject("Scripting.Dictionary"): Set d2 = CreateObject("Scripting.Dictionary")

   For Each Cel In Plage
        If Cel.Value <> 0 And d.exists(Ucase(Cel.Value)) Then
            Cel.Interior.ColorIndex = 3: d2(Cel.Address) = Cel.Value
                Else: d(Ucase(Cel.Value)) = ""
        End If
    Next Cel
    
    For Each Cel In d2.Keys
        m = m & Chr(10) & d2(Cel) & " en " & Cel
    Next Cel
    
MsgBox "Les valeurs suivantes sont en doublons, les supprimer manuellement" & m, vbCritical
End Sub

Dis-moi si ça fonctionne.
 

CISCO

XLDnaute Barbatruc
Re : VBA pour détecter les doublons d'une colonne

Bonjour

C'est vrai que la procédure peut s'avérer longue.

en fait l'idéal serait un code, qui dès que je tape une valeur en doublon, la valeur s'affiche en rouge pour signaler le doublon

mais je n'arrive pas à trouver une écriture

Le plus simple serait d'utiliser une mise en forme conditionnelle, non ?

@ plus
 

Discussions similaires

Réponses
2
Affichages
140
Réponses
6
Affichages
125

Statistiques des forums

Discussions
312 112
Messages
2 085 409
Membres
102 884
dernier inscrit
Macarena