Listbox selon une autre listbox

Bonjour,

Depuis hier, je tourne en rond sur un problème de listbox !

Je suis en train de créer une application sous Excel avec du VBA. A l'ouverture du fichier, une fenêtre s'ouvre et propose à l'utilisateur de choisir un type de zonage géographique (communes, départements, régions,...). A la suite de cette sélection, une seconde listbox devrait s'afficher avec la liste correspondante. Par exemple, si je choisi "départements", j'aurai la liste des départements...

En fait, je veux faire en VBA ce qu'il est possible de faire avec des listes "normales" et une fonction indirect...

Toutes mes listes sont prêtes dans un onglet "geo"

LBNIV correspond à la première listbox qui permet de sélectionner le zonage

LBZONE correspond à la liste à générer selon LBNIV

Avec le code ci-dessous, la liste LBNIV se génère bien. Cependant, la liste LBZONE reste vide... D'où vient le problème ?

Merci par avance !

Private Sub UserForm_Initialize()
    'Remarque:
    'ColumnHeads = True spécifie que la première cellule précédent
    'la plage source est utilisée comme titre dans la ListBox.
    'ColumnHeads ne fonctionne pas pour la propriété List() et la
    'méthode AddItem.
    LBNiv.ColumnHeads = False

    LBNiv.RowSource = "geo!A3:A5"

Dim DerCell As String
If LBNiv.Text = "Région / département" Then
DerCell = Sheets("geo").Range("B2").End(xlDown).Address
LBZONE.RowSource = Sheets("geo").Range("B2:B14")
End If

End Sub

Hello je crois comprendre ce que tu veux faire, si c'est le cas je l'ai utilisé pour mon parc machine.

Pourrais tu mettre ton fichier en piece jointe si tu veux que l'on puisse t'aider plus aisément.

Bonjour,

Eh bien, si ta première liste est dans le bon ordre, la valeur de ListIndex te permet de calculer le décalage colonne à opérer sur une plage nommée pour être dans la bonne plage à affecter à ListBox2. Reste cependant préalablement à ajuster le nombre de lignes : soit tu le calcules, soit tu as réservé des cellules pour pouvoir le prélever. Ou mieux dans le genre : Lors du choix1, tu affectes la valeur de ListIndex à une cellule : 0, 1, 2... , ta plage nommée étant celle correspondant au décalage 0, la cellule voisine en fonction de cette valeur de décalage calcule le nombre de valeurs à reprendre comme nombre de lignes, et tu n'as plus qu'à le prélever en n'utilisant que 2 cellules.

Ceci dit, je n'aurai pas le temps de travailler spécialement sur ton projet, mais je te conseilles de mettre un fichier si tu veux avoir des intervenants qui interviennent de façon plus circonstanciée.

Cordialement.

Bonjour,

Merci de ton aide. Le document se trouve en pièce jointe.

EDIT du 14/06 : J'ai trouvé la solution toute seule !

J'ai ajouté une macro "LBNiv_click" qui, en cliquant sur une ligne de la première listbox, ouvre une seconde liste selon la ligne choisi dans la première !

149outil.xlsm (35.25 Ko)
Rechercher des sujets similaires à "listbox"