Pour la solution 1 :
La zone de criteres est aussi un nom variable (CTRL+F3 pour voir).
Sub Test1()
Range("Base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Criteres").Range("Criteres"), CopyToRange:=Sheets("Extraction").Range("Extraction")
Sheets("Extraction").Select
End Sub
Pour la solution 2 :
La zone de criteres est gerée dans le code.
Sub Test2()
With Sheets("Criteres")
For Each X In .Range("A1:" & .Range("IV1").End(xlToLeft).Address)
If .Cells(65536, X.Column).End(xlUp).Row > MaLigne Then MaLigne = .Cells(65536, X.Column).End(xlUp).Row
Next
End With
Range("Base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("Criteres").Range("A1:F" & MaLigne), CopyToRange:=Sheets("Extraction").Range("Extraction")
Sheets("Extraction").Select
End Sub