Excel vous permet de protéger des feuilles de calcul individuelles, comme vous l’avez appris dans d’autres numéros de ExcelTips. (Vous choisissez Outils | Protection | Protéger la feuille.) Vous pouvez utiliser cette approche pour protéger les feuilles de calcul individuelles indépendamment, en utilisant différents http: // nom d’utilisateur-mot de passe .com / 14 / ce-qui-fait-un-bon-mot de passe [mots de passe].

Cela signifie qu’un utilisateur peut apporter des modifications à une feuille de calcul en utilisant un mot de passe et un autre peut utiliser un mot de passe différent pour apporter des modifications à l’autre feuille de calcul.

Mais que faire si vous souhaitez limiter entièrement l’accès aux feuilles de calcul?

Que faire si vous ne voulez même pas qu’un utilisateur non autorisé voie l’autre feuille de calcul? Ce besoin est un peu plus délicat à satisfaire, mais cela peut être fait. L’approche de base serait la suivante:

  1. Configurez un classeur contenant trois feuilles de calcul: une qui sera toujours ouverte, une pour l’utilisateur 1 et la troisième pour l’utilisateur 2.

  2. Masquer les feuilles de calcul pour l’utilisateur 1 et l’utilisateur 2.

  3. Créez un formulaire qui apparaît chaque fois que le classeur est ouvert, en demandant un nom d’utilisateur et un mot de passe.

  4. Créez un code de macro qui déverrouille et affiche la feuille de calcul appropriée en fonction du nom d’utilisateur et du mot de passe.

  5. Protégez l’intégralité du classeur (Outils | Protection | Protéger le classeur).

Les étapes 1, 2 et 5 sont assez faciles à faire et ont été couvertes dans d’autres numéros de ExcelTips. Cependant, le cœur de cette approche est les étapes 3 et 4. Vous pouvez créer un formulaire utilisateur en suivant ces étapes:

  1. Appuyez sur Alt + F11 pour afficher l’éditeur VBA.

  2. Dans l’éditeur VBA, choisissez Formulaire utilisateur dans le menu Insertion. Un nouveau formulaire utilisateur vierge s’affiche, ainsi que la boîte à outils du formulaire.

  3. À l’aide des contrôles de la boîte à outils du formulaire, ajoutez un contrôle TextBox dans lequel l’utilisateur entrera son nom d’utilisateur.

  4. Modifiez les propriétés du contrôle TextBox afin que son nom soit txtUser.

  5. À l’aide des contrôles de la boîte à outils du formulaire, ajoutez un contrôle TextBox dans lequel l’utilisateur entrera son mot de passe.

  6. Modifiez les propriétés du contrôle TextBox afin que son nom soit txtPass.

  7. Juste sous les contrôles TextBox, ajoutez un contrôle CommandButton.

  8. Modifiez les propriétés du contrôle CommandButton afin que son nom soit btnOK et sa légende soit OK.

Une fois votre formulaire utilisateur créé, vous êtes prêt à associer le code de macro aux contrôles que vous venez de placer. Assurez-vous que le formulaire utilisateur est sélectionné et appuyez sur F7 pour afficher la fenêtre Code pour le formulaire. La fenêtre peut contenir une ou deux lignes de code généré automatiquement. Remplacez-le par le code suivant:

Dim bOK2Use As Boolean

Private Sub btnOK_Click()

Dim bError As Boolean     Dim sSName As String     Dim p As DocumentProperty     Dim bSetIt As Boolean

bOK2Use = False     bError = True     If Len(txtUser.Text) > 0 And Len(txtPass.Text) > 0 Then         bError = False         Select Case txtUser.Text             Case "user1"

sSName = "u1sheet"

If txtPass.Text <> "u1pass" Then bError = True             Case "user2"

sSName = "u2sheet"

If txtPass.Text <> "u2pass" Then bError = True             Case Else                 bError = True         End Select     End If     If bError Then         MsgBox "Invalid User Name or Password"

