cs_Tols
Messages postés16Date d'inscriptionmercredi 3 mai 2006StatutMembreDernière intervention19 juin 2006
-
8 juin 2006 à 17:16
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
10 juin 2006 à 14:47
Bonjour à tous.
je n'ai pas trouvé de sujet réellement similaire à mon souci, peut-être un seul, mais sans réponse.
Je me permets donc de reposter ici mon problème.
Je doit réaliser un planning d'une clinique comportant plusieurs services contenant eux-mêmes plusieurs employés.
Donc en quelques lignes, j'aimerai à partir d'une première 'Liste déroulante' changer le contenu d'une deuxieme.
Par exemple en choisissant un service (dans une liste de services) j'aimerai pouvoir afficher dans une autre cellule la seconde 'Liste déroulante' contenant les employés de ce service.
J'ai essayé plusieurs méthode sans succès.
Et je souhaiterai en l'occurance (mais c'est un autre problème), pouvoir ducoup afficher les horaires concernant la personne selectionnée.
J'espère m'être fait comprendre :°
Merci d'avance pour les conseils que vous pourraient m'apporter.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 8 juin 2006 à 17:33
Salut,
Tu n'as vraiment rien trouve, ETONNANT;... enfin bon
Place deux ComboBox dans ton Form que tu renomme CbServices et CbEmploye
ensuite place ce code
Il faudra surement l'adapter mais le concept y est
Private Sub CbEmploye_Click()
'Recupère ICI les horaires correspondant a l'employ semectionne
End Sub
Private Sub CbService_Click()
Call CbEmploye.Clear
'Ajouter ici tout tes services (ici j en ai mis trois pour l'exemple)
'ais vu que je ne sais pas d'ou viendront tes employes
' peu etre faudra t il modifier
Select Case Service
Case "Chirurgie": Call CbEmploye.AddItem("Dupond, Yves")
Call CbEmploye.AddItem("Durand, Jean")
Call CbEmploye.AddItem("Venl, Paul")
Case "Urgences": Call CbEmploye.AddItem("poilu, Pierre")
Call CbEmploye.AddItem("Toto, Jean")
Case "Pédiatrie": Call CbEmploye.AddItem("Maillet, henri")
End Select
CbEmploye.ListIndex = 0
End Sub
Private Sub Form_Activate()
'Ajouter ici tout tes services (ici j en ai mis trois pour l'exemple)
'ais vu que je ne sais pas d'ou viendront tes service
' peu etre faudra t il modifier
Call CbService.AddItem("Chirurgie")
Call CbService.AddItem("Urgences")
Call CbService.AddItem("Pédiatrie")
CbService.ListIndex = 0
End Sub
cs_Tols
Messages postés16Date d'inscriptionmercredi 3 mai 2006StatutMembreDernière intervention19 juin 2006 8 juin 2006 à 17:55
Salut jrivet, et merci de répondre si vite !
Effectivement, je n'ai pas trouvé beaucoup de solutions concernant non pas des combobox dans un userform, mais des liste déroulante directement dans une cellule.
En gros, le choix d'une cellule agirait sur la liste déroulante de l'autre.
Enfin, ton code m'a éclairci un peu, j'opterai sans doute pour une solution comme la tienne si mon problème persiste.
Je vais tater du Vb un peu ce soir et je viendrai répondre demain.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 9 juin 2006 à 08:54
Salut,
> mortalino: En fait c'est une habitude que j'ai prise, je trouve que les appels de procédure sont plus "propre" sous la forme Call + Parenthèses autour des argument. TOUT SIMPLEMENT.
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
Vous n’avez pas trouvé la réponse que vous recherchez ?
kalobit
Messages postés169Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention 7 avril 20082 9 juin 2006 à 11:06
yop
Pour jrivet,
call cb1.additem(....) n'est pas une procédure mais une méthode de l'objet cb1. donc inutile de faire appel à call.
Bon pour revenir à la question de Tols, c'est possible de faire ce que tu veux et je peux te proposer deux méthodes :
1 - En utilisant DECALER()
Cette méthode est compliquée mais facile d'entretien
pour celà, tu dois créer un tableau de référence de tes listes avec les décalages à appliquer qui seront récupérer par recherchev par exemple
voici un exemple :
ensuite, il faut écrire les formules de validation pour les listes de choix.
ça donne qqc comme ça :
=SI(C3<>"";DECALER($F$3;RECHERCHEV(C3;$F$4:$I$6;2;0);RECHERCHEV(C3;$F$4:$I$6;3;0);RECHERCHEV(C3;$F$4:$I$6;4;0);1);"séléctionner le service")
Avec C3 correspondant à la valeur de la première liste (ici service1)
F3 correspond à la cellule de départ pour le décalage. j'ai choisi l'entête de la 4ème colonne, à savoir ici "service".
Le choix de cette référence détermine les valeurs deu tableau de décalage
F4:I6 reprend le tableau de décalage de la première liste
pour la fonction décaler, voici les arguments
decaler( Cellule de référence;nombre de ligne, nombre de colonne, hauteur, largeur)
Cette fonction renvoi une plage de cellule dont les valeur seront retournées par la liste
2 - Utiliser indirect et les plages nomées :
Cette méthode est franchement 100 fois plus simple mais neccessite de redéfinir les plages nommées à chaque modification
il suffit de lister les diférentes posibilités dans différentes plages qui seront nomées comme les valeurs de la liste précedente.
Par exemple pour avoir les personne de mon premier service (service1), je liste dans une plage ces personnes et je nomme la plage "service1"
dans ma première liste, je choisi service1
la deuxième liste fait référence à la plage qui porte le nom de la valeur de ma première liste
donc service1 et me propose donc la liste du personnel du service1
Voici un exemple en image :
dans la liste 2, la formule indirect(c3) renvoie donc c10:c12
dans la liste 3, la formule indirect(d3) renvoi donc f10:f12
et voilà, le tour est joué
j'éspère que j'ai pas été trop flou dans mes propos.
Hésite pas me contacter si tu veux que je t'envoie des exemples
@++++
[mailto:K@lobit K@lobit] < Ne pas clicker ici
Mon Site < Mais ici
Je cherche des personnes pour développer un site dédié à excel, si vous êtes partant pour m'aider, merci de me laisser un MP
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 9 juin 2006 à 11:55
salut,
une méthode est une fonction ou une procédure publique d'un objet.
Call est plus qu'acceptable (perso je fais pareil sauf exceptions dont AddItem ^^)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 9 juin 2006 à 12:22
par exemple tu utilises une ListView. très rapidement tu te dis "j'vais me faire une petite classe pour ajouter mes lignes/colonnes plus facilement", et le nom qui te vient en tête (pour moi en tout cas), c'est additem....
et pareil pour le combo, etc.... sauf que pour ta classe, ton additem va retourner un booléen (réussite) par tes tests, bref... tu te retrouves vite avec des habitudes à causes des noms de méthodes prises comme procédures alors que certaines sont des fonctions.
j'ai donc mes exceptions pour ne pas oublier que parfois çà ne sera pas
Call Obj.AddItem("chaîne") ou
Obj.AddItem "chaîne" mais
bRet = Obj.AddItem("chaîne")
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 10 juin 2006 à 14:47
Ah OK !
Merci pour l'infos, je ne savais pas que ca fonctionnait comme ça.
Ben moi j'ai pris l'habitude de n'utiliser Call que pour appeler des procédures Sub. c'est peut-etre dût au fait que j'ai appris vba avant VB.
@++
--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !