OVH Cloud OVH Cloud

Opération sur fermeture d'un formulaire

15 réponses
Avatar
Codial
Bonsoir,

voilà sur des form j'ai un bouton fermer avec un code qui teste si des
mofications ont eu lieu sur l'enregistrement en cours.

If Me.Dirty Then
If MsgBox("Voulez vous enregistrer les modifications en cours ?",
vbQuestion + vbYesNo, "Enregistrer?") = vbNo Then
Me.Undo
End If
End If

If Me.NewRecord Then
If MsgBox("Voulez vous enregistrer les saisies en cours ?",
vbQuestion + vbYesNo, "Enregistrer?") = vbNo Then
Me.Undo
End If
End If

Me.AllowEdits = False

Voulant faire l'économie d'un bouton je me suis dis je vais le mettre
dans l''évènement Close de mon form
Stupeur! Il passe bien sur le code mais pour Access il n'y a pas de
modif (Alors qu'évidemment j'en ai faites!)

J'ai essayé sur tout les évènements de fermeture mais rien n'y fait!

Je suis surpris qu'en cliquant sur mon bouton ça marche mais en en
cliquant sur la crois fermer!

Quelqu'un peut m'expliquer ?

Cordialement

Codial

10 réponses

1 2
Avatar
3stone
Salut,

"Codial"
voilà sur des form j'ai un bouton fermer avec un code qui teste si des
mofications ont eu lieu sur l'enregistrement en cours.
<snip>



Le bon événement pour tester cela sans bouton est le

Before Update (Avant mise à jour) du formulaire.

Et tu peux même t'économiser le test sur le "Dirty"
puisque la mise à jour n'a lieu _que_si_ il y a eu
soit modification soit nouvel enregistrement.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Codial
Bonjour,

effectivement j'avais oublié cet évènement !!

Quand à l'économie du Dirty je ne pense pas car il faut bien que je teste
pour envoyer un message a l'utilisateur qu'il a me modification en cours?

Mais ça marche maintenant

encore merci

Codial

"3stone" a écrit dans le message de news:

Salut,

"Codial"
voilà sur des form j'ai un bouton fermer avec un code qui teste si des
mofications ont eu lieu sur l'enregistrement en cours.
<snip>



Le bon événement pour tester cela sans bouton est le

Before Update (Avant mise à jour) du formulaire.

Et tu peux même t'économiser le test sur le "Dirty"
puisque la mise à jour n'a lieu _que_si_ il y a eu
soit modification soit nouvel enregistrement.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome







Avatar
3stone
re,

"Codial"
Quand à l'économie du Dirty je ne pense pas car il faut bien que je teste
pour envoyer un message a l'utilisateur qu'il a me modification en cours?



Tester quoi, que l'enregistrement est Dirty ?

Bien sûr qu'il est Dirty, puisque Access veut en faire la mise à jour,
sinon tu ne te retrouverais pas dans cet événement... ;-)


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Codial
Bonsoir,

en fait je ne comprends pas bien ce que tu veux me dire, il se peut que je
me plante ;-)
ce que je veux faire c'est que si l'utilisateur clique sur la croix de
fermeture il est un message d'alerte lui indiquant qu'il a une modif ou un
ajout en cours AVANT de valider l'enregistrement et je ne vois pas d'autre
méthode que Dirty.

Cordialement

Codial


"3stone" a écrit dans le message de news:

re,

"Codial"
Quand à l'économie du Dirty je ne pense pas car il faut bien que je
teste


pour envoyer un message a l'utilisateur qu'il a me modification en
cours?




Tester quoi, que l'enregistrement est Dirty ?

Bien sûr qu'il est Dirty, puisque Access veut en faire la mise à jour,
sinon tu ne te retrouverais pas dans cet événement... ;-)


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome






Avatar
3stone
re,

