Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)
If Target.Address = "$B$3" Then 'condition 1 : si le changement a lieu dans la cellule B3
Range("A7:C23").ClearContents 'supprime les anciennes données de la plage A7:C23
If Target.Value = "" Then Exit Sub 'si B3 est effacée, sort de la procédure
Set r = Sheets("plan").Columns(1).Find(Target.Value, , xlValues, xlWhole) 'définit la recherche r
If Not r Is Nothing Then 'condition 2 : si il existe au moins une occurrence
pa = r.Address 'définit la première adresse pa
Do 'exécute
Set dest = Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination
dest.Value = r.Offset(0, 1).Value 'récupère le PK
dest.Offset(0, 1).Value = r.Offset(0, 2).Value 'récupère la Zone
dest.Offset(0, 2).Value = r.Offset(0, 3).Value 'récupère la Pièce
Set r = Sheets("plan").Columns(1).FindNext(r) 'redéfinit la recherche r (occurrence suivante)
Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrence ailleurs qu'en pa
Else 'sinon (condition 2)
MsgBox "Aucune donnée trouvé pour la semaine " & Target.Value & " !" 'message
End If 'fin de la condition 2
End If 'fin de la condition 1
End Sub