FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Vlookup dans Userform
 

Vlookup dans Userform

Il y a 264 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici



Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Vlookup dans Userform
 
Plus d'informations

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 @+

zeb
Profil : Modérateur libre

As-tu lu les règles de la catégorie Programmation ? Les règles du forum Programmation- A lire !

Si oui, mets ton message en forme.
Si non, vas vite les lire et ... mets ton message en forme.

Plus d'informations

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

Je reprends.

Pour la Combobox :

Code :
  1. Private Sub Client_Change()
  2.     Rep.Text = Client.Text
  3. End Sub



Pour la Textbox :

Code :
  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.

zeb
Profil : Modérateur libre

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 !)

Plus d'informations

La modification n'a rien changé.

J'ai toujours une erreur. Après avoir choisi "Débogage", VBA surligne la ligne 7 du 2ème code en jaune.

zeb
Profil : Modérateur libre

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.

Plus d'informations

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

Code :
  1. Option Explicit
Code :
  1. Private Sub Annuler_Click()
  2.     Unload Essai
  3. End Sub
Code :
  1. Private Sub Client_Change()
  2.     Rep.Text = Client.Text
  3. End Sub
Code :
  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

zeb
Profil : Modérateur libre

: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

Plus d'informations

En fait Client_Change() déclenche d'autres TextBox.

Merci pour l'astuce qui pourra servir.

@+

Plus d'informations

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".

Code :
  1. Option Explicit
Code :
  1. Private Sub Annuler_Click()
  2.     Unload Nouveau_dossier
  3. End Sub
Code :
  1. Private Sub Client_Change()
  2.     Rep.Text = Client.Text
  3.     Contact.RowSource = Client.RowSource
  4. End Sub
Code :
  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

Code :
  1. Contact.RowSource = Client.Rowsource

par

Code :
  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.


Plus d'informations

Je n'ai toujours pas trouvé la solution.

Quelqu'un pourrait il m'aider?

Merci


Aller à :
 
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Vlookup dans Userform

Annonces Google
Publicité
Les derniers tests

Charts cartes graphiques Q3 2008 : 101 cartes testées

Publié le 29 September 2008

Les charts de 101 cartes graphiques anciennes et récentes sous 9 applications, avec au total 6767 scores. Quel gain attendre du remplacement de votre carte graphique par un nouveau modèle dans chaque application/résolution et en moyenne ? Lire la suite

Upgrader son portable en 9 leçons

Publié le 29 September 2008

Profiter au mieux de son PC portable en 9 leçons. Lire la suite

Que choisir ? Home Cinema 5.1 ou projecteur de son ?

Publié le 25 September 2008

Faut-il craquer pour un ensemble 5.1 ou pour une barre de son ? Découvrez les forces et faiblesses comparées de chaque système. Lire la suite

Intel Core i7 (Nehalem) : une architecture signée AMD ?

Publié le 25 September 2008

Avec ses nouveaux processeurs Core i7, Intel fait évoluer les Core 2 en reprenant leur architecture, mais en lui rajoutant des technologies dont la plupart semblent avoir leur équivalent direct chez AMD. Impression ou réalité ? Lire la suite