Adapter liste déroulante
P
Bonjour à tous,
Je vous écris car je ne trouve pas bonheur sur votre forum.
J'ai un fichier Excel avec une liste déroulante par commune. Celui-ci sélectionne des équipements par commune. Celui-ci fonctionne très bien mais j'aimerais effectuer un premier filtre par département afin d'obtenir moins de communes dans la liste déroulante communes.
J'espère être clair
Encore merci pour votre aide.
PM
T
Bonsoir,
Ajouter un autre ComboBox appelé "ComboBox2" puis remplacer la proc "Initialize" du Formulaire par celle ci-dessous et ajouter la proc "Private Sub ComboBox2_Click()" (ci-dessous aussi) :
Private Sub UserForm_Initialize()
Dim Plage As Range
Dim I As Long
Dim DicoDep As Object
Dim TT As Variant
Set DicoDep = CreateObject("Scripting.Dictionary")
'défini la plage en colonne B à partir de B2
With Worksheets("Departement"): Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With
For I = 1 To Plage.Count: DicoDep(Plage(I).Value) = "": Next I
TT = DicoDep.keys
Tri TT, LBound(TT), UBound(TT)
Me.ComboBox2.List = TT
End Sub
Private Sub ComboBox2_Click()
Dim Plage As Range
Dim Cel As Range
Dim Tbl() As String
Dim Adr As String
Dim I As Integer
'défini la plage en colonne B à partir de B2
With Worksheets("Departement"): Set Plage = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)): End With
'effectue la recherche du département
Set Cel = Plage.Find(ComboBox2.Text, , xlValues, xlWhole)
'si trouvé, rempli le tableau avec le nom des communes en faisant parties
If Not Cel Is Nothing Then
ComboBox1.Clear
Adr = Cel.Address
Do
I = I + 1
ReDim Preserve Tbl(1 To I)
Tbl(I) = Cel.Offset(, -1).Value
Set Cel = Plage.FindNext(Cel)
Loop While Cel.Address <> Adr
End If
'tri...
Tri Tbl, LBound(Tbl), UBound(Tbl)
'puis passage au Combo
Me.ComboBox1.List = Tbl
End SubP
Un grand merci, ça fonctionne parfaitement !