Re : Protection feuille
Bonjour,
J'ai mis en place un système de protection dans certains de mes classeurs. J'explique ma démarche et tu pourras t'en inspirer.
1/ Il faut rendre l'affichage des macros obligatoires pour l'accès aux feuilles. Donc par défaut, j'ai un code qui en sortant du fichier (événement 'sur fermeture du classeur'):
- protège le classeur de l'affichage des feuilles
- masque les feuilles du fichier sauf une feuille de présentation indiquant que les macros sont obligatoires (j'utilise même la propriété de feuille veryhidden pour éviter de donner l'idée aux personnes d'aller trifouiller)
Ainsi, une personne n'acceptant pas les macros à l'ouverture du classeur se trouvera avec un classeur non utilisable.
Cela donne chez moi :
'Je crée dans un module nommé INTERNAL une fonction qui charge mon password de classeur
Function LoadPassword()
MyPassword = "toto"
End Function
'La feuille MYCODE est la feuille qui demande l'activation des macros si jamais ce n'est pas le cas
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationAutomatic
INTERNAL.LoadPassword
ActiveWorkbook.Unprotect (MyPassword)
For i = 1 To ActiveWorkbook.Sheets.Count
ActiveWorkbook.Sheets("MYCODE").Visible = True
If ActiveWorkbook.Sheets(i).Name <> "MYCODE" Then
ActiveWorkbook.Sheets(i).Visible = xlVeryHidden
Else
ActiveWorkbook.Sheets(i).Visible = True
End If
Next
ActiveWorkbook.Protect (MyPassword)
End Sub
2/ il faut créer une table des utilisateurs autorisés afin de déclencher le scénario adéquat. Pour cela, on peut créer une feuille masquée où on a deux colonnes :
- première colonne: le login de session windows
- deuxième colonne: type de profil
3/ Il faut appliquer le scénario adéquat. A cette fin, on va coder dans l’événement 'sur ouverture de classeur' :
- on récupère le login windows
- on qualifie le type de profil associé au login
- on enlève la protection du classeur, on masque/montre les feuilles permises en conséquences, on reprotège le classeur
'-----------
'Pour info, le code pour récupérer le login de session est :
Dim MyUserName As String 'Nom de connection NT
Dim MyObject As Object
'Récupération du nom d'utilisateur NT
Set MyObject = CreateObject("WScript.NetWork")
MyUserName = MyObject.UserName
'-----------
Il suffit alors de rechercher le login dans la feuille et associer le profil. Il faudra traiter le cas du user non listé.
4/ Comme ton password se trouve dans ton code pour protéger / déprotéger le classeur, il faut penser à protéger le code par mot de passe également.
Comme tu peux le voir, je n'ai pas su trouver de fonction dans excel qui gère la sécurité. J'ai donc du faire ce travail manuellement. Il est donc fortement possible que ma solution ne soit pas la meilleure.
Poulpor