XL 2019 Liste déroulante à contenu variable (VBA)

LeForain

XLDnaute Junior
Bonjour,

Sur le fichier que je vous joins, je compte faire un formulaire.
Les infos qui seront complétées sur le formulaire devront être retranscrites sur la page BASE.

Le problème est le suivant : le formulaire pourra être utilisé par 3 postes différents.
J'ai créé 3 pages (1 par poste) dans lesquelles j'ai listé les membres de chaque poste.

Dans mon formulaire, j'ai créé 3 ComboBox différentes mais je ne suis pas satisfait du résultat : je voudrais dans un premier temps :
- Choisir le poste en question
- Avoir une deuxième ComboBox avec les noms du personnel qui s'afficheraient en fonction du poste qui a été choisi.

Pouvez-vous m'aider dans cette démarche.

Merci bien :D
 

Pièces jointes

  • Version simple2.xlsm
    39.9 KB · Affichages: 7
Solution
Quelques modifs
début des plages nommées

détection de la ligne lnum


Quand tu reset la base.. ne surtout pas DELETE la première ligne (ligne2), mais simplement effacer..
un Delete provoque la perte de reference à la ligne 2 dans les plages nommées

vgendron

XLDnaute Barbatruc
Hello
Comme ton formulaire est illisible chez moi (trop petit), j'ai fait un autre formulaire avec deux Combo pour te montrer comment les alimenter

pas besoin de faire 3 feuilles pour avec 3 listes==> il vaut mieux tout mettre sur la meme feuille
pas besoin non plus de définir tout un tas de plages nommées: VBA est capable de trouver les infos

j'ai juste défini une plage nommée "Liste_Postes" pour alimenter le premier combo
ensuite; quand un poste est selectionné, la macro récupère la listes des noms sous le poste pour alimenter le deuxième combo
je te laisse aller voir le code
 

Pièces jointes

  • Version simple2.xlsm
    36 KB · Affichages: 6

vgendron

XLDnaute Barbatruc
je viens d'intégrer les deux combobox dans ton formulaire

apparemment, tu n'as pas tout mis: il manque des controls (options bouton dont le nom commence par chb??)
une partie du code qui teste l'activation d'un option bouton fait sortir de la macro ==> j'ai donc commenté cette partie
 

Pièces jointes

  • Version simple3.xlsm
    36.9 KB · Affichages: 3

LeForain

XLDnaute Junior
Bonjour @vgendron ,

Waw !! Merci beaucoup !!!
C'est vraiment ce que je souhaitais faire et je n'aurais pas du tout su utiliser le code dont tu t'es servi.
Je le retiens pour les prochaines applications :)

J'ai juste modifié pour que le nom qui s'affiche dans BASE soit celui de l'employé.

Effectivement je m'étais lancé dans des controls. Le but était de contrôler qu'une case au moins était sélectionnée, et si ce n'est pas le cas, afficher un message "Sélectionner le poste de travail".
De même pour toutes les informations afin que la personne ne puisse pas valider le formulaire si une information est manquante.
Mais à chaque essai, je faisais tout planter, donc j'ai vite abandonné ^^


Juste une question :
Dans visualiser le code, de la page Listes, j'avais fait en sorte que si la liste des noms de personnes est changée (ce qui va arriver très très régulièrement), les nouveaux noms qui seront à la suite ou intercalés entre, fassent toujours partie de la liste et apparaissent donc dans le formulaire.
Comme les 3 listes font désormais partie de la même feuille, ma formule ne fonctionne plus et je ne sais pas comment je peux faire pour distinguer les 3 listes quand elles sont sur la même feuille.

Merci de ton aide précieuse !
 

Pièces jointes

  • Version simple4.xlsm
    38.5 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
Pour définir une plage nommée de façon dynamique, il suffit d'utiliser la fonction "Decaler" dans le gestionnaire de nom
==> pas la peine de passer par ta ligne de code dans la feuille "liste"

va voir le gestionnaire de nom, j'ai mis la formule pour la plage PdG
j'ai utilisé le meme principe pour la plage "Liste_Postes"
 