"Codial"
en fait je ne comprends pas bien ce que tu veux me dire, il se peut que je
me plante ;-)
ce que je veux faire c'est que si l'utilisateur clique sur la croix de
fermeture il est un message d'alerte lui indiquant qu'il a une modif ou un
ajout en cours AVANT de valider l'enregistrement et je ne vois pas d'autre
méthode que Dirty.



Bon. Tu as bien un formulaire pour faire un essai ?

Dans l'événement "Avant mise à jour" du formulaire, tu mets:

Msgbox "Il y a eu modification..."
Cancel = True

Remets toi en mode affichage du formulaire.
Passe quelques enregistrements en revue (ou ferme le formulaire).
Bien. Rien ne se passe.

Modifie une zone de texte quelconque et essaie de passer
à l'enregistrement suivant (ou de fermer le formulaire).
... Le msgbox te donne l'avertissement !!
Et tu ne peux PAS continuer/sortir...

Cela veut dire, que dès qu'il y a eu modification dans une zone
de texte liée à la source du formulaire, Access "passe" dans
l'événement "Avant mise à jour".

Il suffit donc de mettre le code de vérification dans cet événement.

L'événement "Si modification" (Form_Dirty) est plutôt à utiliser
lorsque l'on veut exécuter du code dès qu'une modification survient
mais que ce code ne concerne pas directement l'enregistrement courant.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Codial
Bonjour 3stone,

je te remercie pour cette explication détaillée. Effectivement ça marche
bien et je peux ainsi faire l'économie d'un Dirty. Je vais modifier mes
sortie de formulaires en conséquence.

Encore merci

Codial


"3stone" a écrit dans le message de news:
#
re,

"Codial"
en fait je ne comprends pas bien ce que tu veux me dire, il se peut que
je


me plante ;-)
ce que je veux faire c'est que si l'utilisateur clique sur la croix de
fermeture il est un message d'alerte lui indiquant qu'il a une modif ou
un


ajout en cours AVANT de valider l'enregistrement et je ne vois pas
d'autre


méthode que Dirty.



Bon. Tu as bien un formulaire pour faire un essai ?

Dans l'événement "Avant mise à jour" du formulaire, tu mets:

Msgbox "Il y a eu modification..."
Cancel = True

Remets toi en mode affichage du formulaire.
Passe quelques enregistrements en revue (ou ferme le formulaire).
Bien. Rien ne se passe.

Modifie une zone de texte quelconque et essaie de passer
à l'enregistrement suivant (ou de fermer le formulaire).
... Le msgbox te donne l'avertissement !!
Et tu ne peux PAS continuer/sortir...

Cela veut dire, que dès qu'il y a eu modification dans une zone
de texte liée à la source du formulaire, Access "passe" dans
l'événement "Avant mise à jour".

Il suffit donc de mettre le code de vérification dans cet événement.

L'événement "Si modification" (Form_Dirty) est plutôt à utiliser
lorsque l'on veut exécuter du code dès qu'une modification survient
mais que ce code ne concerne pas directement l'enregistrement courant.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome








Avatar
Codial
Re 3stone,

je revient sur l'annulation d'une modification d'enregistrement
Tu me dis:

L'événement "Si modification" (Form_Dirty) est plutôt à utiliser
lorsque l'on veut exécuter du code dès qu'une modification survient
mais que ce code ne concerne pas directement l'enregistrement courant.


Sur mes form j'ai mis un bouton pour "annuler" les modif en cas d'erreur et
j'ai utiliser Dirty..
Quelle est donc l'autre commande pour annuler les modifications de
l'enregistrement courant ?

D'avance merci

Codial

"3stone" a écrit dans le message de news:
#
re,

"Codial"
en fait je ne comprends pas bien ce que tu veux me dire, il se peut que
je


me plante ;-)
ce que je veux faire c'est que si l'utilisateur clique sur la croix de
fermeture il est un message d'alerte lui indiquant qu'il a une modif ou
un


ajout en cours AVANT de valider l'enregistrement et je ne vois pas
d'autre


méthode que Dirty.



Bon. Tu as bien un formulaire pour faire un essai ?

