Private Sub Worksheet_Activate()
Worksheet_Change [A2]
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A2:B2]) Is Nothing Then Exit Sub
Dim lig&, dat1, dat2, w As Worksheet, col%, i As Variant
lig = 6 '1ère ligne à renseigner
dat1 = [A2].Value2
dat2 = [B2].Value2
Application.ScreenUpdating = False
Rows(lig & ":" & Rows.Count).Delete 'RAZ
If Not IsNumeric(CStr(dat1)) Or Not IsNumeric(CStr(dat2)) Then Exit Sub
For Each w In Worksheets
If UCase(w.Name) <> "RECAP" Then
With w.Range("A5").CurrentRegion
.AutoFilter 1, ">=" & dat1, xlAnd, "<=" & dat2
For col = 1 To .Columns.Count
i = Application.Match(.Cells(1, col), Rows(5), 0)
If IsNumeric(i) Then .Columns(col).Copy Cells(lig, i) 'copie-colle chaque colonne
Next col
.AutoFilter
Rows(lig).Delete
lig = Cells(Rows.Count, 1).End(xlUp).Row + 1
End With
End If
Next w
End Sub