Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de mise à jour dans un onglet avec champs récalcitrant

1 réponse
Avatar
pibo
Bonjour =E0 tous,

J'ai cr=E9er un formulaire contenant un onglet de trois pages
Sur la premi=E8re j'affiche un formulaire contenant les donn=E9es du
client(Page0)
sur la deuxi=E8me j'affiche un formulaire contenant les donn=E9es de la
commande(Page1)
sur la troisi=E8me j'affiche un formulaire contenant le contenu de la
commande(Page2)

Lors de la saisie du contenu de la commande(Page 2), je d=E9sire mettre
=E0 jour les champs
TotalCommande, TotalTvacommande, TotalCommandeTvaComprise situ=E9 sur la
pages contenant les donn=E9es de la commande(Page1).

Mon probl=E8me est que lors de la mise =E0 jour, il n'y a que le champ
correspondant =E0 la premi=E8re ligne qui se met =E0 jour les deux autres
remplace la valeur =E0 transmettre par 0.

Dans le cas ci dessous le TotalCommande (Page1) est bien mis =E0 jour
avec ME.SousTotal1(Page2)
Le plus =E9tonnant c'est que les 2 autres champs, sont modifi=E9 avec une
valeur 0 alors que la valeur transmise est diff=E9rente.

Pour =EAtre complet, je signale que les valeurs =E0 transmettre sont
situ=E9 en pied de formulaire
et que le r=E9sultat reste identique quelque soit l'ordre utilis=E9 pour
plac=E9 les 3 lignes Form!.....
Seule la premi=E8re renvoit une valeur correcte lors de l'ex=E9cution du
programme les 2 autres =3D 0

J'ai m=EAme attribu=E9 des valeurs manuellement dans la table mais lors
de l'ex=E9cution le probl=E8me se repose les 2 derni=E8re se changent en 0

Voici les commande que j'utilise lors de la saisie qui conduit =E0 cette
mise =E0 jour
Merci =E0 vous pour une =E9ventuelle solution =E0 ce probl=E8me.

Private Sub Quantit=E9_AfterUpdate()
Dim Choix
'-------------------------------------------------------------------------
' Je v=E9rifie que la Quantit=E9 r=E9f=E9rence nomenclature n'est pas =3D
Z=E9ro
' Si OUI soit je supprime la ligne de commande ou je repositionne le
curseur sur Quantit=E9
' pour saisie d'une nouvelle Quantit=E9
'--------------------------------------------------------------------------=
-----
If Me.Quantit=E9 =3D 0 And DeuxFois =3D False Then
MsgBox "Quantit=E9 =3D Z=E9ro interdite"
Choix =3D MsgBox(("Voulez-vous Supprimer cette ligne de commande?"),
vbExclamation + vbYesNo, "Confirmation")
If Choix =3D vbYes Then
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
DoCmd.GoToRecord , , acNewRec
Else
Cancel =3D True
Me!Quantit=E9.Undo
End If
'------------------------------------------------------------------------
' Si NON je mets =E0 jour les valeurs TotalFa=E7on, TotalFourniture,
' TotalCommande,TotalTvaCommande, TotalDeLaCommande
' et on continue l'op=E9ration de saisie normalement.
'-------------------------------------------------------------------------
Else
If Me.[R=E9fNomenclature] > "9000" Then
Me.[TotalFourniture] =3D Me.PrixUnit=E9Vente * Quantit=E9
Me.TvaLigneCommande =3D TotalFourniture * TauxdeTva
Else
Me.TotalFa=E7on =3D Me.PrixUnit=E9Vente * Quantit=E9
Me.TvaLigneCommande =3D TotalFa=E7on * TauxdeTva
End If

End If

End Sub



