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 de l'intégralité des cellules de deux feuilles.


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante communication
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistante communication

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Comparaison de l'intégralité des cellules de deux feuilles.
    Bonjour,

    Je suis nouvelle sur le forum, et plus que novice en VBA (vraiment pas douée du tout en fait).
    J'ai besoin de comparer les cellules de 2 feuilles. Ce sont des exports d’Accès, sous forme "text1";"texte2";"texte3"; ect.


    La Feuille 1 est la feuille de référence et peut contenir jusqu'à 3 000 lignes, sur 1 seule colonne.
    La Feuille 2 est celle à comparer et contient une trentaine de ligne sur 1 seule colonne également.

    Ce qui serait parfait pour moi, serait de trouver une marcro qui mette en jaune les cellules de la feuille 2 qui ne sont pas strictement identique à une des cellules de la feuille 1.
    Il faudrait que chacune des cellules de la colonne A de la feuille 2 soit comparé à l'intégralité des cellules de la colonne A de la feuille 1.

    J'ai essayer de trouver des codes de macro sur les forums, mais rien ne marche... ou je n'arrive pas à modifier les codes sans que ça bug complètement....

    Je vous joints un document représentatif de ce que je doit traiter.

    J'espère que quelqu'un va pouvoir m'aider, car je suis coincé.

    Merci pour toute aide que vous pourrait m'apporter.

    Pièces jointes en attente de validation Pièces jointes en attente de validation

  2. #2
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut




    Bonjour,

    dans ce cas vaudrait mieux éviter un code, devrait être possible via une formule de calculs
    dans une mise en forme conditionnelle …



    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suis nouvelle sur le forum, et plus que novice en VBA (vraiment pas douée du tout en fait).
    Pourquoi du VBA là où une mise en forme conditionnelle pourrait faire l'affaire ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante communication
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistante communication

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Effectivement, vous avez raison...
    Je crois que j'applique trop le proverbe "pourquoi faire simple quand on peut faire compliqué" :-)

    J'y avais pas pensé...
    Merci beaucoup!

  5. #5
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    D'accard avec Marc et Philippe mais un gros problème d'incompatibilité d'humeur avec les formules... Alors une proposition VBA :

    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
    Sub Macro1()
    Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
    Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim PLD As Range 'déclare la variable PLD (PLage de cellues Différentes)
     
    Set O1 = Sheets("Feuil1") 'définit l'onglet O1 (à adpater SI DIFFÉRENT)
    Set O2 = Sheets("Feuil2") 'définit l'onglet O1 (à adpater si différrent)
    TC = O2.Range("A1").CurrentRegion 'définit la tableau de cellules TC
    Set PLD = O2.Range("B1") 'initialise la plage PLD
    For I = 1 To UBound(TC, 1) 'boucle : sur toutes les lignes du tableau TC
        'condition : si aucune occurrence de la valeur en ligne I colonne 1 du tableau TC n'est trouvée
        'dans la colonne 1 de l'onglet O1
        If O1.Columns(1).Find(TC(I, 1), , xlValues, xlWhole) Is Nothing Then
            'redéfinit la plage PLD (si l'adresse de PLD est B1, PLD devient la cellule ligne I, colonne 1 de l'onglet O2
            'sinon PLD devient l'union de PLD et de la cellule en ligne I, colonne 1 de l'onglet O2)
            Set PLD = IIf(PLD.Address = "$B$1", O2.Cells(I, 1), Application.Union(PLD, O2.Cells(I, 1)))
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    PLD.Interior.ColorIndex = 6 'colore la plage PLD de jaune
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante communication
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistante communication

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour Thautheme,

    Merci pour ton aide.
    J'ai essayé ta proposition, mais quand je veux l'exécuter, j'ai une erreur d'exécution '13' qui me renvoi à la ligne 14 de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If O1.Columns(1).Find(TC(I, 1), , xlValues, xlWhole) Is Nothing Then

    C'est peut être moi qui m'y prend mal...

  7. #7
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    J'ai fait un test avec le fichier que tu as fourni et je n'ai pas eu de bug... Est-ce que ton fichier réel a exactement la même structure que ton fichier exemple ?
    Un autre essai mais pratiquement identique au premier... :

    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
    Sub Macro1()
    Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
    Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim R As Range 'déclare la variable R (Recherche)
    Dim PLD As Range 'déclare la variable PLD (PLage de cellues Différentes)
     
    Set O1 = Sheets("Feuil1") 'définit l'onglet O1 (à adpater SI DIFFÉRENT)
    Set O2 = Sheets("Feuil2") 'définit l'onglet O1 (à adpater si différrent)
    TC = O2.Range("A1").CurrentRegion 'définit la tableau de cellules TC
    Set PLD = O2.Range("B1") 'initialise la plage PLD
    For I = 1 To UBound(TC, 1) 'boucle : sur toutes les lignes du tableau TC
        'condition : si aucune occurrence de la valeur en ligne I colonne 1 du tableau TC n'est trouvée
        'dans la colonne 1 de l'onglet O1
        Set R = O1.Columns(1).Find(TC(I, 1), , xlValues, xlWhole) 'définit la recherche R
        If R Is Nothing Then 'si aucune occurrence n'est trouvée
            'redéfinit la plage PLD (si l'adresse de PLD est B1, PLD devient la cellule ligne I, colonne 1 de l'onglet O2
            'sinon PLD devient l'union de PLD et de la cellule en ligne I, colonne 1 de l'onglet O2)
            Set PLD = IIf(PLD.Address = "$B$1", O2.Cells(I, 1), Application.Union(PLD, O2.Cells(I, 1)))
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    PLD.Interior.ColorIndex = 6 'colore la plage PLD de jaune
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante communication
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistante communication

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Non, les données sont plus importante. j'ai 28 données différentes séparées par des points-virgule, et non pas 13 comme dans mon fichier "Test". Mais sinon c'est identique...

    Oui ça marche bien sur le fichier test, mais quand j'utilise le même code sur mes autres données, ça me fait toujours la même erreur.
    ça peut venir du nombre de données présentes dans les cellules?

  9. #9
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Je ne comprends pas pourquoi... Une autre proposition sans la fonction Find avec deux boucles :

    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
    Sub Macro1()
    Dim O1 As Worksheet 'déclare la variable O1 (Onglet 1)
    Dim O2 As Worksheet 'déclare la variable O2 (Onglet 2)
    Dim TC1 As Variant 'déclare la variable TC1 (Tableau de Cellules 1)
    Dim TC2 As Variant 'déclare la variable TC2 (Tableau de Cellules 2)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim PLD As Range 'déclare la variable PLD (PLage de cellues Différentes)
    Dim TEST As Boolean 'déclare la variable TEST
     
    Set O1 = Sheets("Feuil1") 'définit l'onglet O1 (à adapter si différent)
    Set O2 = Sheets("Feuil2") 'définit l'onglet O1 (à adapter si différent)
    TC1 = O1.Range("A1").CurrentRegion 'définit la tableau de cellules TC1
    TC2 = O2.Range("A1").CurrentRegion 'définit la tableau de cellules TC2
    Set PLD = O2.Range("B1") 'initialise la plage PLD
    For I = 1 To UBound(TC2, 1) 'boucle 1 : sur toutes les lignes du tableau TC2
        TEST = False 'initialise la variable TEST
        For J = 1 To UBound(TC1, 1) 'boucle 2 : sur toutes les lignes du tableau TC1
            'condition : si les valeurs deux sont égales, définit la variable TEST, sort de la boucle 2
            If TC2(I, 1) = TC1(J, 1) Then TEST = True: Exit For
        Next J 'prochaine ligne de la boucle 2
        If TEST = False Then 'si test est [faux]
            'redéfinit la plage PLD (si l'adresse de PLD est B1, PLD devient la cellule ligne I, colonne 1 de l'onglet O2
            'sinon PLD devient l'union de PLD et de la cellule en ligne I, colonne 1 de l'onglet O2)
            Set PLD = IIf(PLD.Address = "$B$1", O2.Cells(I, 1), Application.Union(PLD, O2.Cells(I, 1)))
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    If PLD.Address <> "$B$1" Then PLD.EntireRow.Interior.ColorIndex = 6 'colore la plage PLD de jaune
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Assistante communication
    Inscrit en
    Janvier 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Assistante communication

    Informations forums :
    Inscription : Janvier 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    C'est trop bien!!! ça marche parfaitement!

    Un ÉNORME MERCI!!!

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

Discussions similaires

  1. [XL-2010] Problème macro copier-coller des cellules dans deux feuilles Excel
    Par benadry dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2014, 19h05
  2. [Toutes versions] algorithme ou matrice pour déterminer des cellules entre deux cellules formant une plage
    Par patricktoulon dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 01/04/2013, 18h01
  3. Réponses: 2
    Dernier message: 26/04/2011, 16h44
  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. comparaison de cellules sur deux feuilles différentes
    Par scorpele dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/07/2008, 10h36

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