VBA - Combobox - label + valeur

Résolu
cs_arnaud38 Messages postés 9 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 octobre 2005 - 18 oct. 2005 à 09:54
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 18 oct. 2005 à 11:50
Bonjour,
y a t il moyen d'affecter à une combobox Excel une liste d'objets contenant un libellé et un indentifiant.

Par exemple, je voudrais affecter à une combo une liste de ce type :
item 1 : nom1, identifiant1
item 2 : nom2, identifiant2
item 3 : nom3, identifiant3

Lorsque la combo affiche les données, seuls noms1, noms2 et nom3 doivent apparaitre.
Puis, lorsqu'on sélectionne un des libellés, je voudrais récupérer l'identifiant associé.
Si on sélectionne nom2 dans la combobox, je voudrais récupérer identifiant2.

Merci de vos réponses
Arnaud

2 réponses

valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
18 oct. 2005 à 11:50
Yes tu peux,
' On détermine le nombre de colonne de la Combo
ComboBox1.ColumnCount = 2
' On cache la colonne 2
ComboBox1.ColumnWidths = "200;0"
' On attribut les valeurs
' A1:B3 doit contenir des valeurs
ComboBox1.List() = [A1:B3].Value

Private Sub ComboBox1_Click()
' on récuper l'index
MsgBox ComboBox1.List(ComboBox1.ListIndex, 1)
End Sub

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
3
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
18 oct. 2005 à 10:54
C'est faisable, mais c'est une grosse bidouille. Tu n'as pas dans Excel la notion de Colonne liée comme dans ACCESS.

Je m'explique :
Classeur avec 2 feuilles.

Feuille 1 : Tes données.
Ce qui te donne un truc du genre
A1 : Nom1 B1 : Identifiant1
A2 : Nom1 B2 : Identifiant2
A3 : Nom3 B3 : Identifiant3

Tu sélectionnes la zone A1:A3 et tu lui donnes un nom (Menu insertion\Nom\Définir), par exemple ListeNoms.

Feuille 2 : Ton formulaire.
Tu vas sur la cellule où tu veux mettre ta combobox, par exemple B4.
Dans le menu Données\Validation, dans le premier onglet, tu choisis Autoriser Liste et comme source tu marques le nom de la zone (=ListeNoms dans mon exemple)

Tu as donc maintenant une cellule avec une liste déroulante correspondant à la liste des noms.

Il faut maintenant récupérer la correspondance :
Tu prends une cellule où tu veux la récupérer et tu lui donnes pour formule :
=RECHERCHEV(B4;Feuil1!A1:B3;2;FAUX)
Cette formule fait une recherche verticale :
La valeur recherchée est B4, c'est à dire le choix dans ta liste déroulante.
La matrice de recherche est ta feuille de données (Feuil1), dans la zone qui regroupe tous les noms et identifiants.
Le numéro de colonne où tu veux la correspondance est la 2ème.
FAUX désigne le fait que tu veuilles la valeur exacte, sinon, il peut te donner une valeur approchant (peu pratique dans les faits voir inutile à mon avis).

Cette méthode peut fonctionner quelque soit ton nombre d'arguments (tu pourrais avoir Nom, identifiant, Civilité, Sexe, Age, etc ...). La seule chose à modifier est le numéro de colonne que tu veux récupérer (2 à remplacer par 4, 6 ... ). Tu peux donc créer un formulaire qui se mette complètement à jour en fonction d'une combobox.

La seule contrainte de la fonction RechercheV, c'est qu'il faut que le critère recherché soit dans la première colonne (ici, le nom est forcément la 1ère colonne de ta matrice).

Voilà, plus qu'à adapter à ta sauce.
Molenn
0
Rejoignez-nous