ListBox dépendante

  • Initiateur de la discussion Jean-Francois
  • Date de début
J

Jean-Francois

Guest
Bonjour à tous,

J'ai crée un userform dans un programme vb, avec 3 combobox.
La source des listes déroulantes se trouve dans un autre classeur sous forme d'un tableau à 3 Colonnes.

Nom Prenom -lieu - équipe

j'aimerai que le choix d'une valeur dans la Combobox1 entraine automatiquement les valeurs des Combobox 2 et 3.

jusque ici ces choix je les faisais moi meme à partir de listes déroulantes où je piochais .. amis mtnt en ayant une base de données fiable j'aimerai que le choix se fasse automatiquement,

Pourriez vous m'aider pour ces insertions automatiques ?

Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To Workbooks('Base.xls').Sheets('Feuil1').Range('A1').End(xlDown).Row
Identite.AddItem Workbooks('Base.xls').Sheets('Feuil1').Cells(i, 1)
Next i

lieu.AddItem 'Saint Cloud'
lieu.AddItem 'Paris1'
lieu.AddItem 'Paris2' ' ....
equipe.AddItem ' benjamin1'
equipe.AddItem 'benjamin2'
equipe.Additem 'poussin 1' ' ...

End Sub
 
J

Jean-Francois

Guest
Non Laurent ce n'est pas le pb : en fait mon fichier ou se trouve ma base de données sera ouvert,

le pb k j'ai est que le choix de la combobox1 doit automatiquement provoquer celui de la combobox 2 et 3.

au liieu d'uitilser la méthode barbare de AddItem (cf le code dans mon précedent msg) , j'aimerai trouver un code qui permettra d'avoir les valeurs des combobox 2 et 3 directement apr déduction de la combobox1

Si il y a un preneur à ce pb de codage .Merci !
 

laurent45

XLDnaute Occasionnel
Re Jean-François,

La solution serait à mon avis de charger les 3 ComboBox avec ta base de données.
Avec ComboBox1.ColumnWidth=(largeur de ton texte);0pts;0pts,
ComboBox2.ColumnWidth=0pts;(largeur de ton texte);0pts,
et ComboBox3.ColumnWidth=0pts;0pts;(largeur de ton texte).

Ce n'est pas du code mais le détail des propriétés. Pour chaque ComboBox tu n'affiche que la colonne qui t'intéresses.

Ensuite, pour ta recherche, tu clique dans ta liste ComboBox1, la ligne qui t'intéresses. Et dans l'évènement Click :
Code:
Private Sub ComboBox1_Click()

ComboBox1.Column(0)=ComboBox2.Column(1)
ComboBox1.Column(0)=ComboBox3.Column(2)

End Sub

J'ai pas testé, mais c'est dans ce goût là. J'espère avoir répondu à ta question. Je m'emballe souvent, et même dans mes codes, je me perds de temps en temps.

@+

Message édité par: laurent45, à: 07/10/2005 14:21
 
J

Jean Francois

Guest
Y'as de l'idée effectivement ..

Lui faire comprendre d'abord de charger les 3 combobox avec ma base et de masquer que la colonne 1 pour la combobox1, la 2 pour la combobox2 et la 3 pour la dernière.

Mais comment lui dire prend les 3 colonnes en compte et plus une seule - j'ai essayé dans les propriétés Columncount=3

mais il ne m'affiche que la colonne 1 ..
 

Creepy

XLDnaute Accro
Bonjour le Forum, Jean-Francois,

Cette question de liste dépendante revient super souvent ! Il faut quand même garder à l'esprit qu'Ecel est un tableur fait pour la manipulation de chiffre. Même si je suis d'accord on peux faire beaucoup de choses avec Excel et VBA, il en reste pas moins que le tableur à des limites.

Par exemple Excel n'Excel pas(facile celle là :) ) dans la manipulation de chaine de texte et dans la gestion de bases de données au sens large du terme.

Faire une liste d'un liste par exemple est assez galère quoique possible :

Plusieurs solutions se proposent à toi :

1 - Créer une base de données Access et avec une petite requête SQL youpla c'est fait.

2 - si ton tableau est fixe donner des noms a tes selections et ensuite en fonction de la valeur de la combobox afficher les noms de zone en fonction de la selection de la précedente.

3 - Balayer à chaque fois tous tes enregistrements pour afficher dans ta combobox ceux correspondant au choix précédent, puis au 2 choix précédents pour la 3eme combobox etc .. Cette solution peut être vite longue si tu as beaucoup d'entrées et tu risques de perdre en ergonomie.

4 - Moi en général je me sers des filtres automatiques, je filtre en fonction e ma réponse précédente et ensuite j'affiche ce qui reste.

Voila dans les deux derniers cas cela te demandera pas mal de code, même si je suis d'accord ce n'est pas forcement très technique.

Bon courage

@+

Creepy

Message édité par: Creepy, à: 07/10/2005 16:03
 
J

Jean Francois

Guest
Ou lala le pb était tout simple ;-)

la solution 2 me semble la plus réalisable vu k ma liste est fixe ,

peux tu me préciser comment tu vois le code pour ca,

en tout cas merci de vous prendre la tete autant que moi !

J.F
 

Membres actuellement en ligne

Statistiques des forums

Discussions
314 450
Messages
2 109 726
Membres
110 552
dernier inscrit
jasson