Private Sub Worksheet_Change(ByVal Target As Range)
Dim F As Object 'déclare la variable F (onglet Feuil1)
Dim B As Object 'déclare la variable B (onglet Base)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)
Dim PVL As Range 'déclare la variable PLV (PLage Visible)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
If Target.Address <> "$D$5" Then Exit Sub 'si le changement a lieu ailleurs qu'en D5, sort de la procédure
Set F = Sheets("Feuil1") 'définit l'onglet F
Set B = Sheets("Base") 'définit l'onglet B
DL = B.Cells(Application.Rows.Count, 3).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 3 (=C) de l'onglet B
Set PL = B.Range("C4:C" & DL) 'définit la plage PL
'filtre en C1 colonne C de l'onglet B avec la valeur de la cellule modifiée comme critère
B.Range("C3").AutoFilter Field:=1, Criteria1:=Target.Value
Set PLV = PL.Offset(0, 2).SpecialCells(xlCellTypeVisible) 'définit la plage PLV (plage des cellule visibles (non filtrées) de la plage PL
For Each CEL In PLV 'boucle sur toutes les cellules CEl de la plage PLV
Set DEST = F.Cells(Application.Rows.Count, 6).End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
DEST.Value = CEL.Comment.Text 'récupère le commentaire de la cellule CEl dans DEST
Next CEL 'prochaine cellule de la boucle
B.Range("C3").AutoFilter 'supprime le filtre automatique
End Sub