Empêcher à un utilisateur de cliquer sur la croix d'un formulaire [Résolu]

Signaler
Messages postés
49
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
7 juillet 2005
-
Messages postés
2
Date d'inscription
jeudi 18 mars 2004
Statut
Membre
Dernière intervention
27 octobre 2004
-
Bonjour à tous,

je suis en train de réaliser des formulaires sous Access, et j'essaye d'implémenter un code pour empêcher l'utilisateur de fermer mon formulaire et/ou fermer access, en cliquant sur les croix.

j'ai mis le code suivant, dans mon code VB :

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox "Impossible de fermer en cliquant sur la croix."
Cancel = True
End If
End Sub

mais je peux quand même fermer le formulaire avec les croix, et de plus, même en mettant un MsgBox au début de ma procédure, rien ne se passe.

Comment faire pour réaliser ceci ? Est ce que j'utilise la bonne méthode pour l'utilisation de Queryclose ?

Merci par avance

Slyv

11 réponses

Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
C'est bon je pense que j'ai trouvé,

tu ouvre ton formulaire en mode création,

tu cliques droit dans le gris sour ton formulaire pour ouvrir les propriétés de la form.
Ensuite dans l'onglet format tu as tout ce qu'il faut pour paramétrer ton affichage.

ps : je vais te filer les n° car moi c'est access en allemand donc ca va pas te parler bcp :)

12 éme propriété -> minmax... -> oui -> tu as les bouton minimiser, agrandir, -> non, il ne sont pas là !
13 ème propriété -> fermer qqch -> oui , tu peux fermer, -> non, la croix est disabled comme je le disais précédemment

:)

Si, c'est la solution que tu voulais, n'oublie pas d'accepter la réponse pour indiquer que le sujet est clos :)

++
Syl20
ps : un sylvain en aide forcément un autre :)
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 123 internautes nous ont dit merci ce mois-ci

Messages postés
36
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
28 septembre 2004

Bonjour,
Je n'ai pas Acces d'instaler mais, regarde si il n'y aurait pas l'événement Unload a la place...

Private Sub UserForm_Unload()
Messages postés
49
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
7 juillet 2005

Bonjour,

L'événement UserForm_Unload n'existe pas. Je peux utiliser l'événement Form_Unload, mais cet événement ne prend que cancel en paramètre et je ne peux donc pas utiliser le CloseMode :(
Messages postés
36
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
28 septembre 2004

Mais tu dit que ton msgbox ne marche pas..
Est tu sur que cet événement est relier a la fermeture de la form ?
Car pour moi il s'agirais de la fermeture d'un query quelquonque (Requete) Donc le cancel cancelerai ta demande de fermer le query....

Essai avec ceci et redonne moi des nouvelle
Private Sub Form_Unload(Cancel As Integer)
Cancel = True
End Sub

Et tu pourais m'expliquer la différence entre Form et UserForm ?
Messages postés
49
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
7 juillet 2005

En spécifiant le bout de code que tu m'as donné avec l'événement unload, je ne peux pas fermer le formulaire, ce qui est normal vu que j'ai mis le paramètre cancel à true ;)

Donc ça marche mais c pas tout à fait ce que je veux faire ...

En faite, sur mon formulaire, j'ai 2 boutons :

Le premier qui a comme objectif de fermer access : DoCmd.Quit
Le second qui a comme objectif de fermer access : DoCmd.Close

Mais en faite, je souhaite exécuter une fonction de test avant d'effectuer l'action, de fermeture du formulaire ou de access.

En gros, je clique sur le bouton, la fonction de test me retourne un message d'erreur éventuel. Si y'a un message d'erreur, je n'effectue pas le quittage d'access ou la fermeture du formulaire, sinon je le fais.

Comme je ne sais pas récupérer le déclenchement d'un événement, je souhaites donc pour cela bloquer purement et simplement les clics sur les croix, et ensuite, faire mon code dans mes 2 boutons de la façon suivante :

