Private Sub Worksheet_Change(ByVal Target As Range)
Dim sh As Worksheet 'Déclare la variable sh qui représente le nom d'une feuille
Dim DL As Integer 'Déclare une variable de type integer
Application.ScreenUpdating = False
If Not Application.Intersect(Target, Range("a4")) Is Nothing Then
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False 'On enlève les événements pour ne pas redéclencher la macro
'événementielle lors du clearcontents qui suit
'Problème 1 : Plage a changé, maintenant en G4
Range("G4:K" & Range("G65000").End(xlUp).Row).ClearContents 'Efface le contenu du range
Application.EnableEvents = True 'remet les événements
'Problème 2 : Nom de la feuille a changé
Set sh = Sheets("Histo") 'Set la variable sh
DL = sh.Range("A65000").End(xlUp).Row 'Détermine la dernière ligne
'Problème 3 : Pour que le filtre fonctionne, il faut que la cellule A3 dans
'la feuille HistCLTS soit appelé comme la cellule A1 dans Histo, sinon
'le CriteriaRange ne fonctionne pas.
'Donc, appeler la cellule A3 Code Clts
sh.Range("A1:E" & DL).AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A3:A4"), CopyToRange:=Range("G4"), Unique:=False 'Set le filtre
End If
Set sh = Nothing 'Vide la slut de mémoire
End Sub