Private Sub Worksheet_Change(ByVal Target As Range)
Dim pl As Range 'déclare la variable pl (PLage)
If Target.Address <> "$B$3" Then Exit Sub 'si le changement a lieu aillerus qu'en B3, sort de la procédure
Set pl = Range("A4:A23").EntireRow 'définit la plage pl
Application.ScreenUpdating = False 'masque les changements à l'écran
If Target.Value = "" Then pl.Hidden = False: Exit Sub 'si B3 est effacé, affiche toutes les lignes de pl, sort de la procédure
pl.Hidden = False 'affiche toutes les lignes de pl
For x = CByte(Target.Value) + 1 To 20 'boucle sur les ligne (valeur en B3) à 20
pl.Rows(x).Hidden = True 'masque la ligne x
Next x 'prochaine ligne de la boucle
Application.ScreenUpdating = True 'affiche les changements à l'écran
End Sub