Private Sub Worksheet_Change(ByVal Target As Range)
Dim v1, v2, v3, c As Range
v1 = [B1]: v2 = [B4] & "*": v3 = [B5]
If v1 & v2 & v3 = "*" Then Columns.Hidden = False: Exit Sub 'affiche tout
Application.ScreenUpdating = False
With Range("A1", UsedRange)
With .Columns(3).Resize(, .Columns.Count - 2)
.Hidden = True 'masque tout
For Each c In .Rows(4).Cells
If v1 <> "" And v2 & v3 <> "*" Then If c.MergeArea(1) = v1 And CStr(c(2)) Like v2 & v3 Then c.EntireColumn.Hidden = False
If v1 <> "" And v2 & v3 = "*" Then If c = v1 Then c.MergeArea.EntireColumn.Hidden = False
If v1 = "" And v2 & v3 <> "*" Then If CStr(c(2)) Like v2 & v3 Then c.EntireColumn.Hidden = False
Next
End With
End With
End Sub