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

docmd avec sous formulaire

3 réponses
Avatar
Michel Langlais
J'ai un formulaire bordereau avec un sous-fomulaire produitcommandé.

J'ai un bouton sur mon formulaire qui envoie le bordereau a la facturation.

Pour ce faire je prends quelques champs du formulaire que je transfert dans
une autre table.
Je veux prendre tous les enregistrements du sous-formulaire et les envoyer
dans une sous-table.
J'ai donc fait une boucle qui part du premier enregistrement jusqu'au
dernier mais le probleme c'est que quand je change d'enregistrement, il
change l'enregistrement du formulaire (donc bordereau suivant) au lieu du
sous-formulaire (qui devrait etre le produit suivant du meme bordereau)
Voici mon code (et plus bas les deux lignes qui me font défaut)
Private Sub Bouton_Transferer__bordereau_a_la_facturation_Click()
Dim Compteur As Integer
Dim nofacture As Integer

Dim DernierEnregistrement As Integer
Set formfacture = CurrentDb.OpenRecordset("Facture")
Set formproduitfacture = CurrentDb.OpenRecordset("Produit_Commandé")

DoCmd.GoToRecord acDataForm, Produit_bordereau, acLast (BUG)
DernierEnregistrement = Me!Produit_bordereau.Form.CurrentRecord (BUG DANS LA
LIGNE)
'DoCmd.GoToRecord acDataForm, "Produit_bordereau", acFirst (BUG)
'Compteur = 1
'Do While (Compteur <= DernierEnregistrement)
formfacture.AddNew
formfacture.[NoClient] = Me.NoClient
formfacture.[DateBordereau] = Me.Date
nofacture = formfacture.[reffacture]
formproduitfacture.AddNew
formproduitfacture.[reffacture] = nofacture
formproduitfacture.[No_Produit_Commande] = Me!Produit_bordereau.Form!
No_Produit_Commande
formproduitfacture.[Quantite_Produit_Commande] =
Me!Produit_bordereau.Form!Quantite_Produit_Commande
Nb_Element_Manquant
formfacture.Update
formproduitfacture.Update
DoCmd.GoToRecord , , acNext (BUG)
Loop
formproduitfacture.Close
formfacture.Close
Set formproduitfacture = Nothing
Set formfacture = Nothing
End Sub

Merci de bien vouloir me dire comment faire reference au sous-formulaire au
lieu du formulaire
DoCmd.GoToRecord acDataForm, Produit_bordereau, acLast (BUG car
enregistrement du formulaire)
DernierEnregistrement = Me!Produit_bordereau.Form.CurrentRecord (BUG DANS LA
LIGNE)
'DoCmd.GoToRecord acDataForm, "Produit_bordereau", acFirst (BUG car
enregistrement du formulaire)

DoCmd.GoToRecord , , acNext (BUG car enregistrement du formulaire)

J'espere avoir été assez clair

3 réponses

Avatar
Eric
Bonsoir Michel,

Je ferai quelque chose du genre (écrit à main levée):

Private Sub Bouton_Transferer__bordereau_a_la_facturation_Click()
'Charger la référence Microsoft DAO 3.x Object Library
Dim rst1 As DAO.Recordset ' pour Facture
Dim rst2 As DAO.Recordset ' pour Produit_Commandé
Dim rst3 As DAO.Recordset ' pour le recordset du sous-form
Dim bd As DAO.Database
Set bd = CurrentDb
Set rst1 = bd.OpenRecordset("Facture")
Set rst2 = bd.OpenRecordset("Produit_Commandé")
' Bien préciser le nom du contrôle contenant le sous-form
Set rst3 = Me.NomObjetSousForm.Form.RecordsetClone
'On ajoute 1 enregistrement à Facture
With rst1
.AddNew
![NoClient] = Me!NoClient
![DateBordereau] = Me!Date ' mauvais choix de nom
![reffacture] = Me!nofacture
.Update
End With
'On parcourt le jeu d'enreg du sous-formulaire
While Not rst3.EOF
'et on ajoute à la table Produit_Commandé autant que necessaire
With rst2
.AddNew
![reffacture] = Me!nofacture
![No_Produit_Commande] = rst3![No_Produit_Commande]
![Quantite_Produit_Commande]= rst3![Quantite_Produit_Commande]
' >>>> Elements manquants ?????? <<<<<<<
.Update
End With
rst3.MoveNext
Wend
'Fermeture et libération des variables-objet
rst1.Close: rst2.Close: rst3.Close
Set rst1 = Nothing
Set rst2 = Nothing
Set rst3 = Nothing
Set bd = Nothing
End Sub


