Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim critere$, P As Range, liste, i&, x$, n&
critere = LCase([B2]) & "*" 'cellule à adapter
If ActiveCell.Address = "$B$4" Then Set P = Feuil2.[A62:A3000] 'Feuil2 : CodeName de la feuille Source
If ActiveCell.Address = "$B$5" Then Set P = Feuil2.[I8:I11]
With Feuil3 'CodeName de la feuille Liste
.[A:A].ClearContents
If P Is Nothing Then Exit Sub
ActiveCell.Validation.Delete
liste = P.Resize(P.Rows.Count + 1) 'matrice, plus rapide, au moins 2 éléments
For i = 1 To UBound(liste) - 1
x = liste(i, 1)
If x <> "" And LCase(x) Like critere Then n = n + 1: liste(n, 1) = x
Next
If n = 0 Then Exit Sub
With .[A1].Resize(n)
.Value = liste
.Sort .Cells, xlAscending, Header:=xlNo 'tri alphabétique
ActiveCell.Validation.Add xlValidateList, Formula1:="=" & .Address(External:=True)
End With
End With
End Sub