Titre du sujet : Re: Userform, Liste déroulante dépendante sans doublon par myDearFriend! le 28/01/2021 17:46:03
Bonjour Theo44, Tu trouveras en pièce jointe peut-être une façon de faire pour répondre à ton besoin. J'ai tout d'abord créé la Function suivante : DANS LE MODULE DE CODE DU USERFORM Private Function defListeTiers(valTC As String) As Variant ' myDearFriend! - www.mdf-xlpages.com Dim Dict As Object Dim vTabTemp As Variant Dim L As Long Set Dict = CreateObject("Scripting.Dictionary") 'Mémorise les valeurs des plages "V_TC" et "L_TC_Tiers" (colonnes I et J) dans un seul tableau variant à 2 colonnes vTabTemp = Sheets("P").Range("V_TC").Resize(ColumnSize:=2).Value 'On parcourt ligne à ligne le tableau variant For L = 1 To UBound(vTabTemp, 1) 'Si correspondance avec le choix en Combobox "L_TC" If vTabTemp(L, 1) = valTC Then 'On ajoute l'item au dictionary (sans doublon!) Dict(vTabTemp(L, 2)) = "" End If Next L 'Si liste vide alors on sort de la fonction If Dict.Count = 0 Then Exit Function 'On récupère la liste des items sans doublon vTabTemp = Dict.Keys Set Dict = Nothing ' On retourne la liste avec tri defListeTiers = Tri(vTabTemp, LBound(vTabTemp), UBound(vTabTemp)) End Function Puis, j'ai aujouté une procédure évènementielle, laquelle est déclenchée par tout changement de valeur dans la liste de choix "Type contrat" : Private Sub L_TC_Change() Dim vTabTemp As Variant 'Selon choix dans la liste "L_TC", on redéfinit la liste "L_Tiers" vTabTemp = defListeTiers(L_TC.Text) With L_Tiers.Style = fmStyleDropDownList .Clear If Not IsEmpty(vTabTemp) Then .List = vTabTemp .ListIndex = -1 End If End With End Sub
Attention cependant : pour être sûr que le fonctionnement soit fiable, il te faut impérativement modifier la propriété "Style" de tes ComboBox sur "fmStyleDropDownList" (qui n'est pas la valeur par défaut). Ca permet d'obliger l'utilisateur à faire un choix existant dans la liste, et l'empeche de saisir une autre valeur non proposée. C'est ce que j'ai fait pour tes 2 ComboBox "L_TC" et "L_Tiers". J'ai tenté de commenter au maximum le code utilisé pour que tu puisses le comprendre au mieux. Par ailleurs, (et j'aurai dû commencer par ça), je me permets 2 conseils concernant ton code : - - donner le même nom aux plages nommées et aux contrôles de ton Userform n'est pas la meilleure idée. Ca donne quelque chose d'assez confus dans le code, selon moi.
- - La déclaration des variables est toujours hautement recommandée ! Et l'utilisation de l'instruction "Option explicit" en tête de module est requise sans modération... (à l'occasion et si tu as envie d'en savoir plus, je te conseille cet article "VBA et les variables". Il demande certainement à être réactualisé, mais son contenu reste toujours valable à mon avis). J'ai d'ailleurs modifié légèrement ta procédure de Tri en conséquence.
En espérant que ça puisse t'inspirer pour la suite de ton projet... Bien cordialement,
|