Actuellement, j'apprends les formulaires! Et j'aurais besoin d'un petit coup de pouce. La question est en bleu.
Dans le fichier ci-joint, sur l'onglet "SOMMAIRE", lorsque je clic sur le bouton, mon UserForm s'ouvre.
J'ai une liste de choix pour le choix du nom -> fonctionne à la perfection
J'ai une liste de choix pour le choix du prénom -> fonctionne à la perfection
Ma question concerne :
La zone "heure" en blanc et la zone "minute" en blanc. Ces informations sont là titre informatif! C'est le temps que fais le salarié par semaine. Ces zones doivent se renseigner automatiquement, en fonction :
-> du nom saisie au dessus
-> du prénom saisie au dessus
-> et le temps (heure+minute) il doit les prendre sur l'onglet "liste du personnel".
Ces données ne doivent pas être modifiable par l'utilisateur du formulaire.
Quoi utiliser? Une zone "label", une zone "ListBox", ...? Comment dois-je faire pour les alimenter?
Il y a une seconde zone "heures" en bleu et une seconde zone "minutes" en bleu. C'est ICI que l'utilisateur doit saisir les nouveaux horaires
-> ça fonctionne à la perfection
Toutes les données proviennent de l'onglet "liste du personnel" et lorsqu'on valide le formulaire, il écrase l'ancienne donnée pour y mettre à la place la nouvelle
-> ça fonctionne à la perfection
Si je n'ai pas été assez clair, n'hésitez pas à me demander plus de précision.
Merci d'avance à vous.
Edition : je profite de l'occasion pour demander : Me.ListBox... ou NomFormulaire.ListBox...
cela semble faire la même chose! Qu'elle est la nuance entre les deux?
Pourquoi être obligé de sélectionner le nom et le prénom? Il serait peut-être plus simple de proposer un combo proposant l'identifiant complet? Ca éviterait les erreurs de sélection.
Me.ListBox fait référence au contrôle ListBox se trouvant effectivement sur le formulaire actif
Pour faire référence à un contrôle ListBox situé sur un autre formulaire, il faut utiliser NomFormulaire.ListBox
liste de choix : NOM+Prénom - une fois sélection : q l nom
Bonjour Boisgontier, Joss56,
Joss56 à dit:
Pourquoi être obligé de sélectionner le nom et le prénom? Il serait peut-être plus simple de proposer un combo proposant l'identifiant complet? Ca éviterait les erreurs de sélection.
J'avais mis des listes de choix pour éviter les erreurs de saisie, mais effectivement, je n'ai pas pensé aux erreurs de sélection! De plus, je ne savais pas faire!
Merci donc à Boisgontier d'avoir répondu à ma question ET d'avoir mis cette astuce sympa en place sur mon fichier.
Merci également pour vos explications sur le Me.... et NomFormulaire...
Je me doutais que c'était ça, mais je préféré en être sur!
Concernant la ComboBox1, lorsqu'on clic sur la flèche bas, dans la liste déroulante, on voit le NOM+Prénom, mais une fois qu'on a sélectionné un choix, on ne voit plus que le NOM!
Il serait possible d'avoir NOM+Prénom?
J'ai essayé divers truc, mais aucun ne fonctionne! Vous avez une solution?
Comme vous avez pu le voir, j'ai créé une macro pour modifier le temps de travail d'un salarié via un UserForm.
Mais j'ai également la même chose pour :
-> créer un nouveau salarié
-> supprimer un salarié
TOUT fonctionne à la perfection jusqu'à ce que l'utilisateur décide de supprimer le 1er salarié de la liste!!!!
Pour mémoire, pour alimenter la combobox où figure le NOM + Prénom, nous avons fait : "Insertion" / "Noms" / "Définir" / dans la zone "fait référence à" nous avons mis
Code:
=DECALER('Liste du Personnel'!$A$[COLOR="Red"][B]2[/B][/COLOR];;;NBVAL('Liste du Personnel'!$A:$A)-1)
Or lorsqu'on supprimer le 1er salarié de la liste, c'est à dire celui se trouvant sur la 2nd ligne.
Cette formule se transforme de la façon suivante :
Code:
=DECALER('Liste du Personnel'![COLOR="Red"][B]#REF[/B][/COLOR]!;;;NBVAL('Liste du Personnel'!$A:$A)-1)
Évidement, après ça fonctionne moins bien!
Connaissait vous une parade?
Pour essayer de trouver une solution, j'ai extrait le problème : 'Liste du Personnel'!$A$2
J'ai écris cette formule dans une cellule, puis j'ai cherché une autre formule pouvant me donner la même chose, mais qui ne bougerais pas en fonction des créations/suppressions de lignes.
J'ai pensé à la fonction ADRESSE()
Soit
=ADRESSE(2;1;;;"Liste du Personnel")
2 et 1 étant des chiffres, lors de création, suppression de ligne, ça ne devrait pas bouger, non?
Lorsque j'écris cela dans une cellule j'obtiens :
'Liste du Personnel'!$A$2
Ce qui vous en conviendrais est franchement similaire non?
Pourtant lorsque je l'insère dans la formule ainsi :
Code:
=DECALER([COLOR="Red"]ADRESSE(2;1;;;"Liste du Personnel")[/COLOR];;;NBVAL('Liste du Personnel'!$A:$A)-1)
ou ainsi :
Code:
=DECALER([COLOR="Red"]&=ADRESSE(2;1;;;"Liste du Personnel")&[/COLOR];;;NBVAL('Liste du Personnel'!$A:$A)-1)
ou ainsi :
Code:
=DECALER([COLOR="Red"]&ADRESSE(2;1;;;"Liste du Personnel")&[/COLOR];;;NBVAL('Liste du Personnel'!$A:$A)-1)
Lors de la validation de la formule, il n'en veut pas!
Merci beaucoup pour ta solution! Je suis vraiment coui... j'aurais dû y penser!!!!
Pendant que tu étais ici à m'aider, j'ai trouvé ceci dans l'aide Excel :
"si vous souhaitez que la formule fasse toujours référence à la même cellule, même si la ligne au-dessus de la cellule est supprimée ou si la cellule est déplacée, utilisez la fonction de feuille de calcul INDIRECT"
Ce qui semble étrangement coller avec mes symptômes! Reste plus qu'à décortiquer cette fonction que j'utilise très très rarement, et voir si en forcant un peu, elle veuille bien se glisser dans ma formule.
Sinon, je me rabattrais sur ta solution. Seul inconvénient, je devrais la répéter autant de fois que j'en ai besoin (environ 6 fois - à moins que je fasse une sous-macro?!?) et je ne suis pas trop à l'aise avec les référencements de cellule sous la forme : R2C1 ou offset (c'est mon talon d'achille).
Je préfère nettement Cells(ligne, Colonne) ou Range("A:"& Ligne) car où qu'on soit avant, c'est tjrs juste!
Merci encore à toi, vais dormir un peu et repenser à tout cela demain soir.
Finalement, j'ai opté pour la solution de Boisgontier, m'évitant ainsi de retoucher mon code (du moins pour cette partie, car le projet n'est pas encore fini!).
Bonne soirée à tous.
Espérant pouvoir vous rendre la pareil un de ces 4!