Bonjour Staple1600,
merci pour ta proposition que je viens de lire.
la syntaxe semble plus simple. Cependant j'ai complété le code entre temps et j'avoue que je ne saispas comment adapter la syntaxe que tu me proposes.
voici le code avec les compléments
Sub AfficheFeuilles(Utilisateur As String)
Dim Col As Byte, i As Byte, Lig As Integer, sh As Worksheet, LCAse As String
With Sheets("parametrage") 'dans la feuille paramétrage
'comme on va boucler de la colonne 4 à la dernière colonne, on stocke le n° de la dern colonne :
Col = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
'on cherche colonne A le nom d'utilisateur saisi et on stocke son num de ligne
Lig = .Columns(1).Cells.Find(Utilisateur, lookat:=xlWhole).Row
'boucle à partir de 4 car Feuil1 toujours affichée
For i = 3 To Col
If UCase(.Cells(Lig, i)) = "1" Or UCase(.Cells(Lig, i)) = "0" Then 'si la valeur de la cellule est différente de 0 ou 1
Sheets(.Cells(1, i).Value).Visible = True 'on affiche la feuille
Else
Sheets(.Cells(1, i).Value).Visible = xlSheetVeryHidden 'sinon on la masque
End If
If UCase(.Cells(Lig, i)) = "1" Then 'si la valeur de la cellule est "1"
With Sheets(.Cells(1, i).Value) 'avec la feuille dont le nom est en 1ere ligne
.Columns("O:U").EntireColumn.Hidden = False 'on affiche les colonnes sélectionnés (O:U)
End With
Else
If UCase(.Cells(Lig, i)) = "0" Then 'si on trouve un "0" dans la cellule
With Sheets(.Cells(1, i).Value) 'avec la feuille dont le nom est en 1ere ligne
.Columns("O:U").EntireColumn.Hidden = True 'Masque les colonnes selectionnées
'protège par mdp l'affichage des colonnes "O:U"
.Protect Password:="admin19", DrawingObjects:=True, contents:=True, AllowInsertingRows:=True, AllowFormattingRows:=True _
, AllowFormattingCells:=True, AllowSorting:=True, AllowFiltering:=True, UserInterfaceOnly:=True
.EnableSelection = xlNoRestrictions
End With
End If
End If
Next i
End With
End Sub