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)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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)
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
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)
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)
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
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)