Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans une cellule
Dim pl As Range 'déclare la varialbe PL (PLage)
If Target.Cells.Count > 1 Then Exit Sub 'si la modification agit sur plus d'une unique cellule, sort de la procédure
If Target.Address = "$C$1" Then 'condition 1 : si le changement a lieu dans la cellule C1
Select Case Target.Cells(1).Value 'agit en fonction de la valeur de C1
Case "Plastique" 'cas "Plastique"
Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
Set pl = Application.Union(Range("A4:A6"), Range("A8")) 'définit la plage PL
pl.EntireRow.Hidden = True 'masques les lignes de la plage PL
Case "métal" 'cas "métal"
Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
Set pl = Application.Union(Range("A3"), Range("A5"), Range("A7:A8")) 'définit la plage PL
pl.EntireRow.Hidden = True 'masques les lignes de la plage PL
Case "caoutchouc" 'cas "caoutchouc"
Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
Set pl = Application.Union(Range("A3:A4"), Range("A6:A7")) 'définit la plage PL
pl.EntireRow.Hidden = True 'masques les lignes de la plage PL
Case Else 'tout autre cas
Cells.EntireRow.Hidden = False 'affiche toutes les lignes de l'onglet
End Select 'fin de l'action en fonction de...
End If 'fin de la condition 1
If Not Application.Intersect(Range("B3:B8"), Target) Is Nothing Then 'condition 2 : si le changement a lieu dans la plage "B3:B8"
If UCase(Target.Value) = "X" Then 'condition 3 : si la cellule contient "x" ou "X"
Range("C3:C8").ClearContents 'efface la plage B3:C8
Target.Offset(0, 1).Value = Format(Date, "dd/mm/yyyy") 'renvoie la date dans la cellule colonne C
Else 'sinon
Target.Offset(0, 1).Value = "" 'efface le contenue de la cellule en colonne C
End If 'fin de la condition 3
End If 'fin de la condition 2
End Sub