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 :

Comparaison des lignes de deux feuilles d'un même classeur [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Comparaison des lignes de deux feuilles d'un même classeur
    Bonjour,

    J’essaie de faire une macro qui compare les données de deux feuilles. Après avoir parcouru de nombreux forums je ne parviens pas adapter les macro que j’ai trouvé à mon cas, j’en appelle donc à votre aide.

    J’ai deux feuilles, avec le même nombre de colonnes (25),les mêmes intitulés de colonnes de A1 à Y1 mais qui n’ont pas forcément le même nombre de lignes ( de plus certaines cases peuvent être identiques d'une ligne à l'autre, par exemple même nom d’entreprise mais valeurs différentes sur les autres colonnes).

    Je voudrais faire une boucle afin de comparer chaque ligne de ma feuille 1 avec chaque ligne de ma feuille 2. Si je trouve une cellule identique entre ma feuille 1 et 2 alors comparer le reste de la ligne, sinon Next et ainsi de suite.

    Lorsque deux lignes sont identiques en comparant feuille 1 et feuille 2 : Surligner la ligne correspondante sur la feuille 2 en vert .


    Merci d'avance pour votre aide précieuse

  2. #2
    Membre habitué Avatar de Klin89
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 119
    Points : 178
    Points
    178
    Par défaut
    Bonjour cecile1234, le forum

    Vois ceci :
    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
    Option Explicit
    Sub test()
    Dim a, i As Long, dico As Object, txt As String, x As Range
        Set dico = CreateObject("Scripting.Dictionary")
        dico.CompareMode = 1
        With Sheets("Feuil1").Cells(1).CurrentRegion
            a = .Value
            For i = 2 To UBound(a, 1)
                txt = Join$(WorksheetFunction.Index(a, i, 0), ",")
                dico(txt) = ""
            Next
        End With
        With Sheets("Feuil2").Cells(1).CurrentRegion
            .Interior.ColorIndex = xlNone
            a = .Value
            For i = 2 To UBound(a, 1)
                txt = Join$(WorksheetFunction.Index(a, i, 0), ",")
                If dico.exists(txt) Then
                    If x Is Nothing Then
                        Set x = .Rows(i)
                    Else
                        Set x = Union(x, .Rows(i))
                    End If
                End If
            Next
            If Not x Is Nothing Then x.Interior.ColorIndex = 43
        End With
    End Sub
    klin89

  3. #3
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour cecile1234,

    Une autre solution plus rapide je pense.

    Si tu cherches toutes les lignes de la feuille 2 qui ont exactement la même ligne dans la feuille 1, le filtre avancé est tout trouvé.

    Tu vas pouvoir filtre sur place dans la feuille 2 et utiliser comme critère de filtre la feuille 1 entière (ta plage de 25 colonnes).
    Ce qui se résumera a une seule ligne de code.
    Ensuite tu pourras colorer toutes les lignes restantes dans la feuille 2 avant de supprimer le filtre.


    Voir ce tutoriel de Philippe Tulliez : Les filtres avancés ou élaborés dans Excel


    En résume, 3 étapes :
    1. Filtre avancé
    2. Coloration des lignes
    3. Suppression du filtre


    Voilà un exemple simple sur deux feuilles de 3 colonnes et quelques lignes :
    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 Test()
        With Sheets("Feuil2")
            'Filtre avancé, il suffit d'adapter les plages
            .Range("A1:C20").AdvancedFilter _
                Action:=xlFilterInPlace, _
                CriteriaRange:=Sheets("Feuil1").Range("A1:C8"), _
                Unique:=False
     
           'les cellules colorées seront uniquement celles encore visibles après le filtre
           .Range("A2:C20").Interior.Color = 5296274
     
           'suppression du filtre
           .ShowAllData
        End With
    End Sub

    PS : Tu peux voir dans la partie X du tutoriel ci-dessus que la recherche se fait le début du champ (la recherche n'est pas exacte). Si cela pose un problème dans ton cas il faudra trouver une solution pour contourner. J'en ai bien une en tête mais je garde le secret encore un peu
    Antony

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking


    Si le post vous est utile un petit fait toujours plaisir et pensez à passer en

    Et surtout -> Balise CODE

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Klin89 Voir le message
    Bonjour cecile1234, le forum

    Vois ceci :
    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
    Option Explicit
    Sub test()
    Dim a, i As Long, dico As Object, txt As String, x As Range
        Set dico = CreateObject("Scripting.Dictionary")
        dico.CompareMode = 1
        With Sheets("Feuil1").Cells(1).CurrentRegion
            a = .Value
            For i = 2 To UBound(a, 1)
                txt = Join$(WorksheetFunction.Index(a, i, 0), ",")
                dico(txt) = ""
            Next
        End With
        With Sheets("Feuil2").Cells(1).CurrentRegion
            .Interior.ColorIndex = xlNone
            a = .Value
            For i = 2 To UBound(a, 1)
                txt = Join$(WorksheetFunction.Index(a, i, 0), ",")
                If dico.exists(txt) Then
                    If x Is Nothing Then
                        Set x = .Rows(i)
                    Else
                        Set x = Union(x, .Rows(i))
                    End If
                End If
            Next
            If Not x Is Nothing Then x.Interior.ColorIndex = 43
        End With
    End Sub
    klin89

    Merci beaucoup, ta macro fonctionne parfaitement

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Bonjour cecile1234,

    Une autre solution plus rapide je pense.

    Si tu cherches toutes les lignes de la feuille 2 qui ont exactement la même ligne dans la feuille 1, le filtre avancé est tout trouvé.

    Tu vas pouvoir filtre sur place dans la feuille 2 et utiliser comme critère de filtre la feuille 1 entière (ta plage de 25 colonnes).
    Ce qui se résumera a une seule ligne de code.
    Ensuite tu pourras colorer toutes les lignes restantes dans la feuille 2 avant de supprimer le filtre.


    Voir ce tutoriel de Philippe Tulliez : Les filtres avancés ou élaborés dans Excel


    En résume, 3 étapes :
    1. Filtre avancé
    2. Coloration des lignes
    3. Suppression du filtre


    Voilà un exemple simple sur deux feuilles de 3 colonnes et quelques lignes :
    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 Test()
        With Sheets("Feuil2")
            'Filtre avancé, il suffit d'adapter les plages
            .Range("A1:C20").AdvancedFilter _
                Action:=xlFilterInPlace, _
                CriteriaRange:=Sheets("Feuil1").Range("A1:C8"), _
                Unique:=False
     
           'les cellules colorées seront uniquement celles encore visibles après le filtre
           .Range("A2:C20").Interior.Color = 5296274
     
           'suppression du filtre
           .ShowAllData
        End With
    End Sub

    PS : Tu peux voir dans la partie X du tutoriel ci-dessus que la recherche se fait le début du champ (la recherche n'est pas exacte). Si cela pose un problème dans ton cas il faudra trouver une solution pour contourner. J'en ai bien une en tête mais je garde le secret encore un peu


    Bonjour,

    Merci beaucoup pour ta réponse, j'ai essayé avec ta macro, mais ça me colorie tout en vert. Pour être plus précise, mes 2 feuilles contiendront toujours le même nombre de colonnes mais pas forcément le même nombre de lignes. Le nombre de lignes 20 est arbitroire.


    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 Test()
        With Sheets("Feuille2")
            'Filtre avancé, il suffit d'adapter les plages
            .Range("A1:Y20").AdvancedFilter _
                Action:=xlFilterInPlace, _
                CriteriaRange:=Sheets("Feuille1").Range("A1:Y20"), _
                Unique:=False
     
           'les cellules colorées seront uniquement celles encore visibles après le filtre
           .Range("A2:Y20").Interior.Color = 5296274
     
           'suppression du filtre
           .ShowAllData
        End With
    End Sub

  6. #6
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Pour le problème de ligne, remplace ta plage par ceci avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n = Range("A"&rows.count).end(xlup).row

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Kiouane Voir le message
    Pour le problème de ligne, remplace ta plage par ceci .Range("A1:Y"&n) avec n = Range("A"&rows.count).end(xlup).row
    Merci pour ta réponse, j'ai remplacé mais j'ai toujours le même problème, la macro me colorie toute la page en vert même si les lignes entre les deux feuilles sont différentes

  8. #8
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Il s'agit simplement d'un exemple donc effectivement les plages sont à adapter.

    Je ne faisais qu'indiquer une méthode bien plus rapide que n'importe quelle boucle.


    Si rien a droite et en dessous de tes plages tu peux faire comme ça :
    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 Test()
        With Sheets("Feuil2")
            'Filtre avancé, il suffit d'adapter les plages
            .[A1].CurrentRegion.AdvancedFilter _
                Action:=xlFilterInPlace, _
                CriteriaRange:=Sheets("Feuil1").[A1].CurrentRegion, _
                Unique:=False
     
           'les cellules colorées seront uniquement celles encore visibles après le filtre
           .[A1].CurrentRegion.Resize(.[A1].CurrentRegion.Rows.Count - 1).Offset(1).Interior.Color = 5296274
     
           'suppression du filtre
           .ShowAllData
        End With
    End Sub
    Ça règle le problème.
    Antony

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking


    Si le post vous est utile un petit fait toujours plaisir et pensez à passer en

    Et surtout -> Balise CODE

  9. #9
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Met un exemple de ton fichier en pièce jointe, je voudrais essayer de comprendre l'origine de ce problème.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Voilà en PJ un exemple de fichier ressemblant au mien avec la macro.
    J’ai colorié une case en rouge dans la feuille 1 pour mettre en évidence cette case qui est différente de la case de la ligne correspondante dans la feuille 2 mais que la macro surligne quand même en vert . Une autre précision : dans ce fichier les lignes sont dans le même ordre dans la feuille 1 et 2 mais ce n’est pas toujours le cas, les lignes peuvent être identiques dans les deux feuilles mais dans un ordre différent .
    Fichiers attachés Fichiers attachés

  11. #11
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Personnellement je n'ouvrirais pas un fichier qui contient des macros !

    Si toutes les lignes passent en vert, je vois les raisons suivantes :
    • Aucune lignes ne réponds au critères donc Excel ne pouvant colorer que les lignes visibles décide de les colorer toutes.
    • Toutes les lignes correspondent au critères donc le fonctionnement est normale.
    • Des problèmes d'affichage de champs date ou heure qui ne serait pas saisie au même format des deux cotés.
    • Le point X du tuto que j'ai posté plus haut.
    Antony

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking


    Si le post vous est utile un petit fait toujours plaisir et pensez à passer en

    Et surtout -> Balise CODE

  12. #12
    Membre averti Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Points : 394
    Points
    394
    Par défaut
    Cecile j'ai jeté un coup d'oeil à ton fichier. Et j'ai essayé de faire la manip' manuellement avec le filtre avancé mais aucune ligne ne correspondait. J'ai revérifié en faisant une extraction sans doublons. Toutes les lignes sont restés.

    Résultat : J'ai vérifié ligne par ligne et j'ai trouvé où réside l'erreur. Ta colonne H est différente d'une feuille à l'autre (Au niveau des données qu'elle contient).

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Personnellement je n'ouvrirais pas un fichier qui contient des macros !

    Si toutes les lignes passent en vert, je vois les raisons suivantes :
    • Aucune lignes ne réponds au critères donc Excel ne pouvant colorer que les lignes visibles décide de les colorer toutes.
    • Toutes les lignes correspondent au critères donc le fonctionnement est normale.
    • Des problèmes d'affichage de champs date ou heure qui ne serait pas saisie au même format des deux cotés.
    • Le point X du tuto que j'ai posté plus haut.
    Merci pour ta réponse, je vais essayer de mieux maîtriser le tuto que tu as posté pour comprendre mon erreur

    Citation Envoyé par Kiouane Voir le message
    Cecile j'ai jeté un coup d'oeil à ton fichier. Et j'ai essayé de faire la manip' manuellement avec le filtre avancé mais aucune ligne ne correspondait. J'ai revérifié en faisant une extraction sans doublons. Toutes les lignes sont restés.

    Résultat : J'ai vérifié ligne par ligne et j'ai trouvé où réside l'erreur. Ta colonne H est différente d'une feuille à l'autre (Au niveau des données qu'elle contient).
    Merci beaucoup, j'ai corrigé, ça marche trés bien maintenant, merci

  14. #14
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par antonysansh Voir le message
    Personnellement je n'ouvrirais pas un fichier qui contient des macros !

    Si toutes les lignes passent en vert, je vois les raisons suivantes :
    • Aucune lignes ne réponds au critères donc Excel ne pouvant colorer que les lignes visibles décide de les colorer toutes.
    • Toutes les lignes correspondent au critères donc le fonctionnement est normale.
    • Des problèmes d'affichage de champs date ou heure qui ne serait pas saisie au même format des deux cotés.
    • Le point X du tuto que j'ai posté plus haut.
    C'est bon ta macro fonctionne très bien, merci beaucoup

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

Discussions similaires

  1. [XL-2013] couper coller des lignes sur deux feuilles avec conditions
    Par sixfreed76 dans le forum Excel
    Réponses: 6
    Dernier message: 25/01/2016, 14h15
  2. [XL-2010] similarité des lignes entre deux feuilles excel
    Par demahom08 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/11/2013, 17h04
  3. Réponses: 0
    Dernier message: 15/11/2012, 19h47
  4. [XL-2003] comparaison des lignes de deux feuilles
    Par safouunette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/11/2010, 10h27
  5. Copier - coller des données entre 2 feuilles d'un même classeur
    Par cati_78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/04/2009, 23h05

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