private sub quitterAccess_Click()
récupération du résultat de la fonction de test
si résultat positif, alors quitter access, sinon afficher un message
end sub

et même principe pour la fermeture du formulaire.

donc en faite, ça serait pas l'événement unload puisque j'ai une action différente selon ce que je veux faire.

Enfin, je ne connais pas la différence entre Form et UserForm, je commence à peine le VB et je n'ai pas encore vu ce point

Slyv
Messages postés
497
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
Il existe pas un moyen de disable la croix ?

elle devient un peu grise, et plus rouge. Je crois que j'ai déjà vu ca. C'est-ce que tu cherches ou tu veux absolument qu'elle soit enabled et que ca marque "fermeture impossible !" ? ? ?

++
sylvain
Messages postés
49
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
7 juillet 2005

Non j'ai pas besoin du message ;)

Si elle est disable tout le temps, c bon.

L'essentiel étant qu'on puisse pas les cliquer, ou que si on les clique, ça rappel l'utilisateur à l'ordre ;)

++

Slyv
Messages postés
36
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
28 septembre 2004

si jamais tu ne pouvais pas disabler la croix...

Public Function TestFin() As Boolean
'Ici tu place ton code et a la fin tu dit si c'est True ou false
'TestFin = True
'TestFin = False
End Function

Private Sub quitterAccess_Click()
If TestFin = True then
DoCmd.Quit
DoCmd.Close
Else
MsgBox "Ton Message d'erreur"
End If
end sub
Messages postés
49
Date d'inscription
lundi 19 mai 2003
Statut
Membre
Dernière intervention
7 juillet 2005

Salut,

Déjà désolé pour le temps de réponse à ton message el_teedee.

En faite, je développe une application VB / Access au boulot, donc une fois que je suis sorti des murs de la boîte, je fais autre chose, et en l'occurence là, c'était le week end :) c toujours d'ailleurs, lol.

J'ai quand même tester ta solution, et oui la solution que tu me donnes me convient parfaitement !!!!!

En mode pleine écran, le formulaire n'a plus la jolie croix (disparu :p), et si l'utilisateur réduit le formulaire, la croix est puement et simplement disabled :) donc c super cool !!! ^^

Maintenant, j'espère que demain, quand je retournerais sur mon ACCESS 97, ce sera la même chose (chez moi j'ai Access 2003).

Merci à toi, et merci à vous tous pour vos réponses :)

Slyv
Messages postés
940
Date d'inscription
jeudi 20 février 2003
Statut
Membre
Dernière intervention
3 février 2011
7
Pour faire disparaitre les croix des formulaires sous Access, il suffit d'aller dans les propriété du formulaire et de mettre "non" à "Bouton Fermer". Ainsi le bouton est disabler :)
Par contre, je pense qu'il n'est pas possible d'empêcher l'utilisateur de fermer Access, tout ce que je vois comme solution serait de faire un formulaire en fenêtre indépendante qui chevauche le formulaire d'Access et donc le cacherait. Mais bon...
TBBUIM
Messages postés
2
Date d'inscription
jeudi 18 mars 2004
Statut
Membre
Dernière intervention
27 octobre 2004

Salut,

Tu peux faire un copier coller de ce qui suit.... ca fonctionne tres bien.

Tu dois tout dabord créer un module dans lequel tu places le code suivant
-------------------------------------------------------------------------

Option Compare Database

Private Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Public Const SC_CLOSE = &HF060&
Public Const MF_BYCOMMAND = &H0&

Public Sub DesacFermeture()
Dim hSysMenu As Long

hSysMenu = GetSystemMenu(Application.hWndAccessApp, False)
RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND

End Sub

Ensuite, a l'ouverture de ton formulaire ou de ta bd tu appels ta fonction en tapant
---------------------------------------------------------------------------

'Appel de la fonction désactivant la croix de fermeture
DesacFermeture