Private Sub Quantit=E9_LostFocus()
'---------------------------------------------------------------
'Je v=E9rifie la valeur de la r=E9f=E9rence nomenclature encod=E9e
'si la valeur est nulle, j'affiche un message pour signaler
l'utilisation des boutons STOP & IMPRIME
'----------------------------------------------------------------
If IsNull(R=E9fNomenclature) Then
MsgBox ("Pour cloturer la Commande Cliquer en bas de page" + Chr(13)
_
+ Chr(13) + _
"Sortie si la commande part =E0 l'essai " _
+ Chr(13) + _
"Imprimante si la commande est termin=E9e pour le placement")
End If
'--------------------
'Si la ligne existait et que la quantit=E9 =E0 =E9t=E9 remplac=E9 par z=E9ro
'je supprime la ligne et je repositionne et je recalcule la commande
'-------------------------
If DeuxFois =3D True And Me.Quantit=E9 =3D 0 Then
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
DoCmd.GoToRecord , , acLast
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
DoCmd.GoToRecord , , acNewRec
Me.Recalc
DeuxFois =3D False
End If

'Si la ligne existait et que la quantit=E9 =E0 =E9t=E9 modifi=E9e
'mais sup=E9rieure =E0 z=E9ro
'je repositionne et je recalcule la commande
'-------------------------
If DeuxFois =3D True And Quantit=E9AvantModif <> Me.Quantit=E9 And
Me.Quantit=E9 <> 0 Then
DoCmd.GoToRecord , , acLast
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
DoCmd.GoToRecord , , acNewRec

DeuxFois =3D False
End If
'------------------------------------
'Si la ligne de Commande existait d=E9j=E0,
'on a pas modifier la quantit=E9 donc on
'se repositionne sans recalculer la commande
'--------------------------------
'--------------------
If DeuxFois =3D True Then
DoCmd.GoToRecord , , acLast
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "R=E9fNomenclature"
DeuxFois =3D False
End If
'--------------------------------
'Si on a encoder une r=E9f=E9rence et qu'on entre zero quantit=E9
'on corrige ou on supprime la ligne
'---------------------------
If Not (IsNull(R=E9fNomenclature)) And Me.Quantit=E9 =3D 0 Then
MsgBox "Quantit=E9 =3D Z=E9ro interdite"
Choix =3D MsgBox((" Voulez-vous Supprimer cette ligne de
commande?"), vbExclamation + vbYesNo, "Confirmation")
If Choix =3D vbYes Then
DoCmd.SetWarnings False
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "R=E9fNomenclature"
Else
Cancel =3D True
Me!Quantit=E9.Undo
End If
End If
Me.Recalc
Forms!F_Commande!F_CommandeSFSaisie.Form!TotalCommande =3D
Me.SousTotalCommande
Forms!F_Commande!F_CommandeSFSaisie.Form!TotalTvaCommande =3D
Me.SousTotalTva
Forms!F_Commande!F_CommandeSFSaisie.Form!TotalCommandeTvaComprise =3D
Me.TotalCommandeTvaC
DoCmd.GoToRecord , , acNewRec
DoCmd.GoToControl "R=E9fNomenclature"

End Sub

1 réponse

Avatar
3stone
Salut,


"pibo"
J'ai créer un formulaire contenant un onglet de trois pages
Sur la première j'affiche un formulaire contenant les données du
client(Page0)
sur la deuxième j'affiche un formulaire contenant les données de la
commande(Page1)
sur la troisième j'affiche un formulaire contenant le contenu de la
commande(Page2)
<snip>


Je zape, faut relire 3 pour ne rien comprendre ;-(


Mais, une telle série de DoCmd. est déjà un mauvais signe...
- tu bascule continuellement entre les SetWarnings False et True.. pourquoi ?
- tu annule la "Sub Quantité_AfterUpdate()" par un Cancel = True, or
cette sub ne peut être annulée !!
- Idem pour la "Sub Quantité_LostFocus()" pas d'annulation !!!
- général: les onglets n'interfèrent en rien dans le fonctionnement
des sous-formulaires... qui eux pourraient aussi bien être placé l'un
en dessous de l'autre que l'un à coté de l'autre...
les onglets ne sont que des éléments graphiques


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/