En espérant ne pas m'être trop trompé. A tester


J'ai un formulaire bordereau avec un sous-fomulaire produitcommandé.

J'ai un bouton sur mon formulaire qui envoie le bordereau a la facturation.

Pour ce faire je prends quelques champs du formulaire que je transfert dans
une autre table.
Je veux prendre tous les enregistrements du sous-formulaire et les envoyer
dans une sous-table.
J'ai donc fait une boucle qui part du premier enregistrement jusqu'au
dernier mais le probleme c'est que quand je change d'enregistrement, il
change l'enregistrement du formulaire (donc bordereau suivant) au lieu du
sous-formulaire (qui devrait etre le produit suivant du meme bordereau)
Voici mon code (et plus bas les deux lignes qui me font défaut)
Private Sub Bouton_Transferer__bordereau_a_la_facturation_Click()
Dim Compteur As Integer
Dim nofacture As Integer

Dim DernierEnregistrement As Integer
Set formfacture = CurrentDb.OpenRecordset("Facture")
Set formproduitfacture = CurrentDb.OpenRecordset("Produit_Commandé")

DoCmd.GoToRecord acDataForm, Produit_bordereau, acLast (BUG)
DernierEnregistrement = Me!Produit_bordereau.Form.CurrentRecord (BUG DANS LA
LIGNE)
'DoCmd.GoToRecord acDataForm, "Produit_bordereau", acFirst (BUG)
'Compteur = 1
'Do While (Compteur <= DernierEnregistrement)
formfacture.AddNew
formfacture.[NoClient] = Me.NoClient
formfacture.[DateBordereau] = Me.Date
nofacture = formfacture.[reffacture]
formproduitfacture.AddNew
formproduitfacture.[reffacture] = nofacture
formproduitfacture.[No_Produit_Commande] = Me!Produit_bordereau.Form!
No_Produit_Commande
formproduitfacture.[Quantite_Produit_Commande] =
Me!Produit_bordereau.Form!Quantite_Produit_Commande
Nb_Element_Manquant
formfacture.Update
formproduitfacture.Update
DoCmd.GoToRecord , , acNext (BUG)
Loop
formproduitfacture.Close
formfacture.Close
Set formproduitfacture = Nothing
Set formfacture = Nothing
End Sub

Merci de bien vouloir me dire comment faire reference au sous-formulaire au
lieu du formulaire
DoCmd.GoToRecord acDataForm, Produit_bordereau, acLast (BUG car
enregistrement du formulaire)
DernierEnregistrement = Me!Produit_bordereau.Form.CurrentRecord (BUG DANS LA
LIGNE)
'DoCmd.GoToRecord acDataForm, "Produit_bordereau", acFirst (BUG car
enregistrement du formulaire)

DoCmd.GoToRecord , , acNext (BUG car enregistrement du formulaire)

J'espere avoir été assez clair


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Eric
re,

Doit manquer :
rst3.MoveFirst
juste avant le While Not rst3.EOF


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr
Avatar
Michel Langlais
Merci Eric pour ton aide, ca fonctionne a merveille
En plus j'ai compris a quoi sert le with et la syntaxe du OEF.
Donc c'est vraiment super.
Michel


Bonsoir Michel,

Je ferai quelque chose du genre (écrit à main levée):

