Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False 'on désactive les évènements pour éviter de tourner en rond et planter
If Not Intersect(Target, Range("M2")) Is Nothing Then 'si on change la cellule M2
Columns("D:K").Hidden = False 'on affiche les colonnes D à K
If Range("M2") <> "" Then 'si M2 n'est pas vide (==> M2 Vide permet d'afficher tout)
For i = 4 To 11 'pour la colonne 4 (=D) à 11 (=K)
If Cells(2, i) <> Range("M2") Then 'si la cellule en ligne 2 de la colonne est différente de M2
Columns(i).Hidden = True 'on la masque
End If
Next i
End If
End If
Application.ScreenUpdating = True 'on réactive les évènements
End Sub