OVH Cloud OVH Cloud

Copier dans une table pluseieurs fois

3 réponses
Avatar
Luis
Bonjour,
J'avais un problème pour copier des données dans une table et Ilan m'a donné
la solution, le problème, bien que ça fonctionne parfaitement, j'ai recopié
sans comprendre et ça me dérange.
Voilà le problème tel que je l'avais exposé et ça solution:

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 Langue = 0 To 1
For InfoLANGUEDEFINITIVE = 1 To 2
IndiceLANGUEDEFINITIVE = 2 * (LANGUEdef - 1) + InfoLANGUEDEFINITIVE
TableLang.Fields.Item(InfoLANGUEDEFINITIVE + 2 * Langue) =
TableCand.Fields.ItemIndiceLANGUEDEFINITIVE)

Next Langue
Next InfoLANGUEDEFINITIVE
TableLang.Update
Return
End Function

Pour que je puisse comprendre le mécanisme de copie dans plusiures champs:

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?
Mon problème c'est de comprendre ce mécanisme:

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 Langue
Next InfoLANGUEDEFINITIVE
TableLang.Update
Return

Merci pour votre aide.

Luis

3 réponses

Avatar
Pierre CFI [mvp]
bonjour
dédiou, pour une base de données, c'est une base de données :o)) je serais curieux de savoir comment elle est faite et son but :o)))
dejà de copier 2 fois la méme chose, je freine des 4 fers (pour 3stone qui evidement ne va pas me louper, les anes ne sont pas
ferrés)

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/
Excel http://www.excelabo.net

"Luis" a écrit dans le message de news:
Bonjour,
J'avais un problème pour copier des données dans une table et Ilan m'a donné
la solution, le problème, bien que ça fonctionne parfaitement, j'ai recopié
sans comprendre et ça me dérange.
Voilà le problème tel que je l'avais exposé et ça solution:

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 Langue = 0 To 1
For InfoLANGUEDEFINITIVE = 1 To 2
IndiceLANGUEDEFINITIVE = 2 * (LANGUEdef - 1) + InfoLANGUEDEFINITIVE
TableLang.Fields.Item(InfoLANGUEDEFINITIVE + 2 * Langue) > TableCand.Fields.ItemIndiceLANGUEDEFINITIVE)

Next Langue
Next InfoLANGUEDEFINITIVE
TableLang.Update
Return
End Function

Pour que je puisse comprendre le mécanisme de copie dans plusiures champs:

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?
Mon problème c'est de comprendre ce mécanisme:

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 Langue
Next InfoLANGUEDEFINITIVE
TableLang.Update
Return

Merci pour votre aide.

Luis




Avatar
Raymond [mvp]
Bonsoir Luis.

J'ai dû te le dire 50 fois, donc pour la 51e fois, ne pas mettre des
caractères accentués dans les noms de champs, ni des caractères spéciaux
tels que /
d'autre part tu ne peux pas traiter tes noms sous forme de tableau avec des
noms pareils.
Langue_1
Langue_2
.....
Parle_Ecrit_1
Parle_Ecrit_2
etc.....

et dans ce cas ci-dessus, tu n'est pas obligé de mettre les [ ]
enfin, l'indentation, ça existe, ça permet de voir les erreurs:

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

End If
Next LANGUEdef
End If
etc.................................

Allez, salut brother................
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de news:

Bonjour,


Avatar
Luis
Bonjour Raymond,

C'est vrai, je te remercie pour ton énorme patience.
J'ai remplacé par
Langue_1
Langue_2
......
Parle_Ecrit_1
Parle_Ecrit_2
etc.....

Mais ça ne me dit pas comment je dois modifier:

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 langue = 0 To 1
For InfoLANGUEDEFINITIVE = 1 To 2
IndiceLANGUEDEFINITIVE = 2 * (LANGUEdef - 1) + InfoLANGUEDEFINITIVE
TableLang.Fields.Item(InfoLANGUEDEFINITIVE + 2 * langue) =
TableCand.Fields.Item(IndiceLANGUEDEFINITIVE)

Next InfoLANGUEDEFINITIVE
Next langue
TableLang.Update
Return
End Function



Pour dans le cas ou la 2ème table avait
LANGUE, LANGUENIVEAU
LANGUE2, LANGUE2NIVEAU
LANGUE3, LANGUE3NIVEAU
LANGUE4, LANGUE4NIVEAU

Et que je veuille écrire non pas multiplié par 2 mais par 4.

Si tu as le mécanisme ou la solution qui permet d'écrire plusieurs fois un
champ d'une table dans une autre table, ça m'aiderai à mieux comprendre.

Merci.
Luis

Bonsoir Luis.

J'ai dû te le dire 50 fois, donc pour la 51e fois, ne pas mettre des
caractères accentués dans les noms de champs, ni des caractères spéciaux
tels que /
d'autre part tu ne peux pas traiter tes noms sous forme de tableau avec des
noms pareils.
Langue_1
Langue_2
......
Parle_Ecrit_1
Parle_Ecrit_2
etc.....

et dans ce cas ci-dessus, tu n'est pas obligé de mettre les [ ]
enfin, l'indentation, ça existe, ça permet de voir les erreurs:

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

End If
Next LANGUEdef
End If
etc.................................

Allez, salut brother................
--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de news:

Bonjour,