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

Excel Discussion :

Fonction Lookup vs colonnes [XL-2010]


Sujet :

Excel

  1. #1
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut Fonction Lookup vs colonnes
    Bonjour à tous;

    Voilà, je cherche à récupérer la valeur d'un champ me basant sur l'identifiant de ce dernier.
    J'esplique:
    J'ai un tableau de données genre:
    ID C
    124 M4
    123 F1
    124 G
    141 M2

    et sur une autre feuille, j'ai un autre tableau qui contient 2 champs

    ID Value
    198 21
    124 17
    89 54
    141 6
    123 89
    ...

    Je cherche à récupérer la valeur Value correspondant au ID et à la mettre dans le 1r tableau dans la colonne ID (remplacer l'ID par sa valeur que je trouve dans le 2ème tableau) comme ci-dessous
    ================================
    ID C
    17 M4
    89 F1
    17 G
    6 M2
    ================================


    J'ai tenté avec la formule LOOKUP (vector) mais il y a des restrictions:
    - le résultat doit être dans un autre champs (autre que celui du lookup: donc autre que la colonne ID du 1er tableau)
    - Je n'arrive pas à étendre la fonction à toute la colonne (je dois le faire pour chaque cellule de la colonne du 1er tableau)

    Je dois mal m'y prendre!
    Quelqu'un pourrait m'aider SVP?

    Merci.
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  2. #2
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    Personne pour m'aider?
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 33
    Points : 33
    Points
    33
    Par défaut
    J'ai une solution mais elle utilise les macros.
    Je considère que dans les deux feuilles, tes tableaux sont colonnes A et B, depuis la première rangée

    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 parcours()           'cette macro parcours ta feuille "Value"
     
    Worksheets("Value").Select
    Hauteur = 0     'Variable désignant la hauteur que la macro regarde
    While Range("A1").Offset(Hauteur,0).Value<>""
    Range("A1").Offset(Hauteur,0).Select
    Call exchange
    Hauteur = Hauteur +1
    Wend
    End Sub
     
    sub exchange()               'Cette macro regarde la valeur sélectionnée, la cherche dans la page ("Données") et la reporte dans value
    X = ActiveCell.Value
     
    Worksheets("Données").Select
    K = 0
    While Range("A1").Offset(K,0).value<>""
    If Range("A1").Offset(K,0).value = X Then
    Y = Range("A1").Offset(K,1).value                                  'Y est la valeur que tu cherches, on va la remettre dans la bonne case
     
    Worksheets("Value").Select
    ActiveCell.Offset(0,1).Value = Y
    Worksheets("Données").Select
    GoTo valeurRemplace
    K=K+1
    Wend
    valeurRemplace
    End Sub
    Cette macro risque d'être un peu longue à cause des nombreux appels à Select, tu dois avoir moyen de l'accélérer en écrivant la macro d'échange dans la macro principale .

  4. #4
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    Merci Louis.nicolle pour ta réponse/
    HJ'ai une erreur de compilation:
    Wend without While!

    voici le code exécuté:
    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 parcours()           'cette macro parcours ta feuille "Value"
     
    Worksheets("Value").Select
    Hauteur = 0     'Variable désignant la hauteur que la macro regarde
    While Range("A1").Offset(Hauteur, 0).Value <> ""
    Range("A1").Offset(Hauteur, 0).Select
    Call exchange
    Hauteur = Hauteur + 1
    Wend
    End Sub
     
    Sub exchange()               'Cette macro regarde la valeur sélectionnée, la cherche dans la page ("Données") et la reporte dans value
    X = ActiveCell.Value
     
    Worksheets("Sheet1").Select
    K = 0
    While Range("A1").Offset(K, 0).Value <> ""
    If Range("A1").Offset(K, 0).Value = X Then
    Y = Range("A1").Offset(K, 1).Value                                 'Y est la valeur que tu cherches, on va la remettre dans la bonne case
     
    Worksheets("Sheet2").Select
    ActiveCell.Offset(0, 1).Value = Y
    Worksheets("Sheet1").Select
    GoTo valeurRemplace
    K = K + 1
    Wend
    valeurRemplace
    End Sub
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 33
    Points : 33
    Points
    33
    Par défaut
    En effet, il manque un End If au milieu:
    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
    30
    31
    32
    
    sub parcours()           'cette macro parcours ta feuille "Value"
     
    Worksheets("Value").Select
    Hauteur = 0     'Variable désignant la hauteur que la macro regarde
    While Range("A1").Offset(Hauteur,0).Value<>""
    Range("A1").Offset(Hauteur,0).Select
    Call exchange
    Hauteur = Hauteur +1
    Wend
    End Sub
     
    sub exchange()               'Cette macro regarde la valeur sélectionnée, la cherche dans la page ("Données") et la reporte dans value
    X = ActiveCell.Value
     
    Worksheets("Données").Select
    K = 0
    While Range("A1").Offset(K,0).value<>""
    If Range("A1").Offset(K,0).value = X Then
    Y = Range("A1").Offset(K,1).value                                  'Y est la valeur que tu cherches, on va la remettre dans la bonne case
     
    Worksheets("Value").Select
    ActiveCell.Offset(0,1).Value = Y
    Worksheets("Données").Select
    GoTo valeurRemplace
    End If                                          'Cette ligne la normalement (je test sur un autre ordi et recopie a la main, d'ou les coquilles ;) )
    
    K=K+1
    Wend
    valeurRemplace:               'vérifie bien qu'il y a les deux points
    End Sub

  6. #6
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    Bonjour Louis.nicolle;

    Je ne m'y connais pas en macros mais je pense qu'il faut définir la fonction "valeurRemplace", non?
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 33
    Points : 33
    Points
    33
    Par défaut
    Non, valeurRemplace: est une étiquette qui indique à la macro ou aller une fois la ligne : GoTo valeurRemplace. Si tu préfères ne pas t'encombré tu peux remplacer la ligne GoTo par Exit Sub et supprimer l'étiquette.

    Si il y a une erreur de compilation qui te demande ce qu'est valeurRemplace vérifie qu'il y a bien les ":" après l'étiquette.

    Version avec Exit Sub:
    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
    30
    31
     
     
    sub parcours()           'cette macro parcours ta feuille "Value"
     
    Worksheets("Value").Select
    Hauteur = 0     'Variable désignant la hauteur que la macro regarde
    While Range("A1").Offset(Hauteur,0).Value<>""
    Range("A1").Offset(Hauteur,0).Select
    Call exchange
    Hauteur = Hauteur +1
    Wend
    End Sub
     
    sub exchange()               'Cette macro regarde la valeur sélectionnée, la cherche dans la page ("Données") et la reporte dans value
    X = ActiveCell.Value
     
    Worksheets("Données").Select
    K = 0
    While Range("A1").Offset(K,0).value<>""
    If Range("A1").Offset(K,0).value = X Then
    Y = Range("A1").Offset(K,1).value                                  'Y est la valeur que tu cherches, on va la remettre dans la bonne case
     
    Worksheets("Value").Select
    ActiveCell.Offset(0,1).Value = Y
    Worksheets("Données").Select
    Exit Sub
    End If                                          'Cette ligne la normalement (je test sur un autre ordi et recopie a la main, d'ou les coquilles ;) )
     
    K=K+1
    Wend
    End Sub

  8. #8
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    Merci encore Louis.nicolle.
    Le code marche mais pour une seule valeur!
    C'est sensé faire une boucle.
    Je dois certainement mal m'y prendre.
    Serait-il possible de me donner les étapes?
    Actuellement je vais dans la page macro et je fais Run sachant que j'ai enregisté la macro dans le même fichier.

    Merci.
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 33
    Points : 33
    Points
    33
    Par défaut
    Es tu sure d'avoir les bon noms de feuilles? Je te remets le code avec les noms de base d'excel, le code fonctionne correctement chez moi.

    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 parcours()          
     
    Worksheets("Feuil1").Select
    Hauteur = 0     'Variable désignant la hauteur que la macro regarde
    While Range("A1").Offset(Hauteur, 0).Value <> ""
    Range("A1").Offset(Hauteur, 0).Select
    Call exchange
    Hauteur = Hauteur + 1
    Wend
    Worksheets("Feuil1").Select
    End Sub
     
    Sub exchange()              
    X = ActiveCell.Value
     
    Worksheets("Feuil2").Select
    K = 0
    While Range("A1").Offset(K, 0).Value <> ""
    If Range("A1").Offset(K, 0).Value = X Then
    Y = Range("A1").Offset(K, 1).Value                                
     
    Worksheets("Feuil1").Select
    ActiveCell.Value = Y
    Exit Sub
    End If                                        
    K = K + 1
    Wend
    End Sub

  10. #10
    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
    Autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
        Dim rg1 As Range, rg2 As Range, t, i&
        Set rg1 = ThisWorkbook.Sheets("Feuil1").[A1:B5]
        Set rg2 = ThisWorkbook.Sheets("Feuil2").[A1:B5]
            t = rg1
            On Error Resume Next
            For i = 1 To UBound(t)
                t(i, 1) = Application.WorksheetFunction.VLookup(t(i, 1), rg2, 2, False)
            Next i
        rg1 = t
    End Sub
    rg1 est la plage de ton premier tableau
    ID C
    124 M4
    123 F1
    124 G
    141 M2
    et rg2 celle du deuxième
    ID Value
    198 21
    124 17
    89 54
    123 89
    Tu dois juste changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rg1 = ThisWorkbook.Sheets("Feuil1").[A1:B5]
    Set rg2 = ThisWorkbook.Sheets("Feuil2").[A1:B5]
    Pour coller à ton cas en changeant le nom des feuilles et la plage.
    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

  11. #11
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    Merci antonysansh. Le code marche super bien.
    Merci à tous
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

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

Discussions similaires

  1. somme de valeurs d'une colonne en fonction d'autres colonnes
    Par youness78 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 02/08/2007, 19h31
  2. Réponses: 4
    Dernier message: 03/07/2007, 14h35
  3. [MySQL] Trier les résultats en fonction d'une colonne ordre
    Par eclipse012 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 05/01/2007, 13h59
  4. fonction affichant des colonnes
    Par ohini dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 23/06/2005, 19h25

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