Else         'Set document property         bSetIt = False         For Each p In ActiveWorkbook.CustomDocumentProperties             If p.Name = "auth" Then                 p.Value = sSName                 bSetIt = True                 Exit For             End If         Next p         If Not bSetIt Then             ActiveWorkbook.CustomDocumentProperties.Add _               Name:="auth", LinkToContent:=False, _               Type:=msoPropertyTypeString, Value:=sSName         End If

Sheets(sSName).Visible = True         Sheets(sSName).Unprotect (txtPass.Text)

Sheets(sSName).Activate

bOK2Use = True         Unload UserForm1     End If End Sub

Private Sub UserForm_Terminate()

If Not bOK2Use Then         ActiveWorkbook.Close (False)

End If End Sub

Le code ci-dessus fait plusieurs choses. Notez qu’il existe deux procédures: une plus longue qui s’exécute lorsque l’utilisateur clique sur le bouton OK dans le formulaire et une autre qui s’exécute lorsque le formulaire est terminé. Lorsque l’utilisateur clique sur le bouton OK, la procédure vérifie que la combinaison du nom d’utilisateur et du mot de passe est correcte. Si ce n’est pas le cas, l’utilisateur est averti. Si tel est le cas, le nom de feuille autorisé est stocké dans une variable de document et la feuille appropriée est affichée et non protégée.

Si vous souhaitez modifier les noms d’utilisateur, les noms de feuille et les mots de passe acceptables, vous pouvez le faire en apportant les modifications souhaitées dans la structure Sélectionner la cas en haut de ce code de macro.

La deuxième macro de ce code (UserForm_Terminate) entre en jeu si l’utilisateur essaie simplement de fermer votre formulaire sans entrer un nom d’utilisateur et un mot de passe. Dans ce cas, si le processus d’autorisation n’était pas terminé auparavant, le classeur est simplement fermé.

En plus du code ci-dessus, vous devrez également ajouter les macros suivantes au classeur lui-même. Ceux-ci ouvrent le formulaire utilisateur lorsque le classeur est ouvert et protègent la feuille de calcul lorsque le classeur est fermé.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim w As Worksheet     Dim bSaveIt As Boolean

bSaveIt = False     For Each w In Worksheets         If w.Visible Then             Select Case w.Name                 Case "u1sheet"

w.Protect ("u1pass")

w.Visible = False                     bSaveIt = True                 Case "u2sheet"

w.Protect ("u2pass")

w.Visible = False                     bSaveIt = True             End Select         End If     Next w     If bSaveIt Then         ActiveWorkbook.CustomDocumentProperties("auth").Delete         ActiveWorkbook.Save     End If End Sub

Private Sub Workbook_Open()

UserForm1.Show End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If Sh.Name <> "Main" Then         If Sh.Name <> ActiveWorkbook.CustomDocumentProperties("auth").Value Then             Sh.Visible = False             MsgBox "You don't have authorization to view that sheet!"

End If     End If End Sub

Lorsque l’utilisateur choisit de fermer le classeur – il en a terminé avec son travail – les feuilles de calcul applicables sont à nouveau protégées et masquées. (Si vous modifiez les noms de feuille utilisateur et les mots de passe, vous devrez également les modifier dans la structure Sélectionner le cas ici.) La macro supprime ensuite la propriété de document appropriée et enregistre le classeur.

Une autre macro intéressante ici est la procédure Workbook_SheetActivate.

Ceci est inclus dans le cas où un utilisateur essaie d’utiliser Format | Fiche | Afficher pour afficher la feuille de calcul d’un autre utilisateur. Dans ce cas, le nom de la feuille autorisée de l’utilisateur (stocké dans une variable de document lorsque l’utilisateur était initialement autorisé) est comparé à la feuille affichée. S’il ne correspond pas, l’utilisateur n’est pas autorisé à afficher la feuille de calcul. Notez également que cette procédure fait référence à une feuille de calcul appelée « Main ». Cette feuille de calcul est la troisième feuille de calcul mentionnée au début de cette astuce.

Cette feuille de calcul est également la première affichée lorsque le classeur est ouvert.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (1952) s’applique à Microsoft Excel 97, 2000, 2002 et 2003.