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

Copier d'une table de sous form dans une autre table

8 réponses
Avatar
Marie-Claire
Bonjour,
Pour copier les données de certains champs d'une table contenues dans un
sous formulaire, j'ai écrit ce module, mais je n'ai qu'un seul enregistrement
même si dans le sous formulaire, il y en 10, comment dois-je modifier le
module:

Dim Db As DAO.Database
Dim TableSource As Recordset
Dim TableDestination As Recordset
Dim NbChamps As Integer
Dim i As Integer

Function SetFonction()

Set Db = CurrentDb
Set TableSource = Db.OpenRecordset ("SELECT ID, [Champ1_TableSource],
[Champ2_TableSource] FROM TableSource WHERE ID =" &
Forms![FormulairePrincipal].[ID])
Set TableDestination = Db.OpenRecordset("SELECT ID,
[Champ1_TableDestination], [Champ2_TableDestination] FROM [TableDestination]
ORDER BY ID;")

If Not TableSource.NoMatch Then
NbChamps = TableSource.Fields.Count - 1
TableSource.Edit
TableDestination.AddNew
For i = 0 To NbChamps
TableDestination.Fields(i) = TableSource.Fields(i)
Next i
TableDestination.Update
End If
TableSource.Close
TableDestination.Close
End Function


Merci pour votre Aide.
Marie-Claire
--
Marie-Claire

8 réponses

Avatar
Raymond [mvp]
Bonjour.

ta fonction comporte des erreurs, mais, pourquoi ton sous-formulaire n'est
pas basé directement sur la tabledestination au lieu de passer par une table
intermédiaire ?

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Deux jours pour faire le point sur la sécurité et préparer demain:
http://www.microsoft.com/france/securite/jms/?src=commu


"Marie-Claire" a écrit dans le
message de news:
Bonjour,
Pour copier les données de certains champs d'une table contenues dans un
sous formulaire, j'ai écrit ce module, mais je n'ai qu'un seul
enregistrement
même si dans le sous formulaire, il y en 10, comment dois-je modifier le
module:

Dim Db As DAO.Database
Dim TableSource As Recordset
Dim TableDestination As Recordset
Dim NbChamps As Integer
Dim i As Integer

Function SetFonction()

Set Db = CurrentDb
Set TableSource = Db.OpenRecordset ("SELECT ID, [Champ1_TableSource],
[Champ2_TableSource] FROM TableSource WHERE ID =" &
Forms![FormulairePrincipal].[ID])
Set TableDestination = Db.OpenRecordset("SELECT ID,
[Champ1_TableDestination], [Champ2_TableDestination] FROM
[TableDestination]
ORDER BY ID;")

If Not TableSource.NoMatch Then
NbChamps = TableSource.Fields.Count - 1
TableSource.Edit
TableDestination.AddNew
For i = 0 To NbChamps
TableDestination.Fields(i) = TableSource.Fields(i)
Next i
TableDestination.Update
End If
TableSource.Close
TableDestination.Close
End Function


Merci pour votre Aide.
Marie-Claire
--
Marie-Claire


Avatar
Marie-Claire
Bonjour,
La table destination est utilisée uniquement pour faire des sélections et la
table intermédiaire a plein de choses qui ne servent à rien pour ça.
Tu peux me dire comment corriger mes fautes, s'il-te-plaît?
Merci tout plein.
Marie-Claire
--
Marie-Claire



Bonjour.

ta fonction comporte des erreurs, mais, pourquoi ton sous-formulaire n'est
pas basé directement sur la tabledestination au lieu de passer par une table
intermédiaire ?

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Deux jours pour faire le point sur la sécurité et préparer demain:
http://www.microsoft.com/france/securite/jms/?src=commu


"Marie-Claire" a écrit dans le
message de news:
Bonjour,
Pour copier les données de certains champs d'une table contenues dans un
sous formulaire, j'ai écrit ce module, mais je n'ai qu'un seul
enregistrement
même si dans le sous formulaire, il y en 10, comment dois-je modifier le
module:

Dim Db As DAO.Database
Dim TableSource As Recordset
Dim TableDestination As Recordset
Dim NbChamps As Integer
Dim i As Integer

Function SetFonction()

Set Db = CurrentDb
Set TableSource = Db.OpenRecordset ("SELECT ID, [Champ1_TableSource],
[Champ2_TableSource] FROM TableSource WHERE ID =" &
Forms![FormulairePrincipal].[ID])
Set TableDestination = Db.OpenRecordset("SELECT ID,
[Champ1_TableDestination], [Champ2_TableDestination] FROM
[TableDestination]
ORDER BY ID;")

If Not TableSource.NoMatch Then
NbChamps = TableSource.Fields.Count - 1
TableSource.Edit
TableDestination.AddNew
For i = 0 To NbChamps
TableDestination.Fields(i) = TableSource.Fields(i)
Next i
TableDestination.Update
End If
TableSource.Close
TableDestination.Close
End Function


Merci pour votre Aide.
Marie-Claire
--
Marie-Claire







Avatar
Raymond [mvp]
En espérant avoir bien compris ton désir,
vérifier la ligne TableDestination.FindFirst "ID = " & "'" & TableSource!ID
& "'", car je ne pense pas que les deux ID soient identiques.
fonction non testée.

Dim Db As DAO.Database
Dim TableSource As DAO.Recordset
Dim TableDestination As DAO.Recordset
Dim i As Integer

Function SetFonction()
Set Db = CurrentDb
Set TableDestination = Db.OpenRecordset("SELECT * FROM [TableDestination];")
Set TableSource = Db.OpenRecordset("SELECT ID,
[Champ1_TableSource],[Champ2_TableSource] FROM TableSource WHERE ID =" &
Forms![FormulairePrincipal].[ID])
If Not TableSource.EOF Then
Do Until TableSource.EOF
TableDestination.FindFirst "ID = " & "'" & TableSource!ID & "'"
If TableDestination.NoMatch Then
TableDestination.AddNew
Else
TableDestination.Edit
End If
For i = 0 To TableSource.Fields.Count - 1
TableDestination.Fields(i) = TableSource.Fields(i)
Next i
TableDestination.Update
Loop
End If
TableSource.Close
TableDestination.Close
Set TableDestination = Nothing
Set TableSource = Nothing
Set Db = Nothing
End Function


--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Deux jours pour faire le point sur la sécurité et préparer demain:
http://www.microsoft.com/france/securite/jms/?src=commu


"Marie-Claire" a écrit dans le
message de news:
Bonjour,
La table destination est utilisée uniquement pour faire des sélections et
la
table intermédiaire a plein de choses qui ne servent à rien pour ça.
Tu peux me dire comment corriger mes fautes, s'il-te-plaît?
Merci tout plein.
Marie-Claire


Avatar
Marie-Claire
Bonjour,
J'ai une erreur: 3464

Type de données incompatible dans l'expression du critère
avec cette ligne en surbrillance:
TableDestination.FindFirst "ID = " & "'" & TableSource!ID & "'"

Qu'est-ce que j'ai pu faire de faux?
Marie-Claire
--
Marie-Claire



En espérant avoir bien compris ton désir,
vérifier la ligne TableDestination.FindFirst "ID = " & "'" & TableSource!ID
& "'", car je ne pense pas que les deux ID soient identiques.
fonction non testée.

Dim Db As DAO.Database
Dim TableSource As DAO.Recordset
Dim TableDestination As DAO.Recordset
Dim i As Integer

Function SetFonction()
Set Db = CurrentDb
Set TableDestination = Db.OpenRecordset("SELECT * FROM [TableDestination];")
Set TableSource = Db.OpenRecordset("SELECT ID,
[Champ1_TableSource],[Champ2_TableSource] FROM TableSource WHERE ID =" &
Forms![FormulairePrincipal].[ID])
If Not TableSource.EOF Then
Do Until TableSource.EOF
TableDestination.FindFirst "ID = " & "'" & TableSource!ID & "'"
If TableDestination.NoMatch Then
TableDestination.AddNew
Else
TableDestination.Edit
End If
For i = 0 To TableSource.Fields.Count - 1
TableDestination.Fields(i) = TableSource.Fields(i)
Next i
TableDestination.Update
Loop
End If
TableSource.Close
TableDestination.Close
Set TableDestination = Nothing
Set TableSource = Nothing
Set Db = Nothing
End Function


--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Deux jours pour faire le point sur la sécurité et préparer demain:
http://www.microsoft.com/france/securite/jms/?src=commu


"Marie-Claire" a écrit dans le
message de news:
Bonjour,
La table destination est utilisée uniquement pour faire des sélections et
la
table intermédiaire a plein de choses qui ne servent à rien pour ça.
Tu peux me dire comment corriger mes fautes, s'il-te-plaît?
Merci tout plein.
Marie-Claire







Avatar
Eric
Bonjour,

Essaies avec :
TableDestination.FindFirst "ID =" & TableSource!ID
si ID est numérique

Bonjour,
J'ai une erreur: 3464

Type de données incompatible dans l'expression du critère
avec cette ligne en surbrillance:
TableDestination.FindFirst "ID = " & "'" & TableSource!ID & "'"

Qu'est-ce que j'ai pu faire de faux?
Marie-Claire


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

Avatar
Marie-Claire
Bonjour,
Maintenant jai une autre erreur:

Le moteur de la base Microsoft Jet ne reconnaît pas "ID" en tant que nom de
champ ou expression correcte

Il faut pressiser que ID n'est pas le numéro Auto avec Clé primaire de ces 2
tables.

Ces deux tables ont des Clé Primaires sur des numéros autos IDTable1 et
IDTable2.

Les ID sont numériques mais ils doivent se copier d'une table à l'autre

Marie-Claire
--
Marie-Claire



Bonjour,

Essaies avec :
TableDestination.FindFirst "ID =" & TableSource!ID
si ID est numérique

Bonjour,
J'ai une erreur: 3464

Type de données incompatible dans l'expression du critère
avec cette ligne en surbrillance:
TableDestination.FindFirst "ID = " & "'" & TableSource!ID & "'"

Qu'est-ce que j'ai pu faire de faux?
Marie-Claire


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




Avatar
Raymond [mvp]
Si les ID sont des Numauto, ils ne peuvent pas être identiques. il faut donc
que le critère porte sur un autre champ. à voir.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Deux jours pour faire le point sur la sécurité et préparer demain:
http://www.microsoft.com/france/securite/jms/?src=commu


"Marie-Claire" a écrit dans le
message de news:
Bonjour,
Maintenant jai une autre erreur:

Le moteur de la base Microsoft Jet ne reconnaît pas "ID" en tant que nom
de
champ ou expression correcte

Il faut pressiser que ID n'est pas le numéro Auto avec Clé primaire de ces
2
tables.

Ces deux tables ont des Clé Primaires sur des numéros autos IDTable1 et
IDTable2.

Les ID sont numériques mais ils doivent se copier d'une table à l'autre

Marie-Claire


Avatar
Marie-Claire
Bonjour,

Je recommence mes explications car je n’étais pas très claire, je crois.

Il y a un formulaire principal avec une ‘TableX’.
Dans ce formulaire il y a un sous formulaire avec une table que j’ai appelé
‘TableSource’ dans le module Function SetFonction.

Lorsque l’on saisie dans le formulaire principal une Clé ID Auto est créé
par la ‘TableX’ que j’ai appelé ici ‘ID’.
Lorsque l’on saisie dans le sous formulaire une Clé ID Auto est créé ‘ID de
sous-formulaire’ et le ID Auto de la ‘TableX’ est copié dans la table du sous
fourmulaire sous ID Numérique.

Maintenant la ‘Table destination’ possède sa Clé ID Numéro auto que j’appèle
pour l’exemple ‘IDTable destination’ et un champ dénommé ‘ID’ Numérique.

Le but du module est de copier les 2 Champs [Champ1_TableSource],
[Champ2_TableSource] de la ‘TableSource’ ( qui est en réalité la table du
sous formulaire) en sélectionnant le ‘ID’ de la ‘TableX’ en prenant comme
référence Forms![FormulairePrincipal].[ID] dans les 2 Champs
[Champ1_TableDestination], [Champ2_TableDestination] de la la ‘Table
destination’.

Donc :
‘TableX’ Champ ‘ID’ (Clé Primaire NuméroAuto), …

‘TableSource’ Champ ‘ID de sous-formulaire’ (Clé Primaire NuméroAuto), Champ
‘ID’, Champ [Champ1_TableSource], et Champ [Champ2_TableSource], …

‘Table destination’ Champ ‘IDTable destination (Clé Primaire NuméroAuto)’,
Champ ‘ID’, Champ [Champ1_TableDestination] et Champ
[Champ2_TableDestination]

Donc le ‘ID’ est auto uniquement dans la table du formulaire principal
‘TableX’

J’espère que j’ai réussi à désembrouiller les idées.
Merci pou tout.
Marie-Claire



--
Marie-Claire



Si les ID sont des Numauto, ils ne peuvent pas être identiques. il faut donc
que le critère porte sur un autre champ. à voir.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://www.mpfa.info/ pour débuter sur le forum.
Deux jours pour faire le point sur la sécurité et préparer demain:
http://www.microsoft.com/france/securite/jms/?src=commu


"Marie-Claire" a écrit dans le
message de news:
Bonjour,
Maintenant jai une autre erreur:

Le moteur de la base Microsoft Jet ne reconnaît pas "ID" en tant que nom
de
champ ou expression correcte

Il faut pressiser que ID n'est pas le numéro Auto avec Clé primaire de ces
2
tables.

Ces deux tables ont des Clé Primaires sur des numéros autos IDTable1 et
IDTable2.

Les ID sont numériques mais ils doivent se copier d'une table à l'autre

Marie-Claire