Identifier Doublons VBA

Bonjour,

j'aimerais savoir comment identifier des doublons mais sur 2 colonnes ?

je sais identifier des doublons sur 1 colonne avec la mfc mais pas sur 2. d'ailleurs y a t'il une requête vba possible ?

j'ai un fichier avec 1000 lignes je souhaite savoir si il ya des doublons comme ci dessous en jaune et de le mettre en jaune également.

il faut vérifier si il y a des dates en doublons avec le même NOM.

image

Merci d'avance de votre aide

11aide-doublons.xlsx (9.24 Ko)

Bonsoir à tous,

Une proposition via Power Query (Complément à télécharger pour Excel 2010 et 2013. Nativement intégré dans les versions postérieures) :

(Merci de renseigner la version Excel utilisée dans votre profil ! )

Bonsoir CrissR, JFL,

En retour ton fichier sans VBA. Voir notes en rouge. Et la MFC.

Bonsoir,

Merci de la proposition je ne connais pas power query c'est intéressant. mais comment l'utiliser sur un autre fichier.

Une préférence pour vba sans rajouter de tableau en plus juste identifier les lignes en question si possible.

je viens de mettre a jour mon profil il s'agit d'excel365.

Bonsoir de nouveau,

On peut, via une colonne supplémentaire, insérer un NB.SI.ENS qui servira de base si>1 à une MFC.

=NB.SI.ENS(t_Source[DATE  RDV];t_Source[@[DATE  RDV]];t_Source[COMMERCIAL];t_Source[@COMMERCIAL])

Bonsoir,

merci pour vos réponses

j'ai trouvé un truc en VBA cela semble fonctionné mais avec + de 1000 lignes cela sera peut être lent non ?

merci

26aide-doublons.xlsm (16.66 Ko)

Bonsoir CrissR,

Tout va dépendre du nombre de doublons trouvés.

Car tu as une double boucle. Soit 1000 x 1000 pour 1000 lignes.

Et tu doubles à chaque fois la vérification.

Bonsoir,

OK merci de l'info n'existe t'il pas une manière plus rapide dans ce cas ? sans faire une double boucle ?

diffèrent sujet sur le forum évoque la fonction "Scripting.Dictionary " , mais je ne sais comment l'utiliser.

et d'ailleurs est il possible de rajouter une infos en msgbox avec le nombres de doublons trouvé ou aucun en fin de recherche

merci

Bonsoir,

pour travailler des données comme celles-ci, le mieux est de passer par des tableaux VBA afin de travailler en mémoire.
Ci joint votre fichier avec votre code et affichage du temps pour environs 900 ligne (soyez patient, une trentaine de secondes) et le code en "mémoire" qui lui sur le même nombre de ligne met 0.6 seconde.

15aide-doublons.xlsm (34.04 Ko)

Bon le résultat n'est pas représentatif du fait que je n'ai fait qu'une recopie des données déjà inscrites, mais le fichier vous montre bien la différence de calcul.
Le principe : j'ai repris ce que X Cellus à fait en formule : création d'un tableau avec le concaténé des deux colonnes, puis comme votre code test de la ligne 1 avec la ligne 1+1, s'il y a doublon la deuxième dimension du tableau des concaténés se voit attribuer une valeur +1.

une dernière boucle boucle sur cette deuxième dimension et si la valeur est supérieure à 0 c'est qu'il y a doublon, on passe la ligne en jaune. D'ailleurs avec cette donnée vous pourriez même afficher le nombre de fois que les valeurs se répètent.

@ bientôt

LouReeD

Bonsoir CrissR,

Voila, j'ai réalisé un code avec l'emploi d'un Dictionnaire (Scripting Dictionary)

L'avantage c'est qu'il ne garde (en mémoire que des valeurs uniques). Donc il supprime tous les doublons.

Et ainsi ensuite il n'y a pas plusieurs recherches avec les mêmes doublons.

Exemple (grossi): Tu as 1000 données dont 998 doublons et 2 uniques. Donc il ne comparera que 3 valeurs par rapport au 1000.

Le bouton Doublons lance la macro (avec utilisation de tableaux). C'est plus rapide.

L'autre macro qui s'appelle Doublon (sans le s) inscris les valeurs sur la feuille. Donc moins rapide que par tableaux.

Il sera plus fonctionnel là ou il y a beaucoup de données.

Edit: Salut LouReed Oh, je me suis fait doublé sur les doublons...

Jeu de mot comme disait Maitre Capello !

@ bientôt

LouReeD

Bonsoir a tous

merci pour vos réponses c'est top je comprend mieux .

@LouReeD, merci beaucoup effectivement plus rapide. du coup étant débutant en VBA si je souhaite un msgbox avec le nombre de doublons quel code dois je intégrer en plus, si je t'en demande pas trop.

Merci encore par avance

Bonsoir,

avec ce code en colonne E on affiche le nombre de répétition de la donnée de gauche :

Sub Doublons()
    Dim Tablo, TabTrans(), Tempo

    Tempo = Timer
    Tablo = Range("B4:D" & Range("C65500").End(xlUp).Row).Value
    Range("B4:D" & Range("C65500").End(xlUp).Row).Interior.ColorIndex = xlNone

    Application.ScreenUpdating = False
    ReDim TabTrans(1 To 2, 1 To UBound(Tablo))
    For i = 1 To UBound(Tablo)
        TabTrans(1, i) = Tablo(i, 2) & Tablo(i, 3)
    Next i
    For i = 1 To UBound(TabTrans, 2)
        For j = i + 1 To UBound(TabTrans, 2)
            If TabTrans(1, i) = TabTrans(1, j) Then TabTrans(2, i) = TabTrans(2, i) + 1: TabTrans(2, j) = TabTrans(2, j) + 1
        Next j
    Next i
    For i = 1 To UBound(TabTrans, 2)
        If TabTrans(2, i) > 0 Then
            Range("B" & i + 3 & ":D" & i + 3).Interior.Color = RGB(255, 255, 204)
            Range("E" & i + 3).Value = TabTrans(2, i) ' ici on indique en colonne E le nombre de fois qu'est doublé l'information
        End If
    Next i

    MsgBox Timer - Tempo
    Application.ScreenUpdating = True
End Sub

@ bientôt

LouReeD

Bonsoir ,

merci du retour c'est parfait effectivement j'ai bien le "1" qui s'affiche sur chaque doublons

si je souhaite différencier les doublons est il possible ? au lieu de tout mettre en "1" mettre 2, 3, 4 ...

merci

Bonsoir CrissR, Le Forum,

Avec le Dictionnaire en une seconde pour 1000 données.

Bonsoir,

le code ci-dessous affecte un numéro unique à chaque série de doublon, comme cela en filtrant sur "3" par exemple vous avez tous les doublons de "3" :

Sub Doublons()
    Dim Tablo, TabTrans(), Tempo, NumDoublon

    Tempo = Timer
    Tablo = Range("B4:D" & Range("C65500").End(xlUp).Row).Value
    Range("B4:D" & Range("C65500").End(xlUp).Row).Interior.ColorIndex = xlNone

    Application.ScreenUpdating = False
    ReDim TabTrans(1 To 2, 1 To UBound(Tablo))
    For i = 1 To UBound(Tablo)
        TabTrans(1, i) = Tablo(i, 2) & Tablo(i, 3)
    Next i
    For i = 1 To UBound(TabTrans, 2)
        For j = i + 1 To UBound(TabTrans, 2)
            If TabTrans(1, i) = TabTrans(1, j) Then
                If TabTrans(2, i) <> "" Then
                    TabTrans(2, j) = TabTrans(2, i)
                Else
                    NumDoublon = NumDoublon + 1
                    TabTrans(2, i) = NumDoublon
                    TabTrans(2, j) = NumDoublon
                End If
            End If
        Next j
    Next i
    For i = 1 To UBound(TabTrans, 2)
        If TabTrans(2, i) > 0 Then
            Range("B" & i + 3 & ":D" & i + 3).Interior.Color = RGB(255, 255, 204)
            Range("E" & i + 3).Value = TabTrans(2, i) ' ici on indique en colonne E le nombre de fois qu'est doublé l'information
        End If
    Next i

    MsgBox Timer - Tempo
    Application.ScreenUpdating = True
End Sub

@ bientôt

LouReeD

Bonsoir,

TOP c'est parfait un grand merci à tout le monde pour vos réponses.

Parfait ? C'est marant c'est mon.... Je plaisante !

Merci pour votre retour et vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "identifier doublons vba"