Toute l'actualité de [self-access.com] en direct sur votre ordinateur !  Vous êtes ici : Accueil » Access » Tutoriaux » Formulaire "Mot de passe"Connexion
 


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.

  1. Dans la fenêtre Base de données, cliquez sur l'onglet Modules, puis sur le bouton Nouveau.
  2. Tapez le code suivant dans le module :
    Public blnPasswordOK As Boolean
  3. 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.

Vers le haut

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.

  1. Ouvrez le formulaire frm Password en mode Création.
  2. Faites apparaître les propriétés du formulaire, et cliquez sur l'onglet Evénement.
  3. "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

  1. Faites apparaître les propriétés du bouton btnOK, et cliquez sur l'onglet Evénement.
  2. "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.Close

Rappelez-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 :

  1. Ouvrez un formulaire ou un état.
  2. Faites apparaître les propriétés (notamment les événements) de ce formulaire ou de cet état.
  3. 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é.

Vers le haut

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 !

Vers le haut


Mes livres sur Access...
[cliquez pour plus d'infos]





Hit-Parade 
 
[ Copyright 1997-2018 hervé inisan, self-access.com Reproduction interdite ]