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 :

Macro de comparaison de deux colonnes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Par défaut Macro de comparaison de deux colonnes
    Bonjour à tous =)

    Alors voilà j'essaye de faire une macro pour comparer deux colonnes qui contiennent des noms et j'aimerai savoir si les noms sont bien les mêmes et si le nom s'y retrouve bien

    Donc voilà ma macro de départ :

    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
    Sub Find_Matches()
     
    Dim CompareRange As Variant, x As Variant, y As Variant
     
     
     
    Set CompareRange = Range("B1:B165")
     
        For Each x In Selection
     
            For Each y In CompareRange
                If x = y Then
                    x.Offset(0, 3) = "ok"
                End If
            Next y
        Next x
     
    End Sub
    Si quelqu'un pouvait m'aider ce serait vraiment sympa car je suis vraiment bloqué ^^'

    un grand merci d'avance en tout cas ^^
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    préciser exactement ce qu'est censé effectuer le code …



    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Par défaut
    En fait j'essaye de faire une recherche sur les noms de la colonne A dans la colonne B. Et si je trouve dans les deux colonnes je les compare et je regarde si ils sont les même et si c'est le cas j'essaye de faire apparaitre un "ok" et avec ma macro ici rien ne se passe ^^'

  4. #4
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Bonjour,

    Mémorise dans un tableau les données de ta colonne A

    puis fait la lecture de ta colonne B et fais un accès aux données de ton tableau
    Quand tu trouve ta donnée positionne un code dans la colonne C par exemple

  5. #5
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Par défaut un exemple ultra simple
    Bonjour,
    si il y a peu de données voici un exemple très basique, en supposant que les listes des colonnes 1 et 2 soient continues et commencent à la première ligne :

    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
    Sub Compare2Col()
    Dim Liste1 As Range, Liste2 As Range
    Dim C1 As Range, C2 As Range, Cpt As Integer
    Set Liste1 = Range(Range("A1"), Range("A1").End(xlDown))
    Set Liste2 = Range(Range("B1"), Range("B1").End(xlDown))
    '
    For Each C2 In Liste2
        Cpt = 0
        For Each C1 In Liste1
            If UCase(C1) = UCase(C2) Then Cpt = Cpt + 1
        Next C1
        If Cpt > 0 Then C2.Offset(, 1) = Cpt
    Next C2
    '
    Set Liste1 = Nothing: Set Liste2 = Nothing
    End Sub
    Dans la colonne 3 s'affiche le nombre de fois ou le nom de la colonne 2 a été trouvé dans la colonne 1 (si >0).

    Cdlt.

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par legna986 Voir le message
    je regarde si ils sont les même et si c'est le cas j'essaye de faire apparaitre un "ok" et avec ma macro ici rien ne se passe
    Normal vu les données non cohérentes ! Présence d'un ou plusieurs espaces à la fin des saisies …

    Utiliser des boucles n'est pas souvent le plus judicieux, dans un cas simple comme celui-ci
    mieux vaut privilégier les fonctions d'Excel bien plus rapides et efficaces :

    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
    Sub Demo()
        With Feuil1
                                     LA& = .Cells(1).End(xlDown).Row
                                     LB& = .Cells(2).End(xlDown).Row
            .Cells(6).Resize(LA).Formula = "=TRIM(A1)"
            .Cells(7).Resize(LB).Formula = "=TRIM(B1)"
     
            With .Cells(4).Resize(LB)
                 .Formula = "=IF(ISNUMBER(MATCH(G1,$F$1:$F$" & LA & ",0)),""Ok"","""")"
    '             .Formula = .Value
            End With
     
    '        .Cells(6).CurrentRegion.Clear
        End With
    End Sub
    Quant à ceux s'obstinant avec les boucles, pensez à l'opérateur Like

    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    Il n'y a pas que les aigles qui atteignent les sommets, les escargots aussi mais ils en bavent !

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Ou, en utilisant las variables array :

    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
    Sub Compare()
    Dim ColA As Variant, ColB As Variant, Resultat() As String, I As Long, C As Range
    For Each C In Range("A1", Cells(Rows.Count, 1).End(xlUp))
        C.Value = Application.Trim(C.Value)
    Next C
    For Each C In Range("B1", Cells(Rows.Count, 2).End(xlUp))
        C.Value = Application.Trim(C.Value)
    Next C
    ColA = Application.Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)))
    ColB = Application.Transpose(Range("B1", Cells(Rows.Count, 2).End(xlUp)))
    ReDim Resultat(1 To Application.Max(UBound(ColA), UBound(ColB)))
    For I = LBound(ColA) To UBound(ColA)
        If IsNumeric(Application.Match(ColA(I), ColB, 0)) Then Resultat(I) = "ok"
    Next I
    [C1].Resize(UBound(Resultat)) = Application.Transpose(Resultat)
    End Sub
    PS. Mieux vaut tard que jamais; la macro recherche les noms de la colonne A ne figurant pas en colonne B.

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Tandis que moi je compare la colonne B avec la colonne A …
    Sinon Daniel tu m'as devancé car j'attendais une réaction du demandeur avant de passer à l'échelon supérieur !

    Mais bon comme j'ai commencé à le préparer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Demo2()
        With Feuil1
            VA = Application.Trim(Application.Transpose(Range(.Cells(1), .Cells(1).End(xlDown)).Value))
            L& = .Cells(2).End(xlDown).Row
            VB = Application.Trim(.Cells(2).Resize(L).Value)
            ReDim D$(1 To L, 0)
     
            For R& = 1 To L
                If IsNumeric(Application.Match(VB(R, 1), VA, 0)) Then D(R, 0) = "Ok"
            Next
     
            .Cells(4).Resize(L).Value = D
        End With
    End Sub
    Là les fonctions d'Excel TRANSPOSE, EQUIV (Match) et SUPPRESPACE (Trim) sont directement évaluées dans le code …

    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    La meilleure façon de ne pas avancer est de suivre une idée fixe. (Jacques Prévert)

Discussions similaires

  1. Macro de comparaison de deux colonnes
    Par legna986 dans le forum Excel
    Réponses: 3
    Dernier message: 10/06/2015, 12h04
  2. [XL-2007] Comparaison sur deux colonnes excel plus traitement
    Par guiltyspark dans le forum Excel
    Réponses: 5
    Dernier message: 04/03/2011, 11h53
  3. [XL-2003] Syntaxe If Then / Comparaison de deux colonnes
    Par ash.wizard dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/02/2011, 20h17
  4. Comparaison de deux colonnes
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/02/2008, 20h18
  5. [VBA-E] Pb Comparaison De Deux Colonnes Avec Fonction If
    Par gromorice dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/03/2007, 06h57

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