IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Retrouver les doublons de deux colonnes différentes [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 73
    Par défaut Retrouver les doublons de deux colonnes différentes
    Bonjour à tous

    Je souhaite créer une macro permettant de comparer deux plages (ou colonnes: par exemple A et B) de données.
    Je me suis dit qu'il fallait trouver tous les doublons afin de retrouver les éléments uniques de chaque plage.

    Quelqu'un aurait une idée à me proposer s'il vous plait?

    Cordialement
    Tiviia

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Les plages à comparées se trouvent sur la même feuille, dans mon exemple, la feuille est "Feuil1" et les plages sont en colonnes A et B, à adapter. Les cellules en doublons auront le fond en rouge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Sub Doublons()
     
        Dim PlageA As Range
        Dim PlageB As Range
        Dim Cel As Range
     
        'sur la feuille "Feuil1"
        With Worksheets("Feuil1")
     
            'en colonne A de A1 à Ax
            Set PlageA = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
            'en colonne B de B1 à Bx
            Set PlageB = .Range(.Cells(1, 2), .Cells(.Rows.Count, 2).End(xlUp))
     
        End With
     
        For Each Cel In PlageA
     
            'si trouvée au moins une fois, le fond en rouge
            If Application.WorksheetFunction.CountIf(PlageB, Cel.Value) <> 0 Then
     
                Cel.Interior.ColorIndex = 3
     
            End If
     
        Next Cel
     
    End Sub
    Hervé.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    Bonjour

    Oui sinon il y a le moyen de le faire en utilisant la librairie des dictionnaires

    voila un exemple qui te tri les doublons dans les colonnes a et b
    et te les retranscrit dans les colonnes a et b sans doublons bien entendu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub supprime_les_doublons_dans_AetB()
     dim dico1,dico2
     Set dico1 = CreateObject("Scripting.Dictionary")
      Set dico2 = CreateObject("Scripting.Dictionary")
     'on tri les doublons dans la colonne"A"
      For Each c In Range("A1", [A65000].End(xlUp))
        dico1(c.Value) = ""
      Next c
    'on tri les doublons dans la colonne "B"
    For Each c2 In Range("B1", [B65000].End(xlUp))
        dico2(c2.Value) = ""
      Next c2
     
    Columns("a:b").Clear'on efface tout dans les deux colonnes
    'on transfert les données des deux dictionnaires dans les colonnes correspondantes
    [A1].Resize(dico1.Count, 1) = Application.Transpose(dico1.keys)
    [B1].Resize(dico2.Count, 1) = Application.Transpose(dico2.keys)
     
    End Sub
    Voila
    Au plaisir

    re
    et si tu veux supprimer en meme temps les doublons correspondant a la colonne "A" qui sont dans la colonne "B"
    tu change ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'on tri les doublons dans la colonne "B"
    For Each c2 In Range("B1", [B65000].End(xlUp))
        dico2(c2.Value) = ""
      Next c2

    pour ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'on tri les doublons dans la colonne "B"
    For Each c2 In Range("B1", [B65000].End(xlUp))
     If Not dico1.exists(c2.Value) Then dico2(c2.Value) = ""
      Next c2
    ainsi tu n'aura vraiment aucun doublons dans les deux colonnes

    voila
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre éclairé
    Femme Profil pro
    Inscrit en
    Février 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 56
    Par défaut
    Bonjour,

    Chaque groupe de doublons a une couleur différente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Sub DoublonsEntre2Colonnes()
      Set d = CreateObject("Scripting.Dictionary")
      couleurs = Array(3, 4, 6, 7, 8, 15, 17, 20, 22, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 50, 53)
      Set plage1 = Range("A2:A" & [a65000].End(xlUp).Row)
      Set plage2 = Range("B2:B" & [b65000].End(xlUp).Row)
      Union(plage1, plage2).Interior.ColorIndex = xlNone
      For Each C In plage1
        d.Item(C.Value) = d.Item(C.Value) & C.Row & "-"
      Next C
      For Each C In plage2
        If d.exists(C.Value) Then
           nocoul = (Application.Match(C.Value, d.keys, 0)) Mod UBound(couleurs)
           C.Interior.ColorIndex = couleurs(nocoul)
           a = Split(d.Item(C.Value), "-")
           For k = LBound(a) To UBound(a) - 1
             tmp = a(k) - plage1.Row + 1
             plage1(tmp).Interior.ColorIndex = couleurs(nocoul)
           Next k
         End If
       Next C
    End Sub
    Ceuzin
    Fichiers attachés Fichiers attachés

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour sophie

    quand je regarde ton code je ne vois pas la comparaison pour les doublons de la colonnes2 par rapport a la colonnes 2
    c'était un des critères de départ je crois

    en effet tu compare la colonne 2 au dico1 mais pas les doublons dans la meme colonnes

    tu vois ce que je veux dire ?
    Au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 73
    Par défaut
    Bonjour à tous

    Je vous remercie de m'avoir répondu !

    J'ai testé toutes vos solutions.

    L'idée étais de répertorier tous les doublons afin de voir les éléments qui sont uniques dans les deux listes.

    Du coup l'idée de ceuzin est pas mal du tout!
    Chaque doublons à sa couleur !

    Question: comment automatiquement extraire les couples de doublons et les insérer dans des colonnes à cotés (C et D par exemples) ?

    Merci pour vos réponses !

    Cdt

    Tiviia

    Re

    Le code de ceuzin ne fonctionne pas lorsqu'il y a beaucoup de données dans les colonnes ..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/01/2013, 11h03
  2. centrer les pages entre deux colonnes
    Par speedylol dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 05/10/2006, 10h35
  3. supprimer les doublons . . . . d'une colonne donnée !
    Par pekka77 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/10/2006, 17h38
  4. Comment compter les doublons d'une colonne?
    Par Dnx dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/11/2005, 10h50
  5. retrouver les contraintes sur une colonne
    Par kalari dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 18/10/2005, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo