[Excel 2013] Liste déroulante avancée

Résolu/Fermé
NoobExcel - 30 oct. 2014 à 14:44
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 31 oct. 2014 à 14:40
Bonjour,

Je travail sur un fichier Excel et j'aimerais avoir de l'aide dans la mesure du possible pour réaliser une liste déroulante un peu particulière.

J'ai une grille de données, avec une colonne contenant des chiffres (ID) et une colonne des mots. Je souhaiterais que la liste déroulante affiche les mots quand on déroule mais qu'une fois le choix fait, cela soit le chiffre qui est gardé dans la case.

Je sais que l'ont peut le faire en posant une combobox, j'ai réussi avec la recherche verticale et en posant une combobox, mais est t'il possible de réaliser cela avec les listes déroulantes classiques (celles qu'on trouve dans données > validation > critère de validation > autoriser > liste déroulante).

Je vous remercie d'avance, j'en ai vraiment besoin et j'ai beau chercher...

A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
30 oct. 2014 à 15:17
Bonjour,

Non, ce n'est pas possible.

Par contre, vous pouvez afficher ce numéro dans la cellule à côté.
Exemple :
en colonne A vos noms
en colonne B vos ID

en D2 : votre liste déroulante,

en E2 saisir la formule : =SI(D2="";"";RECHERCHEV(D2;A1:B1000;2;FAUX))
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
30 oct. 2014 à 15:20
Complément :
Si en colonne A vous avez les ID et en colonne B les noms, la recherchev ne fonctionnera pas.
Dans ce cas, en E2, utilisez la formule :
=SI(D2="";"";INDEX(A1:B21;EQUIV(D2;B1:B21;0);1))
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
31 oct. 2014 à 11:53
Bon...
Clic droit sur l'onglet de la feuille concernée, copiez-collez ce code :
Private Sub Worksheet_Change(ByVal Target As Range)
'Limitation de l'exécution du code à la plage de cellules : D2:Dxxx
If Target.Column <> 4 Or Target.Row < 2 Or Target = "" Or Target.Count > 1 Then Exit Sub
Dim Trouve As Range
Set Trouve = Range("A3:A23").Cells.Find(Target.Value)
Application.EnableEvents = False
If Not Trouve Is Nothing Then Target = Trouve.Offset(0, 1) Else Target = "Erreur"
Application.EnableEvents = True
End Sub


Et testez...
1
Cela fonctionne, merci beaucoup =).
Ne connaissant pas ce langage j'ai une question: si je veux répéter l'opération avec une autre colonne à liste déroulante (avec d'autres données), je doit l'écrire dans cette macro ou en faire une autre ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
31 oct. 2014 à 14:11
Tu dois modifier cette macro. En effet elle utilise un événement de feuille : Worksheet_Change, événement unique à chaque feuille...
0
ok merci, dernière question, dans ce cas, les données et les listes sot sur la meme feuilles, tu as donc mis "A3:A23" pour la liste. Que mettre dans cette chaîne de caractère dans le cas où les données de la liste sont dans ue feuille à part ?
j'ai essayé "data!A3:A23" mais il y a une erreur sur la ligne.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 31/10/2014 à 14:37
Remplacer :
Range("A3:A23")

Par :
Sheets("data").Range("A3:A23")
0
Parfait, je te remercie indéfiniment pour ton aide.
0
Merci de vos réponse, n'y a t'il pas un moyen de répondre à ma demande par le biais de macro ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
31 oct. 2014 à 07:53
Salut,

Que veux tu que fasses la macro dans ce cas?

Un choix est-il définitif?
J'entends pas là, qu'une fois que ton choix est fait dans la validation de données, celle-ci est supprimée de la cellule et la valeur est remplacée par le chiffre. ça c'est faisable, mais est-ce bien ce que tu souhaites?
0
C'est exactement ça, ce sont les ID qui doivent être dans la cellule à la fin, mais choisir un ID dans une liste n'est pas parlant, c'est pour cela qu'il faut que la liste contienne les mots lors de la sélection.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
31 oct. 2014 à 08:45
Deux choses :
1- tu ne réponds pas à ma question : Un choix est-il définitif?

2- Il va nous falloir un fichier de travail. Pour cela, anonymise ton fichier et transmet le nous :
Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com

Va sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...
0
1- Un choix n'est pas définitif

2 - voici mon fichier: http://www.cjoint.com/14oc/DJFkUwRXgAB.htm
A: nom de l'item
B: ID de l'item
D: liste déroulate
Le but est donc que les liste déroulantes (D) listent les items (A) mais que la case deviennent l'ID (B) après la sélection dans la liste.

Merci pour ton implication.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
31 oct. 2014 à 11:07
Le but est donc que les liste déroulantes (D) listent les items (A) mais que la case deviennent l'ID (B) après la sélection dans la liste.
ça tout le monde l'aura compris. Mais comme le choix n'est pas définitif, tu souhaiterais que lorsque l'utilisateur clic à nouveau sur une des cellules, la liste de choix réapparaisse?
0