Bonjour,
J'utilise un frm indépendant associé à un sous frm pour saisir de nouvelles données.
Les données sont enregistrés dans les tables ad hoc par du code Vba.
Pour des raisons pratiques j'ai souhaité utiliser ce même frm toujours associé au même sous-frm pour effectuer des consultations, des modifications et des suppressions.
Pour cela, j'ai attribué aux deux frm (Main et sub) une source de données basée sur deux tables temporaires.
A l'ouverture de ces deux objets, l'utilisateur ne peut rien modifier. Pour cela, il doit cliquer dans une zone de texte et le frm principal et le sous frm deviennent modifiables.
La modification est validée par un bouton 'Modifier' qui sur l'évenement 'clic' propose ou non de valider les modifications apportées.
Je ne parviens pas, lorsque l'utilisateur choisit de ne pas valider ses modifications, à rétablir dans les contrôles du frm principal et du sous frm les valeurs initiales d'avant la modifications.
J'ai essayé la méthode 'RunCommand acCmdUndo'? Elle renvoie une erreur qui suggère qu'un évenement BeforeUpdate est en cours (sûrement relatif aux modifications du sfrm)...le btn 'Modifier' se trouvant sur le frm principal.
J'ai lu de nombreux posts sur des sujets proches et notamment celui-ci :
http://www.developpez.net/forums/sho...highlight=undo
qui m'a inquiété et notamment la réponse #11 avec comme point d'orgue cette réflexion dont je me sens très proche :Cela pose de très nombreux problèmes complexes auxquels je ne m'attendais pas du tout
Je souhaite garder l'interface actuelle, un btn 'Modifier' qui valide ou non les changements et ne pas intervenir directement sur les évenements BeforeUpdate des deux frms.
J'ai pensé aussi "réinjecter" les valeurs des tables temporaires dans les contrôles...sans l'avoir testé encore.
Je mets le code actuel :
Merci par avance pour vos avis.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Select Case MsgBox("Les modifications seront définitives. Voulez-vous continuer ?", vbYesNo Or vbCritical Or vbDefaultButton1, "ATTENTION : Action irréversible") Case vbYes 'enregistre les données du frm pour éviter 'le conflit d'écriture avec le code de mise 'à jour qui suit. DoCmd.RunCommand acCmdSaveRecord With tbl .Edit ![fa_titre_responsable] = cboCivilite ![fa_nom_responsable] = txtNom ![fa_adresse_1] = txtAdresse ![fa_commune] = cboCommune .Update End With With tblEl .Edit ![el_nom] = sf("txtElNom") ![el_prenom] = sf("txtElPrenom") ![el_ddn] = sf("txtDdN") ![el_sexe] = sf("cboElSexe") .Update End With Call MsgBox("Les modifications demandées ont été effectuées avec succès.", vbInformation, "Procédure terminée") Case vbNo DoCmd.RunCommand acCmdUndo Call MsgBox("Les modifications ont été annulées.", vbInformation, "Procédure annulée") End Select
SE
Partager