Option Explicit
Option Compare Text 'la casse est ignorée
Private Sub Worksheet_Change(ByVal Target As Range)
Dim liste$(), tablo, e, n&, DerLig
If FilterMode Then ShowAllData 'si la feuille est filtrée
'---liste à partir des colonnes sources---
DerLig = Range("G65500").End(xlUp).Row
ReDim liste(1 To Rows.Count, 1 To 1)
tablo = Range(Cells(19, 7), Cells(DerLig, 7)) 'matrice, plus rapide, au moins 2 éléments,
n = 0
For Each e In tablo
If e <> "" Then n = n + 1: liste(n, 1) = e
Next
'---restitution---
Application.EnableEvents = False
n = n + 19 ' n est le nombre d'éléments, 19 est le décalage des N° de lignes
With [B19] '1ère cellule de restitution, à adapter
If n Then
.Resize(n) = liste
.Resize(n).Name = "Liste" 'plage nommée
ActiveSheet.ListObjects("Tableau6").Resize Range("$B$18:$E$" & n + 1)
Range("D19").AutoFill Destination:=Range("D19:D" & n + 1), Type:=xlFillDefault
End If
.Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents 'RAZ en dessous
Range("B" & n + 2 & ":E" & Rows.Count).ClearContents
End With
Application.EnableEvents = True
ActiveSheet.AutoFilterMode = False
If Intersect(Target, ActiveSheet.Range("I4,K4,I6,K6")) Is Nothing Then Exit Sub
[G18].AutoFilter 'ça peut être ça tout simplement
Select Case Target.Column
Case 9, 11
If [I4] <> "" Then [G18].AutoFilter Field:=7, Criteria1:=[I4].Value
If [K4] <> "" Then [G18].AutoFilter Field:=1, Criteria1:=[K4].Value
If [I6] <> "" Then [G18].AutoFilter Field:=9, Criteria1:=[I6].Value
If [K6] <> "" Then [G18].AutoFilter Field:=6, Criteria1:=[K6].Value
If [I4] & [K4] & [I6] & [K6] = "" Then [G18].AutoFilter
Case Else
ActiveSheet.AutoFilterMode = False
End Select
End Sub