Re: Userform, Liste déroulante dépendante sans doublon |
Titre du sujet : Re: Userform, Liste déroulante dépendante sans doublon par Theo44 le 29/01/2021 15:07:11 onjour Didier, Option Explicit Dim Ws As Worksheet Dim NbLignes As Integer Private Sub UserForm_Initialize() 'Définit la feuille contenant les données Set Ws = Worksheets("P") 'Définit le nombre de lignes dans la colonne A NbLignes = Ws.Range("I6000").End(xlUp).Row 'Remplissage du ComboBox1 Alim_Combo 1 End Sub Private Sub ComboBox1_Change() 'Remplissage Combo2 Alim_Combo 2, ComboBox1.Value End Sub Private Sub ComboBox2_Change() 'Remplissage Combo3 Alim_Combo 3, ComboBox2.Value End Sub 'Procédure pour alimenter les ComboBox Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant) Dim j As Integer Dim Obj As Control 'Définit le ComboBox à remplir Set Obj = Me.Controls("ComboBox" & CbxIndex) 'Supprime les anciennes données Obj.Clear 'alimente le Combobox initial (Combobox1) If CbxIndex = 1 Then 'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne) For j = 2 To NbLignes Obj = Ws.Range("I" & j) 'Remplit le ComboBox sans doublons If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("I" & j) Next j Else 'Alimentation conditionnelle des autres Combobox en fonction de 'ce qui est sélectionnée dans le contrôle précédent : '(La sélection du ComboBox1 définit le contenu du ComboBox2, 'La sélection du ComboBox2 définit le contenu du ComboBox3 ?etc...) For j = 2 To NbLignes If Ws.Range("I" & j).Offset(0, CbxIndex - 2) = Cible Then Obj = Ws.Range("I" & j).Offset(0, CbxIndex - 1) If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("I" & j).Offset(0, CbxIndex - 1) End If Next j End If 'Enlève la sélection dans le ComboBox Obj.ListIndex = -1 Dim i As Integer Dim Plage As Range Set Plage = Range("T_Compte") With ListBox1 .List() = Plage.Value .ColumnCount = Plage.Columns.Count For i = 1 To .ColumnCount Next End With End Sub
Il ne me reste plus qu'a regrouper les colonnes L à Q dans la listbox1 qui dépend des combobox1,2,3
|
Forums