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 deux colonnes et retourner le résultat d'une troisième [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Par défaut Comparer deux colonnes et retourner le résultat d'une troisième
    Bonjour à tous.

    Je suis tout "neuf" en VBA et j'aimerais améliorer une formule trouvé sur le site de Microsoft.

    J'ai un fichier Excel qui comporte deux feuilles. Dans ces deux feuilles deux colonnes correspondent. La macro que j'ai trouvé me permet de trié sur une troisième colonne les valeurs qui sont présentent dans l'autre par contre j'aimerais qu'en plsu de me retourner ce résultat qu'elle transfert l'information de la case à côté d'elle.

    Voic la macro :

    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 equal to the range to which you will
        ' compare the selection.
        Set CompareRange = Worksheets("NUMR_UTILS").Range("A1:A180")
        ' NOTE: If the compare range is located on another workbook
        ' or worksheet, use the following syntax.
        ' Set CompareRange = Workbooks("Book2"). _
        '   Worksheets("Sheet2").Range("C1:C5")
        '
        ' Loop through each cell in the selection and compare it to
        ' each cell in CompareRange.
        For Each x In Selection
            For Each y In CompareRange
                If x = y Then x.Offset(0, 1) = x
            Next y
        Next x
    End Sub
    Dans le fond j'aimerais ajouter quelques chose du genre : si x = y alors retourner la valeur de la colonne B de la ligne de y dans la feuille NUMR_UTILS.

    Est-ce que quelqu'un peut m'éclairer svp.

    En P.J. un exemple de mon fichier
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    Bonjour Ledobs
    Ce petit code te va-il ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Macro1()
    Range("A2").Select
    cell_deb = ActiveCell.Offset(0, 1).Address
    Selection.End(xlDown).Select
    cell_fin = ActiveCell.Offset(0, 1).Address
    Set références = Range((cell_deb), (cell_fin))
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],NUMR_UTILS!R2C1:R300C2,2)"
    références.Select
    zone = Selection.Address
    Range("B2").Select
    Selection.AutoFill Destination:=Range(zone), Type:=xlFillDefault
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Par défaut Yes...merci
    Ça marche à merveille.

    Que j'aimerais comprendre la logique vba...
    Est-ce que quelqu'un connait un bon site qui explique le vba pour Excel.

    J'ai fouiné un peu partout mais sans bons résultats. Dois-je vraiment m'acheter un livre? Je ne peux pas croire qu'il existe rien sur le web...

  4. #4
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    Bonjour Ledobs

    Le mieux, je pense est de regarder sur tous les forum, que ce soit Excel ou autre. Tu verras qu'il y a une multitude de sujets sur lesquels on peut s'améliorer.
    Voici un lien pour Excel:
    http://www.developpez.net/forums/arc...php/f-664.html

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Par défaut Finalement il y a un glitch
    La macro va bien mais elle est restrictive.

    Par exemple si elle rencontre une case vide plutôt que de retourner un valeur null elle s'arrête là et ne continue pas l'inscription des valeurs subséquentes.

    Dans le fond ce qu'il faut c'est que la macro dise:

    Si la valeur de la sélection = une valeur de la colonne A de la feuille NUMR_UTILS alors inscrire la valeur correspondante du champs "X" de la colonne B de la feuille NUMR_UTILS comme valeur du champs "X" de la colonne B de la feuille COMPT_UTILS

    Si la valeur est NULL continuer au champ suivant.

    En ce moment la macro référence le champ comme un copier coller...c'est bien mais cela demande un tri manuel avant l'opération pour être certain que les colonnes correspondent...

  6. #6
    Membre éclairé Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité Bancaire
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Par défaut
    Envois-moi un exemple avec la ou les cases vides, car dans ton précédent envoi, tu ne disais pas que des cellules ne seraient pas renseignées.

    regarde si cela te va
    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 Macro1()
    Range("A2").Select
    cell_deb = ActiveCell.Offset(0, 1).Address
    Range("A65536").Select
    Selection.End(xlUp).Select
    cell_fin = ActiveCell.Offset(0, 1).Address
    Set références = Range((cell_deb), (cell_fin))
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],NUMR_UTILS!R2C1:R300C2,2)),"" "",(VLOOKUP(RC[-1],NUMR_UTILS!R2C1:R300C2,2)))"
    références.Select
    zone = Selection.Address
    Range("B2").Select
    Selection.AutoFill Destination:=Range(zone), Type:=xlFillDefault
    End Sub
    et dis-moi

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Par défaut Pas parfaite
    Merci de ton aide.

    Je te joins mon fichier. Si tu porte attention à la ligne 9 de la feuille COMPT c'est un utilisateur qui n'a pas de # de compte. Son nom ne se retrouve pas dans la colonne A de la feuille NUMR. Par contre la macro que tu m'as fournis retourne de l'information à sa ligne donc le tri ne se fait pas comme il le faut.

    Ce que je cherche à faire c'est de filtrer les usagers existant dans les deux colonnes A de chaque feuille et lorsque l'utilisateur existe, je veux rapporter la valeur de la colonne B de la feuille NUMR (ou d'une troisième feuille) à côté du nom de la ressource.

    Si j'avais deux table accessibles en SQL je pourrais facilement faire mon "join" mais en vba pour moi c'est *&/?%/$.

    Donc dans le fichier tu trouveras la feuille COMPT. La colonne A "COD_UTILS" est la colonne à comparer à celle du même nom de l'autre feuille. La colonne B "NUM_UTILS" de la feuille NUMR comporte une valeur qui correspond au compte inscris dans la colonne A de la même ligne. C'est cette information que je veux retourner dans la colonne B de la feuille COMPT. Cela me permettra de trier qui a un NU et qui n'en a pas tout en me permettant de garder l'information dans un tableau que je peux réutiliser.

    Si tu voulais m'inscrire dans la macro l'interprétation de qu'est ce qui fait quoi ça m'aiderait à comprendre la logique et essayer de mon côté d'améliorer la solution.

    Merci beaucoup de ton aide encore une fois.
    Fichiers attachés Fichiers attachés
    • Type de fichier : xls NU.xls (54,0 Ko, 155 affichages)

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

Discussions similaires

  1. [XL-2010] Comparer deux bases de données pour en créer une troisième
    Par Xaphalys dans le forum Excel
    Réponses: 5
    Dernier message: 24/07/2014, 13h24
  2. [XL-2003] Comparer deux feuilles et insérer les occurences dans une troisième
    Par Newbie_vba dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 03/09/2011, 11h55
  3. Comparer deux colonnes d'une même table
    Par snoopy69 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 08/01/2008, 10h05
  4. Comparer deux colonnes adjacentes une à une sur mon tableau?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/12/2007, 10h11
  5. comparer deux colonnes sur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/12/2005, 10h50

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