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 :

Problème fonction vlookup


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 35
    Par défaut Problème fonction vlookup
    bonjour,

    j'ai un problème avec la fonction vlookup. J'ai réalisé un userform, j'aimerais que lorsque je rentre une donnée dans la première textbox et que j'appuie sur un bouton les autres textbox de l'userform se remplissent grace a une "recherchev" dans une table. Le problème c'est que mon code ne marche et un message d'erreur s'affiche :
    Nom : error.PNG
Affichages : 448
Taille : 15,9 Ko

    voila mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton2_Click()
    UserForm2.TextBox2.Value = Application.VLookup(UserForm2.TextBox1.Value, Range("listepersonnel"), 4, True)
    UserForm2.TextBox4.Value = Application.VLookup(UserForm2.TextBox1.Value, Range("listepersonnel"), 3, True)
    UserForm2.TextBox5.Value = Application.VLookup(UserForm2.TextBox1.Value, Range("listepersonnel"), 2, True)
    End Sub

  2. #2
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Essai avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.VLOOKUP()
    Tu peux aussi peut être utiliser l'événement userformchange comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub userform_Change()
    TextBox1.Value = Application.WorksheetFunction.VLookup()
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 35
    Par défaut
    ca n'a pas l'air de marcher mieux..

    Nom : error2.PNG
Affichages : 422
Taille : 7,3 Ko

  4. #4
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Essai avec une spécification de quelle feuille tu utilises pour le Range avec un Sheets("").Range() et au passage c'est bien une plage de donnée dans ton Range?

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il y a plusieurs raisons pour laquelle ta procédure ne fonctionne pas.
    La première, il faut mettre False comme quatrième argument et pas True. A lire Fonctions Excel à la loupe : N°1 - RECHERCHEV()
    La deuxième (éventuellement), il faut faire la recherche sur la première colonne.
    La troisième comme relevé par Kiouane, ta plage nommée n'engloberait pas l'ensemble des données.
    Un exemple qui fonctionne
    Le code du CommandButton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
     ReadRecord Me.TextBox1.Value, Range("db_Data")
    End Sub
    Le code d'une procédure de lecture avec la recherche à l'aide de la fonction VLookUp (j'utiliserais pour ma part la fonction Match qui ne doit être sollicitée qu'une seule fois pour connaître le n° de la ligne).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ReadRecord(LookUpValue As String, AreaData As Range)
     Dim fn As WorksheetFunction
     Set fn = Application.WorksheetFunction
     With Me
     .TextBox2 = fn.VLookup(LookUpValue, AreaData, 2, False)
     .TextBox3 = fn.VLookup(LookUpValue, AreaData, 3, False)
     .TextBox4 = fn.VLookup(LookUpValue, AreaData, 4, False)
     End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  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.

    Citation Envoyé par Kiouane Voir le message
    Essai avec un Application.WorksheetFunction.VLOOKUP()
    Et non, c'est le contraire ! Si cela ne marche pas sans WorksheetFunction, cela ne fonctionnera pas plus avec !
    Par contre cela peut déclencher une erreur fatale avec mais passer sans en combinant avec une variable Variant
    qu'il suffit de contrôler avec IsError ou IsNumeric (exemples dans les discussions de ce forum) …

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  7. #7
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    D'accord c'est noté. Je te remercie Marc-L.

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut Solution avec la fonction MATCH
    Bonjour,
    Solution avec la fonction Match
    Scénario
    Dans l'exemple présenté ici
    Un UserForm contenant
    • 4 contrôles TextBox, nommés respectivement TextBox1, TextBox2, TextBox3 et TextBox4
    • 1 contrôle Frame nommé Frame1 englobant les TextBox 2 à 4 et dont la propriété Enable est initialisée à False à l'activation du formulaire.
    • 1 CommandButton pour fermer le UserForm.

    La recherche de la valeur entrée dans TextBox1 et le remplissage des valeurs des TextBox2 à 4 se fait dès la validation de la valeur par la touche Enter.
    Procédures
    Activation du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Activate()
     With Me
     .Frame1.Enabled = False ' Le Frame contient TextBox1, 2 & 3
     End With
    End Sub
    Validation de l'entrée de la valeur dans TextBox1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     With Me.TextBox1
      ' Si la valeur n'est pas trouvée, Focus sur TextBox1 et effacement de la valeur entrée
      If ReadRecord(.Value, Range("db_Data")) = False Then
       .Value = "": .SetFocus
      End If
     End With
    End Sub
    Procédure de lecture de l'enregistrement cherché (Retourne False si pas trouvé)
    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
    Function ReadRecord(LookUpValue As String, AreaData As Range) As Boolean
     ' Procédure de recherche le LookUpValue dans la plage AreaData
     '    et affectation des valeurs aux TextBox2, 3 et 4
     ' La fonction renvoie True si la valeur cherchée a été trouvée
     Dim fn As WorksheetFunction, RowNumber As Long
     Set fn = Application.WorksheetFunction
     On Error Resume Next
     RowNumber = fn.Match(LookUpValue, AreaData.Resize(columnsize:=1), 0)
     If Err.Number = 0 Then
      On Error GoTo 0
      With Me
      .TextBox2.Value = AreaData(RowNumber, 2)
      .TextBox3.Value = AreaData(RowNumber, 3)
      .TextBox4.Value = AreaData(RowNumber, 4)
      End With
      ReadRecord = True
     End If
     Set fn = Nothing
    End Function
    Procédure de fermeture du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
     Unload Me ' Fermeture du formulaire
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 35
    Par défaut
    Procédure de lecture de l'enregistrement cherché (Retourne False si pas trouvé)
    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
    Function ReadRecord(LookUpValue As String, AreaData As Range) As Boolean
     ' Procédure de recherche le LookUpValue dans la plage AreaData
     '    et affectation des valeurs aux TextBox2, 3 et 4
     ' La fonction renvoie True si la valeur cherchée a été trouvée
     Dim fn As WorksheetFunction, RowNumber As Long
     Set fn = Application.WorksheetFunction
     On Error Resume Next
     RowNumber = fn.Match(LookUpValue, AreaData.Resize(columnsize:=1), 0)
     If Err.Number = 0 Then
      On Error GoTo 0
      With Me
      .TextBox2.Value = AreaData(RowNumber, 2)
      .TextBox3.Value = AreaData(RowNumber, 3)
      .TextBox4.Value = AreaData(RowNumber, 4)
      End With
      ReadRecord = True
     End If
     Set fn = Nothing
    End Function
    Ca va te paraitre un peu bête mais je n'ai aucune idée d'où insérer ce code...

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

Discussions similaires

  1. [XL-2010] Problème fonction VLOOKUP et DATEADD
    Par philippe carreau dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 03/12/2015, 19h10
  2. [XL-2003] Problème Fonction VlookUp
    Par HankMoody dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/08/2012, 17h01
  3. [XL-2007] Problème fonction VLookup
    Par manu900 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/02/2012, 09h20
  4. Problème avec la fonction "VLookup"
    Par Domino40 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/08/2008, 09h57
  5. Problème avec la fonction VLookup
    Par pinocchio dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/07/2008, 11h59

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