OVH Cloud OVH Cloud

Fermeture de formulaire

10 réponses
Avatar
Julien
Bonjour,

je souhaiterais pendant la fermeture d'un formule faire apparaitre une
msgbox qui donne la possibilite de changer d'avis : option 1, oui, tout e
passe comme prevu. Option 2, changement d'avis, on revient sur le formulaire.

Voila, ce que j'ai tape :


Private Sub Form_Close()

Dim Msg, Style, Title, Response, MyString

Msg = "bla bla"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Avertissement"
Response = MsgBox(Msg, Style, Title)

If Response = vbYes Then
MyString = "Yes"
DoCmd.Close acForm, "form", acSaveYes
Else
MyString = "No"
DoCmd.CancelEvent
End If

End Sub



Et ben, le no ne marche pas et le formulaire se ferme tout de meme, meme en
rajoutant Cancel = True apres ou a la place de DoCmd.CancelEvent.

Je vous remercie d'avance pour toute l'aide que vous pouvez m'apporter.

10 réponses

Avatar
Raymond [mvp]
bonjour.

il faut placer ta procédure sur l'évènement Form_Unload:
Private Sub Form_Unload(Cancel As Integer)
et mettre la ligne:
Cancel = True
si tu veux arrêter la fermeture et revenir dans le formulaire.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Julien" a écrit dans le message de news:

Bonjour,

je souhaiterais pendant la fermeture d'un formule faire apparaitre une
msgbox qui donne la possibilite de changer d'avis : option 1, oui, tout e
passe comme prevu. Option 2, changement d'avis, on revient sur le
formulaire.

Voila, ce que j'ai tape :


Private Sub Form_Close()

Dim Msg, Style, Title, Response, MyString

Msg = "bla bla"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Avertissement"
Response = MsgBox(Msg, Style, Title)

If Response = vbYes Then
MyString = "Yes"
DoCmd.Close acForm, "form", acSaveYes
Else
MyString = "No"
DoCmd.CancelEvent
End If

End Sub



Et ben, le no ne marche pas et le formulaire se ferme tout de meme, meme
en
rajoutant Cancel = True apres ou a la place de DoCmd.CancelEvent.

Je vous remercie d'avance pour toute l'aide que vous pouvez m'apporter.




Avatar
Marc-Antoine
"Julien" a écrit dans le message de
news:
Bonjour,

je souhaiterais pendant la fermeture d'un formule faire apparaitre une
msgbox qui donne la possibilite de changer d'avis : option 1, oui,
tout e
passe comme prevu. Option 2, changement d'avis, on revient sur le
formulaire.

Voila, ce que j'ai tape :

Private Sub Form_Close()

Dim Msg, Style, Title, Response, MyString

Msg = "bla bla"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Avertissement"
Response = MsgBox(Msg, Style, Title)

If Response = vbYes Then
MyString = "Yes"
DoCmd.Close acForm, "form", acSaveYes
Else
MyString = "No"
DoCmd.CancelEvent
End If

End Sub



Et ben, le no ne marche pas et le formulaire se ferme tout de meme,
meme en
rajoutant Cancel = True apres ou a la place de DoCmd.CancelEvent.

Je vous remercie d'avance pour toute l'aide que vous pouvez
m'apporter.


Bonjour,
Par exemple, dans une macro, Action : Fermer - Condition : BoîteMsg
("Message personnalisé" ,1) = 1




Avatar
Julien
Quelle chance, la mega star d'Access vient m'aider en personne, quel honneur.

Bonjour Raymond, donc,

Voila, j'ai fa


bonjour.

il faut placer ta procédure sur l'évènement Form_Unload:
Private Sub Form_Unload(Cancel As Integer)
et mettre la ligne:
Cancel = True
si tu veux arrêter la fermeture et revenir dans le formulaire.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Julien" a écrit dans le message de news:

Bonjour,

je souhaiterais pendant la fermeture d'un formule faire apparaitre une
msgbox qui donne la possibilite de changer d'avis : option 1, oui, tout e
passe comme prevu. Option 2, changement d'avis, on revient sur le
formulaire.

Voila, ce que j'ai tape :


Private Sub Form_Close()

Dim Msg, Style, Title, Response, MyString

Msg = "bla bla"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Avertissement"
Response = MsgBox(Msg, Style, Title)

If Response = vbYes Then
MyString = "Yes"
DoCmd.Close acForm, "form", acSaveYes
Else
MyString = "No"
DoCmd.CancelEvent
End If

End Sub



Et ben, le no ne marche pas et le formulaire se ferme tout de meme, meme
en
rajoutant Cancel = True apres ou a la place de DoCmd.CancelEvent.

Je vous remercie d'avance pour toute l'aide que vous pouvez m'apporter.









Avatar
Julien
Desole, le precedent message etait envoye par erreur.

Donc, je te disais que j'ai fait comme tu as dis et ca marche super bien,
mais simplement, et la, l'histoire se complique : En realite, mon objectif
est qu'a la fin de mon formulaire, donc a sa fermeture, l'employe se voit
afficher un message qui lui indiquent qu'il a bien rentre ses huit heures (Il
s'agit d'une pointeuse moderne) ou non et ensuite un deuxieme message qui
indique, et la, c'etait notre cas, si il veut enregistre ou continuer la
saisie.

Pour le premier message, j'ai ecris une MSGbox a l'evenement fermeture qui
fait reference a une requete, et la ca marche.

Pour le deuxieme message, on vient de le voir, il est en unload.

Donc, separement, ca marche. Mais ensemble, mon deuxieme apparait avant le
premier (Unload se situe avant Fermeture)

Donc, comment je peux faire ???

Julien

