'---------------------------------
Sub Filtre()
Dim Rg As Range, Rg1 As Range, DL As Long
With Worksheets("Feuil1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row)
'Zone de critère
.Range("J1") = "" 'pour être sûr
.Range("J2").Formula = "=(A2=2006)*(B2=""s"")"
'Attribution d'un nom à la plage de critère
.Range("D1:D2").Name = "Crit"
'le filtre élaboré :
With Rg
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("Crit")
'Définir la plage à copier
Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible)
End With
'Où copier le résultat du filtre
With Worksheets("Feuil2")
'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A:A").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row + 1
'copier les données du filtre
Rg1.Copy .Range("A" & DL)
End With
'afficher toutes les données
.ShowAllData
End With
'Supprime le NOM de la zone de critère
Application.Names("Crit").Delete
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing
End Sub
'----------------------------------------