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

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 43
    Points
    43
    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 actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 43
    Points
    43
    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 actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 43
    Points
    43
    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 actif Avatar de babybell
    Homme Profil pro
    Retraité Bancaire
    Inscrit en
    Septembre 2008
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    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 du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 43
    Points
    43
    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, 145 affichages)

  8. #8
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour Ledobs babybell le forum c'est pas un truc comme cela que tu veus faire??? si j' ai compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Sub Test()
    Dim f As Range, c As Range
    Application.ScreenUpdating = False
    With Sheets("COMPT")
    For Each c In .Range("a2:a" & .Range("a65000").End(xlUp).Row)
    With Sheets("NUMR")
    Set f = .Range("a2:a" & .Range("a65000").End(xlUp).Row).Find(c, LookIn:=xlValues, LookAt:=xlWhole)
    End With
    If Not f Is Nothing Then c.Offset(0, 1) = f.Offset(0, 1)
    Next: End With
    End Sub

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 43
    Points
    43
    Par défaut Merci
    On dirait de la magie.....merci

    Que représente la valuer 6500 dans le .Range("a65000") ?

    Et la traduction de .Find(c, LookIn:=xlValues, LookAt:=xlWhole) ?

    Merci encore

  10. #10
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re ,Range("a65000") = je pars de a2 jusqu'a la derniere cellule non vide de la colonne je devrais mettre range(65536) pour excel 2003 ou 1100000 pour excel2007 ne tiens pas compte des cellules vide entre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Find(c, LookIn:=xlValues, LookAt:=xlWhole)
    je recherche la valeur absolu ou vraiment identique de la variable (c)
    si je mets seulement find(c) c'est moi precis regarde l'aide tres instructif a+

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

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 495
    Points : 265
    Points
    265
    Par défaut
    Bonsoir Laetitia, ledobs, le forum
    Effectivement, ta méthode est meilleure.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Need your help PLease !
    Citation Envoyé par laetitia Voir le message
    bonjour Ledobs babybell le forum c'est pas un truc comme cela que tu veus faire??? si j' ai compris.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
    Sub Test()
    Dim f As Range, c As Range
    Application.ScreenUpdating = False
    With Sheets("COMPT")
    For Each c In .Range("a2:a" & .Range("a65000").End(xlUp).Row)
    With Sheets("NUMR")
    Set f = .Range("a2:a" & .Range("a65000").End(xlUp).Row).Find(c, LookIn:=xlValues, LookAt:=xlWhole)
    End With
    If Not f Is Nothing Then c.Offset(0, 1) = f.Offset(0, 1)
    Next: End With
    End Sub
    Bonjour,

    Je me permets de vous soliciter car j'ai l'impression que vous pourriez m'aider sur un problème similaire.
    Ne connaissant pas le VBA mais uniquement quelques formules j'aimerai pouvoir comparer les valeurs de deux colonnes sur deux feuilles différentes et quand ça match, retourner comme résultat, le contenu d'une 3ème cellule se situant sur la feuille n°2 de la ou des lignes correspondantes au match.

    Exemple :
    feuille 1 colonnes A B et C
    feuille 2, colonnes A B et D
    comparaison de la colonne A feuille N°1 avec la colonne A feuille N°2
    en simultanée
    comparaison de la colonne B feuille N°1 avec la colonne B feuille N°2

    Si la valeur de la cellule de la colonne A Feuille N°1 coïncide avec la valeur de la cellule colonne A Feuille N°2 ET QUE (sur la même ligne) la valeur de la cellule de la colonne B Feuille N°1 coïncide avec la valeur de la cellule colonne B Feuille N°2 ALORS afficher le contenu de la cellule C de la feuille N°1 (de cette ligne) dans la valeur de la cellule C de la feuille N°2 (ligne correspondante)

    Sachant qu'il peut y avoir une correspondance plusieurs fois dans la zone de recherche et que dans la cellule C de la Feuille N°2 il faudrait ajouter toutes les valeurs correspondantes.

    En eperant que mes explications soient suffisantes sans exemple et que vous puissiez me proposer votre aide.

    Je vous remercie par avance.

    Cordialement

    fx4sky

  13. #13
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 58
    Points : 56
    Points
    56
    Par défaut
    bonjour
    si tu met un fichier en pièce jointe ça sera mieux pour comprendre la nature de vos données et trouver la formule adéquate

    cdt

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par omrsmiloud Voir le message
    bonjour
    si tu met un fichier en pièce jointe ça sera mieux pour comprendre la nature de vos données et trouver la formule adéquate

    cdt
    Et voici, mais je doute que ça aide beaucoup car je ne peux pas laisser beaucoup d'informations dans le fichier.

    Cordialement

    fx4sky
    Fichiers attachés Fichiers attachés

  15. #15
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 273
    Points : 6 582
    Points
    6 582
    Par défaut
    salut,
    Citation Envoyé par fx4sky Voir le message
    Et voici, mais je doute que ça aide beaucoup car je ne peux pas laisser beaucoup d'informations dans le fichier.
    Si je peux me permettre
    Citation Envoyé par fx4sky Voir le message
    Exemple :
    feuille 1 colonnes A B et C
    feuille 2, colonnes A B et D
    comparaison de la colonne A feuille N°1 avec la colonne A feuille N°2
    en simultanée
    comparaison de la colonne B feuille N°1 avec la colonne B feuille N°2
    Si la valeur de la cellule de la colonne A Feuille N°1 coïncide avec la valeur de la cellule colonne A Feuille N°2 ET QUE (sur la même ligne) la valeur de la cellule de la colonne B Feuille N°1 coïncide avec la valeur de la cellule colonne B Feuille N°2 ALORS afficher le contenu de la cellule C de la feuille N°1 (de cette ligne) dans la valeur de la cellule C de la feuille N°2 (ligne correspondante)
    Sachant qu'il peut y avoir une correspondance plusieurs fois dans la zone de recherche et que dans la cellule C de la Feuille N°2 il faudrait ajouter toutes les valeurs correspondantes.
    La colonne A de confswitch ne correspond en rien à la colonne A de baie !
    N'est-ce pas les switch et ports des 2 feuilles que tu veux contrôler et s'ils sont égaux ligne par ligne on copie le n°pc de confswitch sur la feuille baie nom périphérique ?

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Hello !

    Oui ! Tout à fait !
    Difficile a expliquer d'autant plus qu'il peut y avoir plusieurs retours possible.
    Exemple : Sur le switch 167 / numéro de port 2 il y a 2 noms de PC différents, il me faudrait pouvoir ajouter ces X noms différents dans la même cellule de la 2ème feuille (baie) C3 soit (PC2 et PC3)
    Il peut y avoir 1 Pc, ou X Pc sur le même port ;-)

    Je pense qu'avec cette macro je ne suis pas loin mais il me manque encore des modifs :


    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 ComparaisonDansunefeuille()
    j = 1
    'comparaison dans une feuille dans un seul classeur
    Set sh2 = Sheets("conf switch").Range("A1:B200")
    Set sh1 = Sheets("baie").Range("A1:B200")
    For Each c In sh1
    MaValeur = c.Value
    If MaValeur <> "" Then
    Set Plage = sh2.Columns("A:B").Cells.Find(MaValeur, lookat:=xlWhole)
    If Plage Is Nothing Then
    Sheets("baie").Cells(j, 3).Value = c.Value
    j = j + 1
    End If
    End If
    Next
    End Sub
    Sauf qu'a la place d'ecrire dans la colonne C de la feuille baie, les contenus non trouvés dans la feuille conf switch, il me faudrait au contraire le nom du matériel réseau (PC) dans la colonne C de la feuille "baie" lorsqu'il y a une correspondance de lignes.

    Mais je continu de chercher

    cdt

+ 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