Liste déroulante avec le développeur contrôle de formulaire

Fermé
cerebrox Messages postés 16 Date d'inscription vendredi 11 septembre 2015 Statut Membre Dernière intervention 12 octobre 2015 - 5 oct. 2015 à 19:47
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 - 12 oct. 2015 à 11:00
Bonjour,

J'essaye de faire une liste déroulante et de lui associer des fonctions de recherche.


Je sais déjà faire une liste déroulante en y associant la fonction rechercher
en faisant : onglet donnée/validation des données puis et en sélectionnant ma liste

Ensuite j'utilise la fonction rechercher :
RECHERCHEV(cellule ou il y a la liste;zone du tableau;colonne)

ça marche très bien

Maintenant j'essaye de faire la même chose mais avec le développeur. (j'ai envie d'utiliser leur beau display de liste déroulante)
Je sélectionne la liste dans le développeur, je la trace puis je lui affecte les colonnes que je désire pour ma liste (on va dire de A1 à A10).
Ensuite je sélectionne une case (D1) qui recevra le chiffre de 1 à 10 selon la valeur sélectionnée dans la liste.
je rentre des données en face de mes colonne A1 à A10 (disons en B et C)

C'est ensuite que j'ai un problème, lorsque je fais ma formule de recherche :

Je souhaite, par exemple, lorsque je sélectionne une valeur de A1 à A10, avoir la donnée dans la deuxième colonne qui s'affiche.
Je fais donc :

RECHERCHEV=(D1;A1:C10;2)


Et à ce moment la ça ne marche pas!! Je reçois un message d'erreur #N/A!
Ça fait des heures que j'essaye, je ne trouve pas d'ou peut venir mon erreur!

Merci beaucoup pour votre aide!

3 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
5 oct. 2015 à 20:33
Bonjour,

Voici un exemple avec 3 méthodes possibles :
- Contrôle ActiveX associé à une procédure
- Contrôle de formulaire lié à une cellule
- Contrôle de formulaire associé à une macro.

https://www.cjoint.com/c/EJfsEuwe70I


A+
1
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
6 oct. 2015 à 11:29
Bonjour,

Je te conseille d'opter pour le contrôle ActiveX qui t'offrira plus de possibilités que le contrôle de formulaire.

Pour tes listes en cascade, tu trouveras ton bonheur ici :
http://boisgontierjacques.free.fr/pages_site/listes_cascade.htm#DVcascadeForm

Si tu as besoin d'explications, n'hésites pas à revenir à la charge :D
Éventuellement, tu peux joindre un fichier exemple avec quelques données de base et une ébauche du résultat attendu. Pour l'instant, ton projet est trop abstrait.

A+
1
cerebrox Messages postés 16 Date d'inscription vendredi 11 septembre 2015 Statut Membre Dernière intervention 12 octobre 2015
7 oct. 2015 à 12:20
Merci Gyrus,

Voici un fichier excel avec les commentaires de ce que je veux réaliser à l'intérieur.

Je souhaiterais faire la double liste avec le formulaire + macro mais j'avoue être novice dans la programmation, (je n'ai pas réussi à reproduire la macro que tu as faite dans le message précédent, il doit y avoir une étape voir plusieurs que je rate...en gros je me suis contenté de recopier le code mais j'imagine que c'est beaucoup plus subtile que ça)

https://www.cjoint.com/c/EJhkrJHbwOd

Merci
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > cerebrox Messages postés 16 Date d'inscription vendredi 11 septembre 2015 Statut Membre Dernière intervention 12 octobre 2015
7 oct. 2015 à 14:35
Voici un exemple de ce que tu peux faire avec une Userform (formulaire évolué).
https://www.cjoint.com/c/EJhmIA4lTtI

A+
0
cerebrox Messages postés 16 Date d'inscription vendredi 11 septembre 2015 Statut Membre Dernière intervention 12 octobre 2015
8 oct. 2015 à 13:22
Merci bien Gyrus! J'ai observé ton programme et j'essaye de le décrypter.
J'ai déjà des questions :

Y a t'il un intérêt à faire une fonction recherche comme tu l'as fait plutôt que d'utiliser un bouton classique pour faire apparaître l'userform?

Je n'arrive pas à comprendre comment tu définis la listes à laquelle tu fais appel (Me.CB_Machine.ListIndex + 3) ??? je ne la vois nul part et du coup je coince.


