OVH Cloud OVH Cloud

Copier dans une table

2 réponses
Avatar
Luis
Bonjour,
J'ai une table avec les champs suivats

[languematernelle], [maternelle]
[1ère langue], [1parlé/écrit]
[2ème langue], [2parlé/écrit]
[3ème langue], [3parlé/écrit]
[4ème langue], [4parlé/écrit]
[5ème langue], [5parlé/écrit]

Dans la première colonne on saisie la langue par exemple 'anglais' et dans
la 2ème le niveau de connaissances de cette même langue et ainsi de suite
pour les autres langues.

Il faut que je copie dans une autre table
composée de champs suivants

LANGUE, LANGUENIVEAU
LANGUE2, LANGUE2NIVEAU

Dans 'Langue2' et 'LANGUE2NIVEAU' ont doit trouver exactement la même chose
que dans 'Langue' et 'LANGUENIVEAU'

Au fait c'est une double copie.

J'ai fait cette procédure:

Dim Db As DAO.Database
Dim TableCand As Recordset
Dim TableLang As Recordset
Dim LANGUEDEFINITIVE As Integer, InfoLANGUEDEFINITIVE As Integer,
IndiceLANGUEDEFINITIVE As Integer

Function SetLanguesConnues()

Set Db = CurrentDb
Set TableCand = Db.OpenRecordset("SELECT IDCANDIDAT, [languematernelle],
[maternelle], [1ère langue], [1parlé/écrit], [2ème langue], [2parlé/écrit],
[3ème langue], [3parlé/écrit], [4ème langue], [4parlé/écrit], [5ème langue],
[5parlé/écrit] FROM CANDIDATS WHERE IDCANDIDAT =" & Forms![TOUS
CANDIDATS].IDCANDIDAT)

Set TableLang = Db.OpenRecordset("SELECT IDCANDIDAT, LANGUE, LANGUENIVEAU,
LANGUE2, LANGUE2NIVEAU FROM LANGUESCONNUES ORDER BY IDCANDIDAT;")

If Not (TableCand.BOF And TableCand.EOF) Then
TableLang.FindFirst ("IDCANDIDAT=" & TableCand!IDCANDIDAT)
If TableLang.NoMatch Then
For LANGUEdef = 1 To 6
GoSub AjouterLANGUEDEFINITIVE
GoSub EcrireLANGUEDEFINITIVE
Next LANGUEdef
Else
For LANGUEdef = 1 To 6
If TableLang.EOF Then
GoSub AjouterLANGUEDEFINITIVE
Else
If TableLang!IDCANDIDAT <> TableCand!IDCANDIDAT Then
GoSub AjouterLANGUEDEFINITIVE
Else
TableLang.Edit
End If
End If
GoSub EcrireLANGUEDEFINITIVE

If Not TableLang.EOF Then TableLang.MoveNext

Next LANGUEdef
End If
End If
TableCand.Close
TableLang.Close
Exit Function

AjouterLANGUEDEFINITIVE:
TableLang.AddNew
TableLang!IDCANDIDAT = TableCand!IDCANDIDAT
Return

EcrireLANGUEDEFINITIVE:
For InfoLANGUEDEFINITIVE = 1 To 2
IndiceLANGUEDEFINITIVE = 2 * (LANGUEdef - 1) + InfoLANGUEDEFINITIVE
TableLang.Fields.Item(InfoLANGUEDEFINITIVE) =
TableCand.Fields.Item(IndiceLANGUEDEFINITIVE)

Next InfoLANGUEDEFINITIVE
TableLang.Update
Return
End Function

Le problème c'est que la copie ne se fait que dans 'LANGUE', 'LANGUENIVEAU'
et rien ne se copie dans 'LANGUE2', 'LANGUE2NIVEAU'.

Je n'arrive pas à trouver ou est mon erreur.
Merci pour votre aide.

Luis

2 réponses

Avatar
Ilan
Bonsoir, je crois qu'il manque une boucle dans ta procédure
EcrireLangueDefinitive

Dim Langue As integer

EcrireLANGUEDEFINITIVE:
For Langue = 0 To 1
For InfoLANGUEDEFINITIVE = 1 To 2
IndiceLANGUEDEFINITIVE = 2 * (LANGUEdef - 1) + InfoLANGUEDEFINITIVE
TableLang.Fields.Item(InfoLANGUEDEFINITIVE + 2 * Langue) =
TableCand.Fields.ItemIndiceLANGUEDEFINITIVE)

