Liste déroulante

cs_Tols Messages postés 16 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 19 juin 2006 - 8 juin 2006 à 17:16
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 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.

Bye. 

9 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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 
 

<small> Coloration syntaxique automatique [AFCK]</small>
       

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
cs_Tols Messages postés 16 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 19 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.

Merci encore, bye.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
8 juin 2006 à 23:04
Salut,

Julien, dans ce genre d'instruction que tu as mis :
Case "Chirurgie": Call CbEmploye.AddItem("Dupond, Yves")
^^ pourquoi tu mets Call ?

Merci de compléter mon instruction personnelle !

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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 ^^)

++
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
9 juin 2006 à 12:00
Salut,

> PCPT: Merci PCPT. Et pourquoi cette exception???

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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")

tu sais tout
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
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 !
0
Rejoignez-nous