Comment initialiser une listbox à partir d'une autre listbox

tkd2009

XLDnaute Nouveau
Bonjour,

Je suis en train de créer un userform à choix multiple avec une listbox aussi à choix multiple.
A l'appel du userform, la listbox1 s'initialise avec plusieurs valeurs parmi lesquelles l'utilisateur fait un choix qui peut être multiple.
J'aimerai que si une valeur particulière est selectionnée, cela initialise une lisbox2 sur le même userform avec des valeurs défini pour offrir un complément de choix et si la valeur est désélectionnée que cette listbox2 se vide.

Je n'arrive pas à formuler l'idée: if Listbox1.SelectedItem = "valeur A" then Listbox2 AddItem "valeurB"

Pouvez vous m'aider?

Une autre solution serait de remplir la listbox2 en même temps que la Listbox1 en "grisant" les valeurs et rendre ces valeurs actives si on sélectionne la bonne donnée dans la listbox1 mais j'ai pas la moindre idée de comment faire....

Merci.
 

tkd2009

XLDnaute Nouveau
Re : Comment initialiser une listbox à partir d'une autre listbox

Merci pour la réponse, j'avais effectivement lu l'excellente page de JB mais comme mes valeurs ne sont pas dans la feuille excel mais figées dans le userform j'avais passé mon chemin.
Au final c'est peut être pas très différent, il faudrait alimenter la première collection manuellement je suppose.
Je pense aussi qu'il me manquait l'élément "Listbox_Change()"

Pour info voici mon fichier de travail...
La finalité est d'extraire des données d'une base Access à partir d'une liste d'individu en colonne A
La listbox1 correspondrait aux champs de la table principale et les listbox 2,3,4 les champs des tables secondaires si il y a besoin.

Merci en tous cas ;)
 

Pièces jointes

  • Test Listbox.xls
    43.5 KB · Affichages: 57
  • Test Listbox.xls
    43.5 KB · Affichages: 56
  • Test Listbox.xls
    43.5 KB · Affichages: 61

tkd2009

XLDnaute Nouveau
Re : Comment initialiser une listbox à partir d'une autre listbox

Finalement je m'en suis sorti en adaptant la 2 partie du code de JB:

initialisation de la Listbox1 manuelle:
Code:
Private Sub UserForm_Initialize()
    
    ListBox1.AddItem "Code_Espèce"
    ListBox1.AddItem "Espèce-à-Id"
    ListBox1.AddItem "Info_connue_sp"
    ListBox1.AddItem "Piège"
    ListBox1.AddItem "Code_lieux"
    ListBox1.AddItem "Date_récolte_individus (jour)"
    ListBox1.AddItem "Date_récolte_individus (mois)"
    ListBox1.AddItem "Date_récolte_individus (année)"
end sub
puis conditions (si Code_Espèce selectionné on alimente Listbox2) quand on clique dans la Listbox avec:
Code:
Private Sub ListBox1_Change()

Dim Mondico As Object
Dim i As Integer


Set Mondico = CreateObject("Scripting.Dictionary")

Me.ListBox2.Clear

For i = 0 To Me.ListBox1.ListCount - 1

    If Me.ListBox1.Selected(i) = True Then Mondico(ListBox1.List(i)) = ""
    
Next i

If Mondico.exists("Code_Espèce")  Then
    
            ListBox2.AddItem "Ordre"
            ListBox2.AddItem "SS_Ordre"
            ListBox2.AddItem "Super_Famille"
            ListBox2.AddItem "Famille"
            ListBox2.AddItem "SS_Famille"
            ListBox2.AddItem "Tribu"
            ListBox2.AddItem "Genre"
            ListBox2.AddItem "Espèce"
            ListBox2.AddItem "Nom commun"
End If

end sub

Merci de m'avoir aiguillé ;)
 

Misange

XLDnaute Barbatruc
Re : Comment initialiser une listbox à partir d'une autre listbox

Bonjour
Remplir les listes avec la méthode additem est assez longuette.
Je te conseille plutot de les écrire dans une feuille du classeur (que tu peux masquer) et de les mettre sous forme de listes (tableaux dans les versions suivantes) de façon à les rendre dynamiques (s'ajustent si tu les change). Tu peux les nommer (insertion/nom/définir). Tu fais alors référence à ce nom quand tu initialises ton formulaire en utilisant ce nom dans la propriété RowSource.
Listbox1.Rowsource=malistenommée1
Et tu n’initialises à ce stade que la listbox1.
Ensuite, dans l'événement listbox1_click, tu initialises la listbox2 en fonction du choix fait dans la première
If listbox1(1) = true then listbox2.rowsource =malistenommée2
If listbox1(2) = true then listbox2.rowsource =malistenommée3

C'est plus simple à gérer. Attention cependant comme tu as des choix multiples à bien gérer toutes les solutions possibles correctement. C'est évidemment plus simple avec des listes à choix unique.

Tu peux aussi masquer tes lisbox2, 3... à la création du formulaire ou l'ors de l'initialisation
listbox2.visible=false
et ne les rendre visibles que si le choix dans la listbox1 le rend nécessaire (tu passes la propriété à true).
 

tkd2009

XLDnaute Nouveau
Re : Comment initialiser une listbox à partir d'une autre listbox

Merci pour les infos, surtout la manière de cacher les listbox.
Existe t il une manière de "griser" les valeurs et de les activer selon la même condition?
Sinon, il est vrai qu'alimenter les listbox à la main c'est pas drôle mais comme c'est lié à une base de donnée Access c'est figé et ça n'a pas besoin d'être dynamique.
A la limite je pourrais remplir les listbox automatiquement en allant chercher les champs dans les différentes tables de la base pour éviter les fautes de frappes et palier les éventuels ajout de champs par l'administrateur de la base.
Mais je vais encore pleurer avec la syntaxe :p
 

Misange

XLDnaute Barbatruc
Re : Comment initialiser une listbox à partir d'une autre listbox

Je te l'ai donnée la syntaxe, plus simple connais pas
listbox1.rowsource = malistenommée 1
maliste nommée tu l'écris dans la feuille en faisant des copier coller à partir de tes données extraites d'access si tu veux.
si tu ne veux pas nommer ta liste tu peux aussi écrire
listbox1.rowsource= "data!H2:H26" si les données spnt sur la feuille data en H2:H26
Non tu ne peux pas griser les valeurs dans une listbox.
 

Si...

XLDnaute Barbatruc
Re : Comment initialiser une listbox à partir d'une autre listbox

salut

alimentation avec "Listbox1.List" et "Array" - cocher "Code_lieux" (seul cas présenté ici)
 

Pièces jointes

  • Test Listbox.xls
    63 KB · Affichages: 86
  • Test Listbox.xls
    63 KB · Affichages: 73
  • Test Listbox.xls
    63 KB · Affichages: 84

Discussions similaires

Statistiques des forums

Discussions
312 317
Messages
2 087 189
Membres
103 493
dernier inscrit
Vidal Salvador