Pièces jointes

  • Version simple4.xlsm
    31.2 KB · Affichages: 3

LeForain

XLDnaute Junior
Bonjour @vgendron,

Génial la fonction Déclarer ! Je ne connaissais pas !

Merci à toi pour ton temps ! :D

J'ai fait quelques modifications sur le fichier et surtout j'ai rajouté les boutons pour indiquer le temps de production.

Ce que je cherche à faire, c'est de réinitialiser le formulaire après une saisie, pour qu'il soit directement prêt pour la saisie suivante.
Est-ce qu'il existe un cde qui réinitialise tout le formulaire d'un coup ?

Merci :D
 

Pièces jointes

  • Version simple5.xlsm
    41.2 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
Hello
il n'y a pas de bouton "reset" qui efface tout un formulaire.. par contre.... il y a l'évènement _initialize. qui est utilisé au démarrage avant l'affichage du formulaire..
cet évènement peut etre rappelé par le code associé au bouton validé..
suffit d'initialiser les controles dans cet évènement initialize..

ou alors. écrire une autre macro "RAZ" qui tu associes à un nouveau bouton. mais.. à moins de vouloir faire un RAZ "différent" de ce qui est fait dans l'intialize. ca n'a pas trop de sens..

voir pj
 

Pièces jointes

  • Version simple5.xlsm
    35.7 KB · Affichages: 2

LeForain

XLDnaute Junior
Oh génial ! Merci encore une fois !!

Je ne sais pas quelle taille à le formulaire chez toi quand tu l'affiches, chez moi je remarque qu'à chaque fois que je le relance, il a une taille différente !
Parfois c'est bien grand et tout est affiché et des fois il se met en tout petit et les mots sont coupés, le calendrier est inaccessible,...

J'ai essayé de rentrer la taille manuellement dans les propriétés du formulaire mais ça continue de varier ... étrange !
 

LeForain

XLDnaute Junior
Je suis content car tout fonctionne à peu près comme je le souhaitais grâce à ton aide @vgendron !

Je me posais juste la question suivante :
Etant donné que je compte utiliser cet Excel pour différentes commandes à l'avenir, la liste des pièces sous l'onglet désignation va être amenée à changer régulièrement. Pour cela j'ai utilisé à nouveau une fonction DECALER comme tu me l'as appris, de la même manière que tu l'as fait pour la liste du personnel.

Par contre, je vais à présent créer mes formules pour remplir automatiquement le tableau de la feuille RESULTATS : Je vais aller chercher dans la feuille BASE tous les cellules dans lesquelles j'ai la même pièce pour additionner leurs temps.
Seulement, pour cela, je comptais utiliser :

=NB.SI('BASE'!$D$2:$D$1320;"*Piece 1*")

Or le résultat est un nombre de fois que le "Pièce 1" apparait et non une addition des temps liés à Pièce 1.

De plus, vu que je vais changer régulièrement la liste des pièces sous l'onglet désignation, avec ce genre de formules, je vais devoir systématiquement tout réécrire car les dénominations dans les cellules ne seront pas les mêmes ...

Si tu as une idée qui pourrait fonctionner dans ce cas :)
 

LeForain

XLDnaute Junior
Je suis en train de finaliser le fichier et je me sers notamment de SOMMEPROD pour aller chercher le nombre d'heures que représente la partie couture pour la Pièce 1 par exemple.

Je pensais utiliser
=SOMMEPROD((D5=Element)*("Couture"=PosteDeTravail))

Mais rien n'en ressort. Aurais-e fais une erreur ?
 

vgendron

XLDnaute Barbatruc
ca dépend de comment tu as défini tes plages nommées
peut etre manque t il un élement dans ta formule..
de ce que j'imagine.. tu veux les lignes dont les critères "Element" et Poste de travail" sont vérifiés.. mais. il manque la colonne de ce que tu veux compter..

Comme je n'ai pas ton nouveau fichier, je ne peux pas t'en dire plus
 

Discussions similaires

Réponses
8
Affichages
171

Statistiques des forums

Discussions
312 225
Messages
2 086 412
Membres
103 202
dernier inscrit
Claire2BM