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 :

Comparer les valeurs de deux plages [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut Comparer les valeurs de deux plages
    Bonjour,

    Je m'adresse à vous car je me trouve face à un problème que je ne parviens pas à résoudre malgré de mes recherches.

    J'ai deux plages de cellules sur deux feuilles différentes dans un même classeur, certaines cellules de la plage ("A1:E2" feuille 1) ont la même valeur que des cellules de la plage ("A1:E1" feuille 2).

    J'essaye d'écrire un code qui dise pour chaque cellule x de la plage ("A1:E2" feuille 1), vérifier si la valeur est présente dans la plage ("A1:E1" feuille 2), si ce n'est pas le cas => modifier la ou les cellules dans la plage ("A1:E1" feuille 2).

    J'ai écrit ceci mais ça ne fonctionne pas, pourriez-vous m'aider svp ?
    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 CompareModifCell()
    Dim Cel, Val
        For Each Cel In Range("A1:E2")
            MsgBox Sheets("form").Name & " : " & Cel
            Sheets("BD").Activate
            Columns(1).Find(Sheets("form").Range("A1")).Activate
            Range(ActiveCell, ActiveCell.Offset(0, 9)).Select
            For Each Val In Selection
                If Val = Cel Then
                    MsgBox Sheets("BD").Name & " : " & Val & ") existe"
                Else
                    'Sheets("BD").Name & " : " & Val & ") n'existe pas"
                    Val = Cel
                    'Val.Select
                    'ActiveCell = Cel
                End If
            Next Val
        Next Cel
    End Sub
    Merci d'avance

  2. #2
    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,

    si ce n'est pas le cas => modifier la ou les cellules dans la plage ("A1:E1" feuille 2)
    Si les cellules n'ont pas la même valeur, par exemple A1 feuille 1 n'a pas d'équivalent Feuille 2; qu'est-ce que tu vas modifier ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Bonjour Daniel.C.

    Merci de t'intéresser à ma question et pour t'a promptitude.

    Si les cellules n'ont pas la même valeur, par exemple A1 feuille 1 n'a pas d'équivalent Feuille 2; qu'est-ce que tu vas modifier ?
    Modifier la valeur de la cellule A1 Feuille 2, par la valeur de la cellule A1 Feuille 1.

    Est-ce possible ?

  4. #4
    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
    Oui, l'exemple était mauvais. Et si c'est A2 qui n'a pas de correspondance ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Modifier la valeur de la cellule A2 Feuille 2, par la valeur de la cellule A2 Feuille 1.

    Valeurs dans la plage de cellules sur la feuille 1 en "A1:E2" :
    __A B C D E
    1 1 2 3 4 5
    2 6 7 8 9 10

    Valeurs dans la plage de cellules sur la feuille 2 en "A1:J1" :
    __A B C D E F G H I J
    1 1 2 3 4 5 6 7 8 9 10

    Exemple:
    si la valeur 6 est modifiée dans feuille 1 en "A2"
    modifier la valeur 6 dans feuille 1 en "F6"

  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
    Bonjour,

    pour ce dernier cas tel que présenté (rien à voir avec la demande d'origine !),
    code à insérer dans le module de classe Feuil1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 And Not Intersect(Me.[A1:E2], Target) Is Nothing Then
            Feuil2.Cells(Target.Column + (Target.Row - 1) * 5).Value = Target.Value
        End If
    End Sub
    _______________ ____________________________________ ______________________________

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

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Bonjour Marc-L.

    pour ce dernier cas tel que présenté (rien à voir avec la demande d'origine !),
    En effet dans mon premier post j'ai écrit ("A1:E1" feuille 2) au lieu de ("A1:J1" feuille 2), désolé pour cette erreur.

    code à insérer dans le module de classe Feuil1 :
    Il faut-il inséré ce code dans le module de la Feuil1.

    Bravooooooo c'est exactement le résultat attendu.

  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

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

    sinon la prochaine fois tu restes dans ton jus ‼ (eh oui j'ai une black list …)

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Bonjour.

    Je reviens sur ce fil pour demander s'il est possible lors de l'évènement "Sélection-Change" dans la plage "A1:E2 Feuil1" de copier cette plage dans un tableau dans le but de transférer ultérieurement les données du tableau dans la feuille de calcul en "A1:E2 Feuil1".

    Dans la Feuil1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub CopieVersTablo()
    Dim Tablo() As Variant
       'remplit les tableaux
        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
            If Target.Count = 1 And Not Intersect(Me.[A2:E3], Target) Is Nothing Then
            Tablo = Range("A2:E3")
        End If
    End Sub
    Dans un module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Tablo
    Sub TransfertVersFeuil()
    Dim Tablo() As Variant
        'restitue son contenu
        Sheets(1).Range("A2:E3").Value = Tablo ' ça bug
    End Sub
    Merci & @+

    Je manquerai pas de cliquer pour chaque message ayant aidé et pour clore la discussion.

  10. #10
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut COMPARER LES VELEURS
    Bonsoir Marc,

    Je ne sais si le demandeur à compris ton code mais personnellement je ne parviens pas à comprendre comment VBA peut l’interpréter.

    Personnellement je suis parvenu à ce code moins concis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 And Not Intersect([A1:J1], Target) Is Nothing Then
            col = Target.Column
            MsgBox col
            If col > 5 Then
                Feuil2.Cells(2, col - 5).Value = Target.Value
            Else
                Feuil2.Cells(1, col).Value = Target.Value
            End If
        End If
    End Sub
    Je vois bien que la différence réside dans Me.[A1:E2] mais ne saisis pas ce que comprend exactement VBA. ?
    Le code est dans feuil1, ce faisant il semblerait logique que "Me" fasse référence à cette feuille ?
    Par ailleurs, je connais bien cells(ligne, colonne) mais pas cells(valeur) c'est à dire sans ",".

    Cordialement,

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Bonjour nibledispo, Marc-L.

    Je vois bien que la différence réside dans Me.[A1:E2] mais ne saisis pas ce que comprend exactement VBA. ?
    Le code est dans feuil1, ce faisant il semblerait logique que "Me" fasse référence à cette feuille ?
    Par ailleurs, je connais bien cells(ligne, colonne) mais pas cells(valeur) c'est à dire sans ",".
    J'ai été surpris par le code de Marc-L qui fonctionne très bien.

    Par contre j'ai corrigé le code de nibledispo car la modification se fait dans Feuil1 et l'implémentation dans Feuil2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count = 1 And Not Intersect([A1:E2], Target) Is Nothing Then
            col = Target.Column
            lig = Target.Row
            MsgBox col
            If lig = 1 Then
                Feuil2.Cells(1, col).Value = Target.Value
            Else
                Feuil2.Cells(1, col + 5).Value = Target.Value
            End If
        End If
    End Sub

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Re bonjour ¨ ҉

    Dans mon avant-dernier post je vous demandez s'il est possible de passer un tableau dans une variable Public.

    Merci d'avance pour votre réponse ¨ ҉

  13. #13
    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
    Salut Paul !
    Citation Envoyé par nibledispo Voir le message
    […] Le code est dans feuil1, ce faisant il semblerait logique que "Me" fasse référence à cette feuille ?
    Par ailleurs, je connais bien cells(ligne, colonne) mais pas cells(valeur) c'est à dire sans ",".
    Oui l'objet Me fait référence à l'objet du module de classe dans lequel se trouve le code.
    J'ai commencé par tester dans une simple procédure mais dans cet évènement j'aurais pu m'en passer …
    Au moins cela a été pédagoqique !

    Comme évoqué dans cette épique discussion, une plage lignes par colonnes n'est pas qu'un tableau lignes par colonnes
    mais aussi une suite d'éléments (collection de cellules) en ligne …

  14. #14
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    modus57 quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Tablo
    Sub TransfertVersFeuil()
        'restitue son contenu
        Sheets(1).Range("A2:E3").Value = Tablo ' ça bug
    End Sub
    tu déclares plusieurs fois la variable qui est passée en "Public", donc
    modus57 et dans l'autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub CopieVersTablo()
       'remplit les tableaux
        Private Sub Worksheet_SelectionChange(ByVal Target As Range)
            If Target.Count = 1 And Not Intersect(Me.[A2:E3], Target) Is Nothing Then
            Tablo = Range("A2:E3")
        End If
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  15. #15
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut COMPARER LES VELEURS
    bonjour,

    Modus57 : mon code donné uniquement pour faire ressortir la concision de celui de Marc restitue le résultat attendu. fais un essai et tu verras tu mettre, comme tu le fais, la plage de la feuille 2 est une erreur.

    Marc : je crois comprendre de la discussion à laquelle tu renvois que :

    - En écrivant dans notre sujet "cells(7)" VBA ira directement chercher la valeur suivante sans se préoccuper de savoir si 7 est dans une colonne differente parce que pour lui une plage n'est qu'un série de valeurs. Cette explication justifie du coup l'emploi du cells(sans ,).

    je vais faire des essais ce soir pour corroborer.

    Cordialement,

  16. #16
    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

    Tiens Paul, regarde cette autre discussion pour laquelle j'ai été accueilli un peu fraîchement sur ce forum …

    Le sujet est intéressant, un vrai cas d'école ! Tu peux même t'y tester …

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Bonjour casefayere. ☼

    tu déclares plusieurs fois la variable qui est passée en "Public"
    Ok j'ai compris.

    Si je souhaite transférer les valeurs du tableau en "A2:J2"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Tablo
    Sub TransfertVersFeuil()
        'restitue son contenu
        Sheets(1).Range("A2:J2").Value = Tablo ' ça bug
    End Sub
    Voici le résultat :
    1 2 3 4 5 #N/A #N/A #N/A #N/A #N/A

    Comment corriger ce problème ?

  18. #18
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    essayes ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Range("A2").Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = Tablo
    ou (car je ne connais pas ta structure)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(1).Range("A2").Resize(UBound(Tablo, 1), UBound(Tablo, 2)) = WorksheetFunction.Transpose(Tablo)
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 858
    Par défaut
    Résultat premier code :
    1 2 3 4 5
    6 7 4 9 10


    Résultat deuxième code :
    1 6 #N/A #N/A #N/A
    2 7 #N/A #N/A #N/A

  20. #20
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Perso, je n'avais pas suivi la discussion entière, tu veux retranscrire ton tableau sur 2 lignes (2 et 3) de A à E ? si oui, une petite boucle suffira
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For x = 2 To 3
      For y = 1 To 6
        Cells(x, y) = tablo(x - 1, y)
      Next y
    Next x
    'en ayant déclaré, bien sur, x et y

    et...... si j'ai compris !
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comparer les valeurs de deux colonnes d'une table
    Par nguim dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/03/2014, 12h30
  2. Réponses: 2
    Dernier message: 21/03/2013, 19h38
  3. Comparer les valeurs de deux colonnes d'une feuille excel
    Par charrynsasi dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/12/2012, 15h40
  4. Comparer les valeurs de deux tableaux
    Par mailbox dans le forum Débuter
    Réponses: 12
    Dernier message: 28/11/2010, 20h14
  5. [DeskI XiR2] Comparer les valeurs de deux colonnes
    Par EmmanuelleC dans le forum Débuter
    Réponses: 2
    Dernier message: 27/02/2009, 09h45

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