PS : Je viens de realiser que je pouvais tout simplement transferer mon
premier message sur le Unload. je viens de le faire et ca marche super bien.
Merci moi, alors et merci Raymond tout de meme.

Julien, celui qui ecrit plus vite qu'il reflechis.

PSS : J'ai essaye la solution de Marc Antoine, mais ca ne marchait pas,
Access n'etait pas content de la syntaxe de la macro, merci, quand meme.
Avatar
Julien
Rebonjour Raymond,

et oui, j'importune une nouvelle fois la star du forum. (Qui sais peut etre
que la flatterie, ca marche)
Je me suis repenche sur la question qui ne devait plus en etre une, mais O
Malheur, ca ne marche plus ( ou plutot ca n'a jamais marche parce que que je
n'avais peut etre pas essaye a fond).

Lors de l'enregistrement du form, il refuse d'appliquer la close, invoque
l'erreur 2501 et interrompt l'action Close.

Question = C'est grave docteur?

Voici, le bebe, (C'est le meme que toute a l'heure)

Dim Msg, Style, Title, Response, MyString

Msg = "Wollen Sie abspeichern ?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Avertissement"
Response = MsgBox(Msg, Style, Title)

If Response = vbYes Then
MyString = "Yes"
DoCmd.Close acForm, "Leistungen", acSaveYes
Else
MyString = "No"
Cancel = True
End If

Et mon formulaire s'appelle bien Leistungen (C'est de l'allemand, c'est pas
de ma faute)

Voila, merci d'avance en tout cas.
Avatar
Raymond [mvp]
étant dans l'évènement Form_Unload, il ne faut pas fermer le formulaire, il
est déjà en cours de fermeture.
If Response = vbYes Then
MyString = "Yes"

' ' DoCmd.Close acForm, "Leistungen", acSaveYes ' supprimer cette
ligne

Else
MyString = "No"
Cancel = True
End If

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Julien" a écrit dans le message de news:

Rebonjour Raymond,



Avatar
Julien
Re,

Voici mon code :

Dim Msg, Style, Title, Response, MyString

Msg = "Wollen Sie abspeichern ?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Meldung"
Response = MsgBox(Msg, Style, Title)

If Response = vbYes Then
MyString = "Yes"

Else
MyString = "No"
Cancel = True
End If

End Sub


J'ai bien supprime la ligne que tu me la dis, il n'y a plus d'erreur a
l'application, mais la simplement, il ne ferme plus du tout et je suis oblige
de tuer la tache. Ma question est donc la suivante : Qu'elle est donc la
ligne magique qui permet de fermer le form bien qu'on soit en phase de Unload
et pas de Close comme tu la si bien dit?

Je te remercie d'avance
Avatar
Raymond [mvp]
Si tu es dans l'évènement Form_Unload, il ne faut rien, le fait de terminer
la sub va fermer le formulaire. si tu mets cancel = true le formulaire ne se
ferme pas et l'application non plus.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Julien" a écrit dans le message de news:

Re,

Voici mon code :

Dim Msg, Style, Title, Response, MyString

Msg = "Wollen Sie abspeichern ?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Meldung"
Response = MsgBox(Msg, Style, Title)

If Response = vbYes Then
MyString = "Yes"

Else
MyString = "No"
Cancel = True
End If

End Sub


J'ai bien supprime la ligne que tu me la dis, il n'y a plus d'erreur a
l'application, mais la simplement, il ne ferme plus du tout et je suis
oblige
de tuer la tache. Ma question est donc la suivante : Qu'elle est donc la
ligne magique qui permet de fermer le form bien qu'on soit en phase de
Unload
et pas de Close comme tu la si bien dit?

Je te remercie d'avance


Avatar
Julien
Re, J'ai pris en consideration ce que tu as dis

Si tu es dans l'évènement Form_Unload, il ne faut rien, le fait de terminer
la sub va fermer le formulaire. si tu mets cancel = true le formulaire ne se
ferme pas et l'application non plus.



Ma ligne est donc maintenant :

Dim Msg, Style, Title, Response, MyString

Msg = "Wollen Sie abspeichern ?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Meldung"
Response = MsgBox(Msg, Style, Title)

If Response = vbNo Then

MyString = "No"
Cancel = True

End If

End Sub

Ou alors, j'ai complete :

Bla bla bla

MyString = "No"
Cancel = True

Else

MyString = "Yes"

End If

End Sub


Et bien, franchement, ca marche pas, j'ai beau lui dire de continuer la
procedure, il n'en fait qu'a sa tete, il refuse de fermer le procedure.

Que faire, docteur ?

Merci d'avance

Avatar
Raymond [mvp]
peux-tu m'envoyer ton formulaire, avec les objets qui vont autour, pour
jeter un oeil ? enlèves XYZ. (le point aussi) dans mon adresse.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Julien" a écrit dans le message de news:

Re, J'ai pris en consideration ce que tu as dis

Si tu es dans l'évènement Form_Unload, il ne faut rien, le fait de
terminer
la sub va fermer le formulaire. si tu mets cancel = true le formulaire ne
se
ferme pas et l'application non plus.



Ma ligne est donc maintenant :

Dim Msg, Style, Title, Response, MyString

Msg = "Wollen Sie abspeichern ?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "Meldung"
Response = MsgBox(Msg, Style, Title)

If Response = vbNo Then

MyString = "No"
Cancel = True

End If

End Sub

Ou alors, j'ai complete :

Bla bla bla

MyString = "No"
Cancel = True

Else

MyString = "Yes"

End If

End Sub


Et bien, franchement, ca marche pas, j'ai beau lui dire de continuer la
procedure, il n'en fait qu'a sa tete, il refuse de fermer le procedure.

Que faire, docteur ?

Merci d'avance