Private Sub Worksheet_Change(ByVal Target As Range)
Dim choix As Range, deb As Range, nom$, w As Worksheet, i&, x$, j&
Set choix = [C5] 'à adapter éventuellement
Set deb = [A18] 'à adapter éventuellement
nom = CStr(choix)
If Intersect(Target, choix) Is Nothing Or nom = "" Then Exit Sub
Application.ScreenUpdating = False
On Error Resume Next
Set w = Sheets(nom)
On Error GoTo 0
'---création de la feuille---
If w Is Nothing Then
Me.Move Before:=Sheets(1)
Set w = Sheets.Add(After:=Me)
w.Name = nom
For i = 2 To Sheets.Count - 1
x = Sheets(i).Name
For j = i + 1 To Sheets.Count
If Sheets(j).Name < x Then Sheets(j).Move Before:=Sheets(i) 'classement
Next j, i
End If
'---copies---
Cells.Copy w.[A1] 'copier-coller
w.Range(choix(1, 0).Address).Resize(, 2).Clear
w.Range(deb.Address).CurrentRegion.Clear
choix(0) = "NAME"
deb.CurrentRegion.AdvancedFilter xlFilterCopy, choix(0).Resize(2), w.Range(deb.Address) 'copie le filtre avancé
choix(0) = ""
With w.UsedRange: End With 'actualise la barre de défilement verticale
w.Activate
End Sub