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 :

Utilisation de vlookup VBA avec une plage nommée


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut Utilisation de vlookup VBA avec une plage nommée
    Bonjour

    Je pose la question car je n'ai pas vraiement trouvé la réponse à mon problème dans les questions déjà posées (ou je n'ai bien regardé)

    Probléme

    J'ai définit sous un Tableau dans une feuille et je l'ai nommé "ManagersRess". Dans une routine VBA je souhaite faire une recherche d'une valeu dans la première colonne et si trouvée renvoyer le contenu correspondant de la colonne 3
    Voici un extrait de la section de code VBA qui fait ce traitement.
    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
     
        'Manager-Resource Association Table
        Set myMngrPlage = Range("ManagersRess") ' use the table Ress-Managers as a Range
        nLin = myMngrPlage.Rows.Count
        nCol = myMngrPlage.Columns.Count
     
        'loop on the cells in Resources plage
     
        'lookup first for the Res-Manager association table
        ThisWorkbook.Sheets(shAssoc).Activate
        iloop = 1
        For Each resCell In mySourcePlage
            Debug.Print resCell.Value
     
            If IsError(returnValue = Application.WorksheetFunction.VLookup(resCell, myMngrPlage, 3, False)) Then
                MsgBox "Error On VLookup"
                'Err.Clear
                If Err.Number <> 0 Then
                    Msg = "L'erreur # " & Str(Err.Number) & " a été générée par " _
                         & Err.source & Chr(13) & Err.Description
                    MsgBox Msg, , "Erreur", Err.HelpFile, Err.HelpContext
                End If
     
                Exit Sub
            End If
     
            'put the vlookup positive search in the right cell in the Manager Column
            iloop = iloop + 1
            Debug.Print "Lastline in the loop = " & iloop
        Next
    tout va bien jusqu'à ce que j'xécute la ligne avec Vlookup et là j'ai l'erreur suivante:

    "Run-time errror '1004':
    Unable to get the Vlookup property of the WorksheetFunction class"

    Il me semble déjà avoir utilisé par le passé, Vlookup de cette façon et que cela fonctionnait. Là je ne comprends plus.

    Help please.
    Merci
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par clem256 Voir le message
    J'ai définit sous un Tableau dans une feuille et je l'ai nommé "ManagersRess". Dans une routine VBA je souhaite faire une recherche d'une valeu dans la première colonne et si trouvée renvoyer le contenu correspondant de la colonne 3
    Voici un extrait de la section de code VBA qui fait ce traitement.
    Comme dit le dicton : "quand tu es à Rome, agit en romain".
    On pourrait le paraphraser ainsi : "quand tu es dans VBA, utilise les outils VBA".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Dim Res As Range
     
        For Each resCell In mySourcePlage
            Debug.Print resCell.Value
            Set Res = Range("ManagersRess").Columns(1).Find (resCell)
     
            If Res Is Nothing Then
                MsgBox ("Error to Find " & resCell )
                Exit Sub
            End If
     
            Debug.Print Res.Offset(0, 2).Value
        Next resCell
    J'ai tapé ce code à l'arrache directement dans le message sans le tester. Il se peut donc qu'il y ait du débugage à faire.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    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
    'soir !

    Citation Envoyé par clem256 Voir le message
    Il me semble déjà avoir utilisé par le passé, Vlookup de cette façon et que cela fonctionnait.
    Reproduire la formule manuellement dans une cellule pour voir si déjà cela ne déclenche pas une erreur et
    oui « cela fonctionnait » tant qu'il n'y a pas d'erreur car WorksheetFunction ne sert justement qu'à planter l'exécution du code
    en cas d'erreur retournée par la fonction ! Donc totalement inutile, conserver uniquement Application.Vlookup
    et tester le résultat via la fonction IsError

    Sinon évidemment la voie de Menhir est valable, utilisant aussi l'existant d'Excel, une simple recherche !

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, 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)

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Bonsoir,

    Exemple de recherche dans une table nommée utilisateurs avec 2 colonnes.
    On cherche dans la première colonne et on récupère la valeur de la 2eme colonne (la table n'est pas triée)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      nom = Application.UserName
      initiales = Application.VLookup(nom, [utilisateurs], 2, False)  ' table correspondance
      If Not IsError(initiales) Then
        Sheets(1).Cells.AutoFilter Field:=1, Criteria1:=initiales
      End If
    Boisgontier

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Mai 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 72
    Points : 42
    Points
    42
    Par défaut
    Merci à tous. Avec toutes ces pistes je devrais réussir à avoir quelque chose qui fonctionne. Une fois testé je passe le problème à "résolu"
    @ Menhir "quand tu es dans VBA, utilise les outils VBA": peux-tu m'indiquer ce qui n'est pas VBA dans mon code, stp? Je ne demande qu' à apprendre pour ne pas refaire les mêmes erreurs

    Clem256

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par clem256 Voir le message
    peux-tu m'indiquer ce qui n'est pas VBA dans mon code, stp? Je ne demande qu' à apprendre pour ne pas refaire les mêmes erreurs
    La fonction Excel VLookup.
    Ce n'est pas syntaxiquement incorrecte mais ce n'est pas (à mon avis) l'outil approprié.
    C'est une question de goût et d'habitude : perso, quand je suis dans VBA, je préfère (dans la mesure du possible) utiliser les éléments nativement VBA plutôt que les fonctions Excel. C'est généralement plus simple et cause moins de problème.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

Discussions similaires

  1. [XL-2010] alimenter une Combobox sur une feuille avec une plage nommée
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/08/2015, 15h21
  2. Réponses: 3
    Dernier message: 02/05/2015, 21h35
  3. [XL-2013] Définir une plage nommée avec le VBA
    Par skk201 dans le forum Excel
    Réponses: 2
    Dernier message: 11/03/2014, 07h22
  4. [XL-2007] Comment récupérer les valeurs d'une plage nommée avec le gestionnaire de nom
    Par Mamadou79 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/09/2010, 10h50
  5. Formule avec renvoie d'une plage nommée partielle
    Par doudoustephane dans le forum Excel
    Réponses: 2
    Dernier message: 22/05/2008, 10h25

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