Un formulaire "Mot de passe" générique
L'idée est de construire un formulaire d'identification (demandant un mot de passe), pour limiter l'accès à d'autres formulaires ou états. Par exemple :
- L'utilisateur ouvre un formulaire [frmClients] ou un état [rptClients].
- Au préalable, un formulaire "Mot de passe" s'affiche. Tant que l'utilisateur n'a pas fourni un mot de passe correct, il n'accède pas à [frmClients] ou [rptClients].
L'autre objectif est que ce formulaire "Mot de passe" soit réutilisable : pas question d'en créer un pour chaque formulaire ou état à "protéger" !
Attention
La procédure développée dans les lignes qui suivent doit être vue comme une protection élémentaire. Si vous souhaitez vraiment sécuriser votre base de données, consultez plutôt l'article consacré à la sécurité Access.
Mise en place du module
Pour des raisons de programmation événementielle, nous simplifierons la gestion du mot de passe en passant par une variable globale, laquelle indiquera si le mot de passe a été trouvé ou non par l'utilisateur.
- Dans la fenêtre , cliquez sur l'onglet , puis sur le bouton .
- Tapez le code suivant dans le module :
Public blnPasswordOK As Boolean - Enregistrez le module sous le nom mod Password, par exemple.
On déclare ici une variable globale (donc visible depuis tout endroit de la base de données). Cette variable est booléenne : elle vaudra False (Faux) tant que le mot de passe n'est pas trouvé, et True (Vrai) si le mot de passe a été tapé correctement.
Mise en place du formulaire
Construisez maintenant le formulaire d'identification.
Le formulaire comporte 3 objets principaux, détaillés ci-dessous.
Il sera enregistré sous le nom frm Password.

| Nom de l'objet | Type d'objet | Remarques |
| txtMotDePasse | Zone de texte |
C'est dans cette zone que sera tapé le mot de passe. Faites apparaître les propriétés de cet objet et faites en sorte que la propriété Masque de saisie soit réglée sur "Mot de passe" (ceci a pour effet d'afficher uniquement des astérisques lors de la saisie). |
| btnOK | Bouton de commande | Le bouton de validation. C'est ce bouton qui doit vérifier que le mot de passe saisi est correct. |
| btnAnnuler | Bouton de commande | Un bouton pour fermer le formulaire si on ne connaît pas le mot de passe. |
Programmation du formulaire
Ouverture du formulaire
Si le formulaire frm Password s'ouvre, c'est qu'un mot de passe va être demandé puis vérifié. On suppose donc qu'à l'ouverture, le mot de passe n'est pas encore connu.
- Ouvrez le formulaire frm Password en mode Création.
- Faites apparaître les propriétés du formulaire, et cliquez sur l'onglet .
- "Entrez" dans l'événement Sur ouverture, et faites en sorte qu'il reprenne le code suivant :
Private Sub Form_Open(Cancel As Integer)
' Réinitialiser l'état du mot de passe
' (blnPasswordOK est une variable globale)
blnPasswordOK = False
End Sub Le code du bouton OK
- Faites apparaître les propriétés du bouton btnOK, et cliquez sur l'onglet .
- "Entrez" dans l'événement Sur clic, et tapez ce qui suit :
Private Sub btnOK_Click()
If IsNull(Me.txtMotDePasse) Then
MsgBox "Tapez un mot de passe !", vbInformation
Me.txtMotDePasse.SetFocus
Exit Sub
End If
If Me.txtMotDePasse = "TopSecret" Then
' Fermer la boîte de dialogue "Identification"
DoCmd.Close
blnPasswordOK = True
Else
MsgBox "Mot de passe incorrect.", vbExclamation
Me.txtMotDePasse.SetFocus
End If
End Sub
Comme vous le voyez, 2 conditions sont appliquées :
- La première vérifie qu'un mot de passe a bien été tapé, et ramène sinon sur la zone de saisie.
- La seconde vérifie que le mot de passe est exact, et ferme le formulaire si c'est le cas. Sinon, un message est affiché, et l'utilisateur est à nouveau ramené sur la zone de saisie.
Rappel
Comme il a été dit plus haut, il ne s'agit pas d'une sécurité ultime ! Vous notez que le mot de passe est simplement tapé en clair dans le code VB.
Vous pouvez améliorer le tout en créant une table de mots de passe, et en la lisant par ADO, DAO, SQL ou une fonction de domaine (ce que vous voulez, koä !), mais dans ce cas, n'oubliez pas que l'utilisateur peut y accéder encore plus facilement.
Je vous avais prévenu : le mieux est de passer par la "sécurité utilisateur" :o) !
Le code du bouton Annuler
Ce code sert juste à fermer le formulaire. Il suffit donc d'écrire :
DoCmd.CloseRappelez-vous que la variable blnPasswordOK a été réglée à False lors de l'ouverture du formulaire. Par conséquent, un appui sur le bouton Annuler suppose également que l'utilisateur n'a pas trouvé le mot de passe.
Limiter l'accès à un formulaire ou à un état
Maintenant que la gestion du mot de passe est en place, il suffit d'y faire appel lorsqu'on ouvre un formulaire ou un état quelconque :
- Ouvrez un formulaire ou un état.
- Faites apparaître les propriétés (notamment les événements) de ce formulaire ou de cet état.
- Programmez l'événement Sur ouverture comme suit :
Private Sub Form_Open(Cancel As Integer)
DoCmd.OpenForm "frm Password", acNormal, , , , acDialog
Cancel = Not blnPasswordOK
End Sub
Le paramètre acDialog est important :
- acDialog ouvre un formulaire en mode "Boîte de dialogue" (formulaire dit "modal"). Le premier effet est qu'il est impossible de faire quoi que ce soit tant que frm Password n'est pas fermé.
- Le second effet se produit dans le code VB ci-dessus. La ligne Cancel = Not blnPasswordOK ne sera exécutée qu'à la fermeture de frm Password. De cette façon, on est sûr que le résultat de la variable blnPasswordOK a été défini par frm Password.
Essayez d'enlever acDialog pour voir !
Par ailleurs, c'est la ligne Cancel = Not blnPasswordOK qui annule l'ouverture du formulaire ou de l'état. Cancel est une variable analysée par Access à la sortie de l'événement Form_Open. Si Cancel = True, l'événement est annulé (ou plutôt, l'ouverture est annulée). Si Cancel = False, les événements s'enchaînent comme d'habitude. Dans notre cas, il faut annuler si le mot de passe n'a pas été trouvé.
Tester !
Double-cliquez maintenant sur le formulaire ou l'état "sécurisé" : la boîte d'identification s'affiche au préalable, et vous devez taper le mot de passe correct. Ceci fonctionne également si le formulaire ou l'état sont ouverts via Visual Basic.
Les touches finales
Bien sûr, ceci n'empêche pas d'ouvrir vos formulaires en mode Création, ni d'accéder aux tables ou aux requêtes. Pour améliorer le tout, vous pouvez enregistrer votre base au format MDE (menu Outils / Utilitaires de base de données ; ceci bloquera l'accès aux formulaires, états et modules ; conservez surtout votre original MDB !).
Encore une fois, tout ceci n'est qu'une protection élémentaire, mais il est vrai que ça peut suffire dans certains cas de figure... Bons tests !


Dans cet article...
Article mis à jour le 17/02/2009