Re,
Sub Filtrer()
Dim Plg As Range, Crt As Range, PlC As Range, ws() As Worksheet
Dim pas%, i%, f%
With Worksheets("Extraction")
i = 3
Do While .Cells(i, 2) <> ""
If .Cells(i, 2) Like "Données*" Then
ReDim Preserve ws(f)
Set ws(f) = Worksheets(.Cells(i, 3).Value)
f = f + 1
ElseIf .Cells(i, 2) Like "Critères*" Then
Set Crt = .Range(.Cells(i, 3).Value)
ElseIf .Cells(i, 2) Like "Copie*" Then
Set PlC = .Range(.Cells(i, 3).Value)
End If
i = i + 1
Loop
End With
pas = PlC.Columns.Count + 1
Application.ScreenUpdating = False
PlC.CurrentRegion.Offset(1).Clear
For f = 0 To UBound(ws)
With ws(f).Range("A1").CurrentRegion
.AdvancedFilter xlFilterCopy, Crt, PlC.Offset(, pas * f)
End With
Next f
For f = 1 To UBound(ws)
Set Plg = PlC.Cells(1, 1).Offset(50000).End(xlUp)(2)
With PlC.Offset(, pas * f).CurrentRegion
.Offset(1).Copy Plg
.Clear
End With
Next f
End Sub
NB-Les indications relatives aux données et paramètres sont recherchées en colonne B à partir de B3:
- l'indication Données permet de récupérer les noms de feuilles en C (ne mentionner que les noms de feuille)
- l'indication Critères permet de récupérer la zone de critères
- l'indication Copie permet de récupérer la zone cible de résultats du filtrage.
Le nombre de feuilles peut donc être augmenté. Les plages de données sont supposées débuter en A1 sur chaque feuille, la ligne 1 étant la ligne d'en-tête.
La ligne 12 doit rester vide. La zone à droite de la zone de résultats doit également rester vide.
Cordialement.