Empêcher l’utilisateur de quitter l’application
Comment faire en sorte que l’utilisateur ne puisse pas quitter l’application Access en cliquant sur la croix de fermeture ?
Une solution
Il y a plusieurs approches possibles. L’une d’elles consiste à désactiver la croix de fermeture à l’aide des API Windows. Mais l’inconvénient est qu’elle ne sera pas nécessairement compatible avec Access 2007, qui ne gère plus les menus de la même manière. Et il n’existe pas non plus d’événement Sur fermeture de la base de données
, qui aurait pu nous simplifier la vie !
Par contre, on peut aménager ce principe, parce que les formulaires, eux, ont un événement Sur libération
(Unload
) qui se produit avant la fermeture du formulaire, et qui peut être annulé. Et si on annule la fermeture d’un formulaire, on annule fatalement celle de la base de données !
Il nous suffit donc de prévoir un formulaire dont le seul rôle sera de « surveiller » sa propre fermeture…
Le formulaire
- Construisez un formulaire quelconque (en mode Création, simplement).
Ce formulaire s’appellefrm Shutdown
pour la suite. - Paramétrez ce formulaire comme vous le souhaitez. De toute façon, l’utilisateur ne le verra pas !
- Programmez l’événement
Sur libération
du formulaire comme ceci :
1 2 3 4 5 6 |
Private Sub Form_Unload(Cancel As Integer) If MsgBox("Souhaitez-vous vraiment quitter l'application ?", _ vbQuestion + vbYesNo) = vbNo Then Cancel = True End If End Sub |
La macro d’ouverture
Il s’agit ensuite d’ouvrir ce formulaire à chaque démarrage de la base de données :
- Construisez une nouvelle macro.
- Ajoutez l’action suivante à votre macro :
Notez que le formulaire est ouvert en mode Masqué.
Mon exemple de macro contient 2 instructionsOuvrirFormulaire
. La seconde n’a aucun rôle ici, elle ouvre un formulaire de rappel de clients dont il a été question dans cet article. - Enregistrez votre macro sous le nom
AutoExec
. - Fermez votre base de données, rouvrez-la, et essayez de quitter !
AutoExec
(les majuscules/minuscules n’étant pas importantes), elle est exécutée automatiquement à l’ouverture de la base de données. Il ne peut y avoir qu’une seule macro AutoExec
, bien sûr, mais celle-ci peut exécuter plusieurs actions.