Bonjour gELL59, njhub, le forum,
Un essai.....(pour tout afficher, il faut effacer L1)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer, derncol As Integer
Application.ScreenUpdating = False 'évite le scintillement de l'écran
With Sheets("Données") 'on agit sur la feuille "Données"
derncol = .Cells(2, Cells.Columns.Count).End(xlToLeft).Column 'dernière colonne en fonction de la ligne 2
If Not Application.Intersect(Target, Range("L1")) Is Nothing Then 'à chaque modif.sur la cellule L1
cancel = True
Columns.EntireColumn.Hidden = False
For i = derncol To 2 Step -1 'boucle de la dernnière colonne à la colonne 2
If .Cells(2, i) <> .Cells(1, 12) Then 'si valeur cellule <> L1
Columns(i).EntireColumn.Hidden = True 'on masque
Else 'sinon
Columns(i).EntireColumn.Hidden = False 'on affiche
End If 'fin de la condition
Next i 'fin de la boucle
If .Cells(1, 12) Like "" Then Columns.EntireColumn.Hidden = False 'si L1 est vide, on affiche tout
End If
End With
Application.ScreenUpdating = True
End Sub
Cordialement,