Next InfoLANGUEDEFINITIVE
Next Langue
TableLang.Update
Return

Bonjour,
J'ai une table avec les champs suivats

[languematernelle], [maternelle]
[1ère langue], [1parlé/écrit]
[2ème langue], [2parlé/écrit]
[3ème langue], [3parlé/écrit]
[4ème langue], [4parlé/écrit]
[5ème langue], [5parlé/écrit]

Dans la première colonne on saisie la langue par exemple 'anglais' et dans
la 2ème le niveau de connaissances de cette même langue et ainsi de suite
pour les autres langues.

Il faut que je copie dans une autre table
composée de champs suivants

LANGUE, LANGUENIVEAU
LANGUE2, LANGUE2NIVEAU

Dans 'Langue2' et 'LANGUE2NIVEAU' ont doit trouver exactement la même chose
que dans 'Langue' et 'LANGUENIVEAU'

Au fait c'est une double copie.

J'ai fait cette procédure:

Dim Db As DAO.Database
Dim TableCand As Recordset
Dim TableLang As Recordset
Dim LANGUEDEFINITIVE As Integer, InfoLANGUEDEFINITIVE As Integer,
IndiceLANGUEDEFINITIVE As Integer

Function SetLanguesConnues()

Set Db = CurrentDb
Set TableCand = Db.OpenRecordset("SELECT IDCANDIDAT, [languematernelle],
[maternelle], [1ère langue], [1parlé/écrit], [2ème langue], [2parlé/écrit],
[3ème langue], [3parlé/écrit], [4ème langue], [4parlé/écrit], [5ème langue],
[5parlé/écrit] FROM CANDIDATS WHERE IDCANDIDAT =" & Forms![TOUS
CANDIDATS].IDCANDIDAT)

Set TableLang = Db.OpenRecordset("SELECT IDCANDIDAT, LANGUE, LANGUENIVEAU,
LANGUE2, LANGUE2NIVEAU FROM LANGUESCONNUES ORDER BY IDCANDIDAT;")

If Not (TableCand.BOF And TableCand.EOF) Then
TableLang.FindFirst ("IDCANDIDAT=" & TableCand!IDCANDIDAT)
If TableLang.NoMatch Then
For LANGUEdef = 1 To 6
GoSub AjouterLANGUEDEFINITIVE
GoSub EcrireLANGUEDEFINITIVE
Next LANGUEdef
Else
For LANGUEdef = 1 To 6
If TableLang.EOF Then
GoSub AjouterLANGUEDEFINITIVE
Else
If TableLang!IDCANDIDAT <> TableCand!IDCANDIDAT Then
GoSub AjouterLANGUEDEFINITIVE
Else
TableLang.Edit
End If
End If
GoSub EcrireLANGUEDEFINITIVE

If Not TableLang.EOF Then TableLang.MoveNext

Next LANGUEdef
End If
End If
TableCand.Close
TableLang.Close
Exit Function

AjouterLANGUEDEFINITIVE:
TableLang.AddNew
TableLang!IDCANDIDAT = TableCand!IDCANDIDAT
Return

EcrireLANGUEDEFINITIVE:
For InfoLANGUEDEFINITIVE = 1 To 2
IndiceLANGUEDEFINITIVE = 2 * (LANGUEdef - 1) + InfoLANGUEDEFINITIVE
TableLang.Fields.Item(InfoLANGUEDEFINITIVE) =
TableCand.Fields.Item(IndiceLANGUEDEFINITIVE)

Next InfoLANGUEDEFINITIVE
TableLang.Update
Return
End Function

Le problème c'est que la copie ne se fait que dans 'LANGUE', 'LANGUENIVEAU'
et rien ne se copie dans 'LANGUE2', 'LANGUE2NIVEAU'.

Je n'arrive pas à trouver ou est mon erreur.
Merci pour votre aide.

Luis





Avatar
Luis
Bonjour Ilan,
Je te remercie pour ta solution, elle fonctionne parfaitement.
Si tu pouvais m'éclairer car là je fais sans comprendre.
Si par exemple la 2ème table avait
LANGUE, LANGUENIVEAU
LANGUE2, LANGUE2NIVEAU
LANGUE3, LANGUE3NIVEAU
LANGUE4, LANGUE4NIVEAU
Et que l'on veuille copier les données des champs de la première table dans
les champs de la 2ème, toujours sur le même principe.
Quelle serait la solution?
Tu n'es pas obligé de me répondre, mais ça m'aiderai peut-être à comprendre
le principe.


Bonsoir, je crois qu'il manque une boucle dans ta procédure
EcrireLangueDefinitive

Dim Langue As integer

EcrireLANGUEDEFINITIVE:
For Langue = 0 To 1
For InfoLANGUEDEFINITIVE = 1 To 2
IndiceLANGUEDEFINITIVE = 2 * (LANGUEdef - 1) + InfoLANGUEDEFINITIVE
TableLang.Fields.Item(InfoLANGUEDEFINITIVE + 2 * Langue) =
TableCand.Fields.ItemIndiceLANGUEDEFINITIVE)

Next InfoLANGUEDEFINITIVE
Next Langue
TableLang.Update
Return

Bonjour,
J'ai une table avec les champs suivats

[languematernelle], [maternelle]
[1ère langue], [1parlé/écrit]
[2ème langue], [2parlé/écrit]
[3ème langue], [3parlé/écrit]
[4ème langue], [4parlé/écrit]
[5ème langue], [5parlé/écrit]

Dans la première colonne on saisie la langue par exemple 'anglais' et dans
la 2ème le niveau de connaissances de cette même langue et ainsi de suite
pour les autres langues.

Il faut que je copie dans une autre table
composée de champs suivants

LANGUE, LANGUENIVEAU
LANGUE2, LANGUE2NIVEAU

Dans 'Langue2' et 'LANGUE2NIVEAU' ont doit trouver exactement la même chose
que dans 'Langue' et 'LANGUENIVEAU'

Au fait c'est une double copie.

J'ai fait cette procédure:

Dim Db As DAO.Database
Dim TableCand As Recordset
Dim TableLang As Recordset
Dim LANGUEDEFINITIVE As Integer, InfoLANGUEDEFINITIVE As Integer,
IndiceLANGUEDEFINITIVE As Integer

Function SetLanguesConnues()

Set Db = CurrentDb
Set TableCand = Db.OpenRecordset("SELECT IDCANDIDAT, [languematernelle],
[maternelle], [1ère langue], [1parlé/écrit], [2ème langue], [2parlé/écrit],
[3ème langue], [3parlé/écrit], [4ème langue], [4parlé/écrit], [5ème langue],
[5parlé/écrit] FROM CANDIDATS WHERE IDCANDIDAT =" & Forms![TOUS
CANDIDATS].IDCANDIDAT)

Set TableLang = Db.OpenRecordset("SELECT IDCANDIDAT, LANGUE, LANGUENIVEAU,
LANGUE2, LANGUE2NIVEAU FROM LANGUESCONNUES ORDER BY IDCANDIDAT;")

If Not (TableCand.BOF And TableCand.EOF) Then
TableLang.FindFirst ("IDCANDIDAT=" & TableCand!IDCANDIDAT)
If TableLang.NoMatch Then
For LANGUEdef = 1 To 6
GoSub AjouterLANGUEDEFINITIVE
GoSub EcrireLANGUEDEFINITIVE
Next LANGUEdef
Else
For LANGUEdef = 1 To 6
If TableLang.EOF Then
GoSub AjouterLANGUEDEFINITIVE
Else
If TableLang!IDCANDIDAT <> TableCand!IDCANDIDAT Then
GoSub AjouterLANGUEDEFINITIVE
Else
TableLang.Edit
End If
End If
GoSub EcrireLANGUEDEFINITIVE

If Not TableLang.EOF Then TableLang.MoveNext

Next LANGUEdef
End If
End If
TableCand.Close
TableLang.Close
Exit Function

AjouterLANGUEDEFINITIVE:
TableLang.AddNew
TableLang!IDCANDIDAT = TableCand!IDCANDIDAT
Return

EcrireLANGUEDEFINITIVE:
For InfoLANGUEDEFINITIVE = 1 To 2
IndiceLANGUEDEFINITIVE = 2 * (LANGUEdef - 1) + InfoLANGUEDEFINITIVE
TableLang.Fields.Item(InfoLANGUEDEFINITIVE) =
TableCand.Fields.Item(IndiceLANGUEDEFINITIVE)

Next InfoLANGUEDEFINITIVE
TableLang.Update
Return
End Function

Le problème c'est que la copie ne se fait que dans 'LANGUE', 'LANGUENIVEAU'
et rien ne se copie dans 'LANGUE2', 'LANGUE2NIVEAU'.

Je n'arrive pas à trouver ou est mon erreur.
Merci pour votre aide.

Luis