Dans l'événement "Avant mise à jour" du formulaire, tu mets:

Msgbox "Il y a eu modification..."
Cancel = True

Remets toi en mode affichage du formulaire.
Passe quelques enregistrements en revue (ou ferme le formulaire).
Bien. Rien ne se passe.

Modifie une zone de texte quelconque et essaie de passer
à l'enregistrement suivant (ou de fermer le formulaire).
... Le msgbox te donne l'avertissement !!
Et tu ne peux PAS continuer/sortir...

Cela veut dire, que dès qu'il y a eu modification dans une zone
de texte liée à la source du formulaire, Access "passe" dans
l'événement "Avant mise à jour".

Il suffit donc de mettre le code de vérification dans cet événement.

L'événement "Si modification" (Form_Dirty) est plutôt à utiliser
lorsque l'on veut exécuter du code dès qu'une modification survient
mais que ce code ne concerne pas directement l'enregistrement courant.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome








Avatar
3stone
Salut,

"Codial"
Sur mes form j'ai mis un bouton pour "annuler" les modif en cas d'erreur et
j'ai utiliser Dirty..


? Dirty pour annuler ?


Quelle est donc l'autre commande pour annuler les modifications de
l'enregistrement courant ?



Tant que la mise à jour n'a pas eu lieu, un simple

Me.Undo doit suffire.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

Avatar
Codial
Oui exact merci

Codial

"3stone" a écrit dans le message de news:
#
Salut,

"Codial"
Sur mes form j'ai mis un bouton pour "annuler" les modif en cas d'erreur
et


j'ai utiliser Dirty..


? Dirty pour annuler ?


Quelle est donc l'autre commande pour annuler les modifications de
l'enregistrement courant ?



Tant que la mise à jour n'a pas eu lieu, un simple

Me.Undo doit suffire.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome






Avatar
Codial
Bonjour 3stone

Je reviens sur mon pb de fermeture de form en cours de modification ou de
d'ajout

J'ai bien compris ce que tu m'as expliqué mais j'ai un problème:

Effectivement j'ai mis sur l'évènement "Avant mise à jour" du formulaire
Msgbox "Il y a eu modification..."
Cancel = True

Cependant j'ai fait un bouton pour permettre à l'utilisateur de valider la
modif avec

DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdSaveRecord

et le problème c'est qu'en cliquant sur le bouton ça me donne le message
Msgbox "Il y a eu modification..."

Or il me semble qu'une fois validé il ne devrait pas afficher ce message,
non?

Cordialement

Codial

"3stone" a écrit dans le message de news:
#
re,

"Codial"
en fait je ne comprends pas bien ce que tu veux me dire, il se peut que
je


me plante ;-)
ce que je veux faire c'est que si l'utilisateur clique sur la croix de
fermeture il est un message d'alerte lui indiquant qu'il a une modif ou
un


ajout en cours AVANT de valider l'enregistrement et je ne vois pas
d'autre


méthode que Dirty.



Bon. Tu as bien un formulaire pour faire un essai ?

Dans l'événement "Avant mise à jour" du formulaire, tu mets:

Msgbox "Il y a eu modification..."
Cancel = True

Remets toi en mode affichage du formulaire.
Passe quelques enregistrements en revue (ou ferme le formulaire).
Bien. Rien ne se passe.

Modifie une zone de texte quelconque et essaie de passer
à l'enregistrement suivant (ou de fermer le formulaire).
... Le msgbox te donne l'avertissement !!
Et tu ne peux PAS continuer/sortir...

Cela veut dire, que dès qu'il y a eu modification dans une zone
de texte liée à la source du formulaire, Access "passe" dans
l'événement "Avant mise à jour".

Il suffit donc de mettre le code de vérification dans cet événement.

L'événement "Si modification" (Form_Dirty) est plutôt à utiliser
lorsque l'on veut exécuter du code dès qu'une modification survient
mais que ce code ne concerne pas directement l'enregistrement courant.


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome








1 2