Lier deux listes déroulantes VBA

ludosipm

XLDnaute Nouveau
Bonjour,


Je suis novice dans VBA, c'est pourquoi j'ai besoin d'aide !

J'ai créé une UserForm et y ai ajouté deux listes déroulantes (listbox).
L'une étant "Famille" et l'autre "Sousfamille".

Actuellement la liste des "sous familles" est complète, j'aimerais lier les deux listes afin que lorsque je clique sur une ligne de ma liste "Famille" seulement les lignes de des sous familles associées apparaissent dans ma listbox "Sousfamille".

j'espère avoir été suffisamment clair. Je vous remercie d'avance pour votre aide.

Mes amitiés,
Ludo
 

Odesta

XLDnaute Impliqué
Re : Lier deux listes déroulantes VBA

Bonjour et bienvenue sur ce forum

il faut 'recharger' votre liste de sous famille lors de la sélection d'une famille.
ce rechargement sera une liste contrainte par la séléction, il faut donc un tableau de correspondance et un morceau de code pour opérer

Pouvez-vous joindre un fichier exemple (sans données confidentielles) svp ?
 

ludosipm

XLDnaute Nouveau
Re : Lier deux listes déroulantes VBA

J'ai joint mon fichier, j'ai classé les sous familles en fonction des familles des la feuille "Mat".
Quelles lignes de code je dois rentrer pour prendre en compte ces contraintes ?

Merci
 
Dernière édition:

Odesta

XLDnaute Impliqué
Re : Lier deux listes déroulantes VBA

Bonjour

dans un premier temps, pous pouvez essyer ceci :

(en remplacement de l'existant qui est resté vide)

Code:
Public Sub Famille_change()
For i = 1 To Famille.ListCount
    If Me.Famille.Selected(i) = True Then
        ma_selection = i
        Exit For
    End If
Next i
MsgBox "Sélection : " & Me.Famille.List(ma_selection)
End Sub

Je mets la suite un peu plus tard
 

Odesta

XLDnaute Impliqué
Re : Lier deux listes déroulantes VBA

Maintenant, il faut remplacer tout le code par ceci (attention si vous avez rajouté des améliorations, à ne pas écraser ce qu'il ne faut pas, attention aussi, il y a des "publics" tout en haut, il faut bien les conserver)

Code:
Public tab_famille As Variant
Public tab_sous_famille As Variant


Public Sub Famille_change()
For i = 0 To Famille.ListCount
    If Me.Famille.Selected(i) = True Then
        ma_selection = i
        famille_selectionnee = Me.Famille.List(ma_selection)
        Exit For
    End If
Next i

'MsgBox "Sélection : " & famille_selectionnee

'recherche de l'index
For i = 1 To UBound(tab_famille, 1)
    If famille_selectionnee = tab_famille(i, 1) Then
        famille_selectionnee_index = tab_famille(i, 2)
        
        Exit For
    End If
Next i


'remplir les listes
Stockfrm.Sousfamille.Clear
For i = 1 To UBound(tab_sous_famille, 1)
    If tab_sous_famille(i, 2) = famille_selectionnee_index Then
        Stockfrm.Sousfamille.AddItem tab_sous_famille(i, 1)
    End If
Next i

End Sub

Public Sub UserForm_Activate()

With Sheets("Adresses")
'création d'un tableau pour les familles
tab_famille = .Range("A2:B" & .Range("B65000").End(xlUp).Row).Value

'création d'un tableau pour les sous-familles
tab_sous_famille = .Range("C2:D" & .Range("D65000").End(xlUp).Row).Value

End With

'remplir les listes
Stockfrm.Famille.Clear
For i = 1 To UBound(tab_famille, 1)
    Stockfrm.Famille.AddItem tab_famille(i, 1)
Next i

'remplir les listes
Stockfrm.Sousfamille.Clear
For i = 1 To UBound(tab_sous_famille, 1)
    Stockfrm.Sousfamille.AddItem tab_sous_famille(i, 1)
Next i

End Sub

Le programme 'recharge' la sous-liste, avec les élements qui correspondent à votre liste de 'N°'. ce qui au passage permet de rajouter autant de sous-famille que souhaité, sans avoir à changer l'ordre des items.

Cordialement
olivier
 

Discussions similaires

Réponses
4
Affichages
2 K

Statistiques des forums

Discussions
312 188
Messages
2 086 028
Membres
103 100
dernier inscrit
erym64300