Option Explicit
Dim cp
Private Sub UserForm_Initialize()
Dim i&
With Sheets("Codes").[a1].ListObject ' avec le tableau structuré de la cellule A1
Application.ScreenUpdating = False
' Tri selon CP et Ville - retirer les doublons (CP,Ville)
.Range.Sort key1:=.Range.Cells(1, 1), order1:=xlAscending, key2:=.Range.Cells(1, 2), order2:=xlAscending, MatchCase:=False, Header:=xlYes
.Range.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
cp = .Range.Value ' array des (CP,Ville) avec les titres
For i = 2 To UBound(cp) ' remplir la liste ComboBox1 avec les CP sans doublons
If cp(i, 1) <> "" And cp(i, 1) <> cp(i - 1, 1) Then ComboBox1.AddItem Format(cp(i, 1), "00000")
Next i
End With
End Sub
Private Sub ComboBox1_Change()
Remplir ComboBox2, ComboBox1
End Sub
Private Sub TextBox1_Change()
Remplir ComboBox3, TextBox1
End Sub
Private Sub TextBox2_Change()
Remplir ListBox1, TextBox2
End Sub
Sub Remplir(ByRef Quoi As Control, ByRef CPref As Control)
' remplir le conrôle Quoi (liste ou combobox) avec les villes dont le CP est égal à celui du contrôle CPref
Dim i&, CPvalue&
Quoi.Clear ' vider le contrôle à remplir
CPvalue = Val(CPref) ' transformzer le cpref en nombre
For i = 2 To UBound(cp) ' pour chaque cp
If cp(i, 1) = CPvalue Then Quoi.AddItem cp(i, 2) ' si le cp est égal au cp recherché
Next i ' on ajoute la ville à Quoi
If Quoi.ListCount > 0 Then Quoi.ListIndex = 0 ' si on a trouvé au moins un cp, on sélectionne le 1er
' si le CP comportait 4 caractères et si on a trouvé au moins une ville, on ajoute le "0" à gauche
If Len(CPref) = 4 And Quoi.ListCount > 0 Then CPref.Value = "0" & CPref.Value
End Sub