Liste deroulante VBA
Bonsoir à tous.
Je suis en train de créer un fichier client pour ma compagne sur excel, mais des années se sont écoulées sans pratique de code.
Dans ce fichier j'ai 3 feuilles. Listing_client / Tarif / Factures.
Lors d'une prestation, avec un formulaire VBA, je charge mon listing client dans une liste déroulante pour pouvoir sélectionner mon fameux client, j'arrive a afficher le nom et prénom (pas besoin de plus d'informations) mais je voudrais récupérer le mail pour un envoi en facture automatique, mais je n'arrive pas.
Voici le code que j'ai tapé. pouvez vous m'aider ? L'idéal serait de remplir un Textbox avec le fameux mail mais je séche depuis quelques jours
Private Sub UserForm_Activate()
Dim contenumail As String
Dim ligne As Integer: ligne = 2
While (ThisWorkbook.Worksheets("Tarifs").Cells(ligne, 1).Value <> "")
Listearticle.AddItem (ThisWorkbook.Worksheets("Tarifs").Cells(ligne, 1).Value)
ligne = ligne + 1
ThisWorkbook.Worksheets("Facture").Activate
Wend
Dim choix As Integer: choix = 2
Dim nom1 As String
Dim prenom1 As String
Dim email1 As String
While (ThisWorkbook.Worksheets("Listing_client").Cells(choix, 1).Value <> "")
nom1 = ThisWorkbook.Worksheets("Listing_client").Cells(choix, 2).Value
prenom1 = ThisWorkbook.Worksheets("Listing_client").Cells(choix, 3).Value
email1 = ThisWorkbook.Worksheets("Listing_client").Cells(choix, 8).Value
choixclient.AddItem nom1 & " " & prenom1
choix = choix + 1
Wend
End Sub
Private Sub validerclient_Click()
MsgBox ("Client : " & choixclient.Value)
MsgBox ("Email :" & email1)
Range("E3").Value = choixclient.Value
End SubBonjour,
Voici un exemple en supposant que :
- la base clients soit un tableau structuré nommé "Clients",
- le nom du client soit dans une colonne nommée "Nom",
- le mail du client soit dans une colonne nommée "Mail" :
Private Sub UserForm_Initialize() 'à l'initialisation de l'userform, avant l'activation
with me 'avec moi, l'userform
.cbxclient.list = range("Clients[Nom]").value 'alimentation de la liste des clients
end with
End Sub
Private Sub cbxclient_change() 'à chaque chgt de valeur de cbxclient
with me
pos = application.match(cbxclient.value, range("Clients[Nom]"), 0) 'position dans la colonne du client sélectionné
if iserror(pos) then .txtMail = "" else .txtMail = application.index(range("Clients[Mail]"), pos) 'si <> "", renvoie mail correspondant
end with
End Subcbxclient est la combobox avec la liste des clients, txtMail est la textbox devant recevoir l'adresse mail.
Cdlt,
Merci de ta réponse aussi rapide. pour la combobox ça se remplit avec le nom uniquement, peut on rajouter le prénom (en cas de doublon sur le nom) ?
après j'ai un message d'erreur sur la ligne :
pos = application.match(cbxclient.value, range("Clients[Nom]"), 0) 'position dans la colonne du client sélectionnéErreur de syntaxe.
Mon tableau se trouve dans une feuille "Listing_client". le tableau se nomme Clientele. il est configuré :
Numéro/ Nom / Prénom / Adresse / CP / Ville / Telephone / Email / Naissance
Bonjour,
Ce code est un exemple, il faut donc adapter les noms pour qu'ils coïncident avec ceux des tes objets et références.
Sinon, pour les prénoms, voici un essai :
Private Sub UserForm_Initialize() 'à l'initialisation de l'userform, avant l'activation
with me 'avec moi, l'userform
with .cbxclient
.columncount = 2
.list = range("Clients[Nom]").resize(, 2).value 'alimentation de la liste des clients
end with
end with
End Sub
Private Sub cbxclient_change() 'à chaque chgt de valeur de cbxclient
with me
pos = application.match(cbxclient.value, range("Clients[Nom]"), 0) 'position dans la colonne du client sélectionné
if iserror(pos) then .txtMail = "" else .txtMail = application.index(range("Clients[Mail]"), pos) 'si <> "", renvoie mail correspondant
end with
End SubMais à vrai dire, j'ai tendance à penser que la colonne Prénom ne sert à rien : on peut mettre le nom et le prénom directement dans la colonne Nom.
Cdlt,