Se connecter avec
S'enregistrer | Connectez-vous

Vlookup dans Userform

Dernière réponse : dans Programmation
Partagez

Bonjour à tous,

Depuis quelques jours j'ai un soucis avec vba sous excel.

Dans une Userform je prévois une Combobox et une Text box dont la valeur dépend de la Combobox.

Voilà le code :
Private Sub Client_Change()
Rep.Text = Client.Text
End Sub

Private Sub Rep_Change()
Dim NouveauRep As Integer
Dim NomClient As Integer

NomClient = Val(Client.Text)
NouveauRep = Val(Rep.Text)
NouveauRep = Application.WorksheetFunction.VLookup(NomClient, PERSO.XLS!repertoire, 2)
End Sub

En sachant que :
- Client = Combobox
- Rep = Textbox
- PERSO.XLS!repertoire = zone repertoire avec les données sur 2 colonnes (1ere colonne = Client; 2eme colonne = Rep)

Ce que je cherche :
- Comment donner une valeur à Rep en fonction du choix de Client?

Merci d'avance et @+

Autres pages sur : vlookup userform

Désolé de m'être précipité, merci pour la leçon.

Je reprends.

Pour la Combobox :
  1. Private Sub Client_Change()
  2. Rep.Text = Client.Text
  3. End Sub


Pour la Textbox :
  1. Private Sub Rep_Change()
  2. Dim NouveauRep As Integer
  3. Dim NomClient As Integer
  4.  
  5. NomClient = Val(Client.Text)
  6. NouveauRep = Val(Rep.Text)
  7. NouveauRep = Application.WorksheetFunction.VLookup(NomClient, PERSO.XLS!repertoire, 2)
  8. End Sub


Merci de votre aide.

Au lieu d'utiliser
Client_Change()
Essaie
Client_Click()

Oui, je sais c'est frustrant d'être logique comme tu as su l'être et d'être tombé à côté...

Est-ce bien ça ton problème ?
(Répondre après avoir testé, tellement c'est gros !)
Contenus similaires

M'enfin, tu n'as pas dit qu'il y avait une erreur !

Quel est le message d'erreur ?
Qu'y a-t-il dans la variable repertoire (Ligne 7) ?
As-tu mis l'Option Explicit au début de ton code ?

Ligne 5, tu récupères la valeur numérique de Client.Text. Bizarre.
Ligne 7, tu écrases la valeur que tu a mis dans NouveauRep à la ligne 6 avant de t'en servir. Bizarre.

Le deuxième paramètre de VLookUp attend un objet Range, pas une chaîne de caractères.
Tu ne peux donc pas construire ce paramètre avec la syntaxe fichier.xls!range.

Voilà la solution, je ne sais si c'est la meilleure mais elle fonctionne.

  1. Option Explicit
  1. Private Sub Annuler_Click()
  2. Unload Essai
  3. End Sub
  1. Private Sub Client_Change()
  2. Rep.Text = Client.Text
  3. End Sub
  1. Private Sub Rep_Change()
  2. Dim NomClient As Variant
  3.  
  4. NomClient = Client.Text
  5. Workbooks("perso.xls").Activate
  6. Sheets("client").Activate
  7. Rep.Text = WorksheetFunction.VLookup(NomClient, Range("repertoire"), 2, False)
  8. End Sub


En sachant que :
- Essai = Userform
- Client = Combobox
- Rep = Textbox dont le résultat dépend de Combobox
- perso.xls et client= classeur perso.xls masquer avec feuille client dans laquelle se trouve la plage repertoire
- repertoire = plage de cellule sur 2 colonnes où sont enregistrées mes données
  • 1ère colonne = client
  • 2ème colonne = rep

    Merci à zeb pour tous les conseils.

    A bientôt
  • :jap: 

    On peut toujours faire mieux....

    Par exemple, dans Client_Change(), tu mets quelque chose dans Rep.Text, ce qui déclenche Rep_Change()... Bah, mets directement le code de Rep_Change() dans Client_Change() [:spamafote] Sauf si tu as une bonne raison de ne pas le faire :D 

    Bonjour,

    J'ai de nouveau des soucis. Maintenant, c'est un combobox "contact" dont le résultat dépend du combobox "client". En sachant que la troisième colonne de ma plage de cellule (repertoire) est le nom d'une autre plage de cellule. Cette nouvelle plage de cellule me sert come rowsource de la combobox "contact".

    1. Option Explicit
    1. Private Sub Annuler_Click()
    2. Unload Nouveau_dossier
    3. End Sub
    1. Private Sub Client_Change()
    2. Rep.Text = Client.Text
    3. Contact.RowSource = Client.RowSource
    4. End Sub
    1. Private Sub Contact_Change()
    2. Dim NomClient As Variant
    3.  
    4. NomClient = Client.Text
    5. Workbooks("perso.xls").Activate
    6. Sheets("client").Activate
    7. Contact.RowSource = WorksheetFunction.VLookup(NomClient, Range("repertoire"), 3, False)
    8. End Sub


    J'ai essayé de remplacer
    1. Contact.RowSource = Client.Rowsource
    par
    1. Contact.Text = Client.Text
    mais le résultat ne me renvoie pas la plage de cellules pour sélectionner le contact.

    Je planche et ne trouve pas la solution. Pouvez-vous m'aider SVP.

    Merci d'avance et bonne soirée.


    Posez votre question