Merci d'avance
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > cerebrox Messages postés 16 Date d'inscription vendredi 11 septembre 2015 Statut Membre Dernière intervention 12 octobre 2015
8 oct. 2015 à 13:53
Y a t'il un intérêt à faire une fonction recherche comme tu l'as fait plutôt que d'utiliser un bouton classique pour faire apparaître l'userform?

J'ai du mal à saisir le sens de ta question car j'ai justement utilisé un bouton classique (controle de formulaire) pour commander l'affichage de l'USF.
Ce bouton de commande est associé à la procédure Recherche (macro visible sous Modules/Module1).

Je n'arrive pas à comprendre comment tu définis la listes à laquelle tu fais appel (Me.CB_Machine.ListIndex + 3) ??? je ne la vois nul part et du coup je coince.

Me.CB_Machine est la ComboBox présente dans l'USF (Me).
ListIndex identifie l'élément sélectionné , le premier index ayant pour valeur 0, le deuxième 1, etc.
La ComboBox ayant été renseignée avec la liste contenue dans la plage Base!A3:A6 , la ligne de la base qui correspond à l'élément de la ComboBox peut être trouvée avec la relation :
Ligne = Me.CB_Machine.ListIndex + 3
Exemple :
Index 0 <=> Ligne 3 ( MACHINE A)
Index 1 <=> Ligne 4 ( MACHINE B)
etc.

A+
0
cerebrox Messages postés 16 Date d'inscription vendredi 11 septembre 2015 Statut Membre Dernière intervention 12 octobre 2015
9 oct. 2015 à 10:41
Merci!
Voici un fichier avec une tentative (désespérée lol).

https://www.cjoint.com/c/EJjiNvtgSwd

Je galère vraiment, je n'arrive même pas à le faire sur la feuille de base sans formulaire (ce que je voulais faire à la base).

Pour le bouton tu verras comment j'ai fait, en gros j'ai utilisé un bouton activex associé à la commande show, c'est pour ça que je te posais la question.

Private Sub CommandButton21_Click()

UserForm1.Show

End Sub

Pour la première commande; entrer la donnée du coût en fonction de la liste déroulante j'ai fait :
Private Sub ComboBox1_Change()
Range("M7").Value = Cells(ComboBox1.ListIndex + 3, 2)
End Sub

M7 est la case visée que je veux remplir
Si j'ai bien compris 3 me donne la 3ème ligne et 2 la deuxième colonne

C'est surement faux car ça ne marche pas (lol mon unique certitude dans ce mail)


Je vois que pour ton formulaire tu définis tes listes dans une commande qui s'appelle Initialize.

Cette commande est elle uniquement spécifique aux formulaires?

Sont but est-il uniquement de remplir les 2 listes déroulantes?

Merci et désolé d'être un boulet.
0
cerebrox Messages postés 16 Date d'inscription vendredi 11 septembre 2015 Statut Membre Dernière intervention 12 octobre 2015
6 oct. 2015 à 06:16
Bonjour Gyrus,

Un grand merci pour avoir pris cette peine, ça m'aide énormément.

Y a t'il un intérêt quelconque à utiliser une méthode plutôt qu'une autre? (j'en utilisais moi même une différente des 3 proposées)


Quelle méthode dois-je utiliser si je veux réaliser cela :

https://forums.commentcamarche.net/forum/affich-32610410-liste-deroulante-en-fonction-d-une-autre-liste-deroulante


En effet je bloque sur la réalisation d'une liste en fonction d'une autre liste et je choisirai la méthode me permettant de réaliser cela.

Pour la 3 ème version avec VBA, j'ai essayé de la reproduire sur une autre feuille mais lorsque je rentre la formule dans VBA puis retourne sur ma feuille rien ne se produit (la liste déroulante ne se remplie pas et n'exécute pas d'action dans la case saisie (K9) pour toi).
Y a t'il une activation ou quelque chose dans ce genre pour valider la formule?

Comment dois-je ajouter une autre formule, si je veux par exemple ajouter une cible autre que K9 dans un range "C" ou par exemple un range sur une autre feuille.
Pour rajouter une ligne, dois-je recopier la formule complète (de sub to end sub)

Sub Macro_Formulaire()
With Feuil1
.Range("K9").Value = .Range("B" & .Shapes("Zone combinée 3").ControlFormat.ListIndex)
End With
End Sub

Sub Macro_Formulaire()
With Feuil1
.Range("K10").Value = .Range("C" & .Shapes("Zone combinée 3").ControlFormat.ListIndex)
End With
End Sub

Et comment faire si C est sur une autre feuille?


Un immense merci si tu pouvais m'aiguiller!
0