Private Sub Bouton_Transferer__bordereau_a_la_facturation_Click()
'Charger la référence Microsoft DAO 3.x Object Library
Dim rst1 As DAO.Recordset ' pour Facture
Dim rst2 As DAO.Recordset ' pour Produit_Commandé
Dim rst3 As DAO.Recordset ' pour le recordset du sous-form
Dim bd As DAO.Database
Set bd = CurrentDb
Set rst1 = bd.OpenRecordset("Facture")
Set rst2 = bd.OpenRecordset("Produit_Commandé")
' Bien préciser le nom du contrôle contenant le sous-form
Set rst3 = Me.NomObjetSousForm.Form.RecordsetClone
'On ajoute 1 enregistrement à Facture
With rst1
.AddNew
![NoClient] = Me!NoClient
![DateBordereau] = Me!Date ' mauvais choix de nom
![reffacture] = Me!nofacture
.Update
End With
'On parcourt le jeu d'enreg du sous-formulaire
While Not rst3.EOF
'et on ajoute à la table Produit_Commandé autant que necessaire
With rst2
.AddNew
![reffacture] = Me!nofacture
![No_Produit_Commande] = rst3![No_Produit_Commande]
![Quantite_Produit_Commande]= rst3![Quantite_Produit_Commande]
' >>>> Elements manquants ?????? <<<<<<<
.Update
End With
rst3.MoveNext
Wend
'Fermeture et libération des variables-objet
rst1.Close: rst2.Close: rst3.Close
Set rst1 = Nothing
Set rst2 = Nothing
Set rst3 = Nothing
Set bd = Nothing
End Sub


En espérant ne pas m'être trop trompé. A tester


J'ai un formulaire bordereau avec un sous-fomulaire produitcommandé.

J'ai un bouton sur mon formulaire qui envoie le bordereau a la facturation.

Pour ce faire je prends quelques champs du formulaire que je transfert dans
une autre table.
Je veux prendre tous les enregistrements du sous-formulaire et les envoyer
dans une sous-table.
J'ai donc fait une boucle qui part du premier enregistrement jusqu'au
dernier mais le probleme c'est que quand je change d'enregistrement, il
change l'enregistrement du formulaire (donc bordereau suivant) au lieu du
sous-formulaire (qui devrait etre le produit suivant du meme bordereau)
Voici mon code (et plus bas les deux lignes qui me font défaut)
Private Sub Bouton_Transferer__bordereau_a_la_facturation_Click()
Dim Compteur As Integer
Dim nofacture As Integer

Dim DernierEnregistrement As Integer
Set formfacture = CurrentDb.OpenRecordset("Facture")
Set formproduitfacture = CurrentDb.OpenRecordset("Produit_Commandé")

DoCmd.GoToRecord acDataForm, Produit_bordereau, acLast (BUG)
DernierEnregistrement = Me!Produit_bordereau.Form.CurrentRecord (BUG DANS LA
LIGNE)
'DoCmd.GoToRecord acDataForm, "Produit_bordereau", acFirst (BUG)
'Compteur = 1
'Do While (Compteur <= DernierEnregistrement)
formfacture.AddNew
formfacture.[NoClient] = Me.NoClient
formfacture.[DateBordereau] = Me.Date
nofacture = formfacture.[reffacture]
formproduitfacture.AddNew
formproduitfacture.[reffacture] = nofacture
formproduitfacture.[No_Produit_Commande] = Me!Produit_bordereau.Form!
No_Produit_Commande
formproduitfacture.[Quantite_Produit_Commande] =
Me!Produit_bordereau.Form!Quantite_Produit_Commande
Nb_Element_Manquant
formfacture.Update
formproduitfacture.Update
DoCmd.GoToRecord , , acNext (BUG)
Loop
formproduitfacture.Close
formfacture.Close
Set formproduitfacture = Nothing
Set formfacture = Nothing
End Sub

Merci de bien vouloir me dire comment faire reference au sous-formulaire au
lieu du formulaire
DoCmd.GoToRecord acDataForm, Produit_bordereau, acLast (BUG car
enregistrement du formulaire)
DernierEnregistrement = Me!Produit_bordereau.Form.CurrentRecord (BUG DANS LA
LIGNE)
'DoCmd.GoToRecord acDataForm, "Produit_bordereau", acFirst (BUG car
enregistrement du formulaire)

DoCmd.GoToRecord , , acNext (BUG car enregistrement du formulaire)

J'espere avoir été assez clair


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr