OVH Cloud OVH Cloud

Copie d'une table à l'autre

23 réponses
Avatar
Luis
Bonjour,
Dans une table j'ai des champs correspondants =E0 des=20
contacts, group=E9s dans un formulaire comme suit:
Contact1:
DEPARTEMENT1
POLITESSE1
RESPONSABLE1
FONCTION1
TELDIRECT1
MOBILE1
FAX1
e-mail1
Contact2
DEPARTEMENT2
POLITESSE2

etc et ainsi de suite pour tous les groupes de contacts
J'ai cr=E9=E9 une autre table pour regrouper tous les=20
contacts, mais j'ai deux probl=E8mes.
1: le regroupement se fait pour chaque contact sur 8 lignes
2: lorsque je delete un champ le renseignement reste dans=20
la deuxi=E8me table.
L'=E9criture d'une table sur l'autre je la fait comme =E7a:

Private Sub RESPONSABLE_LostFocus()

Dim Crit=E8re As String, MaBD As Database, MaTable As=20
Recordset
SendKeys "+{ENTER}"

NUMCLIENT =3D [NClient]
CAT1 =3D RESPONSABLE
Set MaBD =3D DBEngine.Workspaces(0).Databases(0)
Set MaTable =3D MaBD.OpenRecordset("CONTACTS_CLIENTS",=20
DB_OPEN_DYNASET) ' Cr=E9e la feuille de r=E9ponses dynamique.
MaTable.MoveFirst ' Recherche la premi=E8re occurence.
Do Until MaTable.EOF ' Boucle jusqu'=E0 ce qu'il n'y ait=20
plus d'enregistrement correspondant.
=20
TESTER =3D MaTable!NClient
If TESTER =3D NUMCLIENT Then
CONTACT =3D MaTable!CONTACT
If CONTACT =3D CAT1 Then
trouve =3D 1
Exit Do
Else
trouve =3D 0
End If
MaTable.MoveNext
Else
MaTable.MoveNext
End If

Loop =20


If trouve =3D 0 Then
MaTable.AddNew
MaTable!NClient =3D NClient
MaTable!CONTACT =3D RESPONSABLE
MaTable.Update
MaTable.Close
Else
'matable.Close
End If

End Sub

Private Sub POLITESSE_LostFocus()
Dim Crit=E8re As String, MaBD As Database, MaTable As=20
Recordset
SendKeys "+{ENTER}"

NUMCLIENT =3D [NClient]
CAT2 =3D POLITESSE

Set MaBD =3D DBEngine.Workspaces(0).Databases(0)
Set MaTable =3D MaBD.OpenRecordset("CONTACTS_CLIENTS",=20
DB_OPEN_DYNASET) ' Cr=E9e la feuille de r=E9ponses dynamique.
MaTable.MoveFirst ' Recherche la premi=E8re occurence.
Do Until MaTable.EOF ' Boucle jusqu'=E0 ce qu'il n'y ait=20
plus d'enregistrement correspondant.
=20
TESTER =3D MaTable!NClient
If TESTER =3D NUMCLIENT Then
Mme_Mlle_M =3D MaTable!Mme_Mlle_M
If Mme_Mlle_M =3D CAT2 Then
trouve =3D 1
Exit Do
Else
trouve =3D 0
End If
MaTable.MoveNext
Else
MaTable.MoveNext
End If

Loop ' Fin de la boucle.


If trouve =3D 0 Then
MaTable.AddNew
MaTable!NClient =3D NClient
MaTable!Mme_Mlle_M =3D POLITESSE
MaTable.Update
MaTable.Close
Else
'matable.Close
End If

End Sub

et comme =E7a avec chaque champ

N=B0Contact
NCLIENT / NOM /POLITESSE
/FONCTION /DEPARTEMENT
/TELDIRECT
/ Mail/MOBILE1/FAX
13 / 3298 / Pierre Gros =09
=09
15 / 3298 / Monsieur =09
=09
28 / 3298 / Comptable =09
=09
29 / 3298 / Direction Financi=E8re =09
=09
37 / 3298 /0408197719 =09
=09
39 / 3298 /jg@namr.com =09
=09
44 / 3298 / 0696755432=09
=09
49 / 3298 / 0225678889=09
=09
D=E9sol=E9 pour la mise en page, mais il est dificile d'=E9crire=20
une table, j'esp=E8re que je me fais tout de m=EAme comprendre.

Que dois-je modifier pour que tous les renseignements=20
concernant un contact s'=E9crivent sur la m=EAme liqne et que=20
lorsque je delete l'information sur le formulaire l'info=20
s'efface dans la table?

J'ep=E8re avoir des infos, merci.
Luis

10 réponses

1 2 3
Avatar
Ilan
Re Luis
Essaie avec ceci
set TABLE1Û.openrecordset("SELECT * FROM Clients")
set TABLE2Û.openrecordset("SELECT * FROM CONTACTS_CLIENTS")


Re-bonjour,

Voilà j'ai fini d'écrire ça donne ce qui suit, mais rien
ne va s'inscrire dans la table2:

Dim Db As Database
Dim TABLE1, TABLE2 As Recordset

Set Db = CurrentDb
Set TABLE1 = Db.OpenRecordset("Clients")
Set TABLE2 = Db.OpenRecordset("CONTACTS_CLIENTS")
TABLE1.MoveFirst
While Not TABLE1.EOF
TABLE2.FindFirst ("Nclient=" & TABLE1!NClient)
If TABLE1.NoMatch Then
If Not (IsNull(TABLE1!RESPONSABLE) Or TABLE1!
RESPONSABLE = "") Then

TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT
TABLE2!TELDIRECT = TABLE1!TELDIRECT1
TABLE2!NATELDIRECT = TABLE1!NATEL
TABLE2!FAXDIRECT = TABLE1!FAX1
TABLE2!MAILDIRECT = TABLE1![e-mail1]
TABLE2!FONCTION = TABLE1!FONCTION
TABLE2.Update

End If
If Not (IsNull(TABLE1!RESPONSABLE2) Or TABLE1!
RESPONSABLE2 = "") Then
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE2
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE2
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT2
TABLE2!TELDIRECT = TABLE1!TELDIRECT2
TABLE2!NATELDIRECT = TABLE1!NATEL2
TABLE2!FAXDIRECT = TABLE1!FAX2
TABLE2!MAILDIRECT = TABLE1![e-mail2]
TABLE2!FONCTION = TABLE1!FONCTION2

TABLE2.Update
End If
If Not (IsNull(TABLE1!RESPONSABLE3) Or TABLE1!
RESPONSABLE3 = "") Then
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE3
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE3
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT3
TABLE2!TELDIRECT = TABLE1!TELEDIRECT3
TABLE2!NATELDIRECT = TABLE1!NATEL3
TABLE2!FAXDIRECT = TABLE1!FAX3
TABLE2!MAILDIRECT = TABLE1![e-mail3]
TABLE2!FONCTION = TABLE1!FONCTION3

TABLE2.Update
End If
End If
TABLE1.MoveNext
Wend
TABLE2.Close
TABLE1.Close


-----Message d'origine-----
Ok Luis,

Pour eviter toute erreur de compilation tu vas devoir
ecrire plus de ligne

de code


While Not TABLE1.EOF
TABLE2.FindFirst ("Nclient=" & TABLE1!nclient)
If TABLE1.NoMatch Then
If Not (IsNull(TABLE1!contact1) Or TABLE1!
contact1 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact1
...

TABLE2.Update
End If
If Not (IsNull(TABLE1!contact2) Or TABLE1!
contact2 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact2
...
TABLE2.Update
End If
If Not (IsNull(TABLE1!contact3) Or TABLE1!
contact3 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact2
....

TABLE2.Update
End If
End If
TABLE1.MoveNext
Wend
TABLE1.Close
TABLE2.Close


Bonjour Pierre CFI,
Merci pour les "
Maintenant j'ai une autre erreur:
Erreur d'exécution '3265'
Elément non trouvé dans la collection.
Avec cette ligne en surbrillance
Do While Not (IsNull(TABLE1.Fields("RESPONSABLE" & i))
Or


TABLE1.Fields("RESPONSABLE" & i) = "")
Dès que je sort de ce que je connais, je suis perdu.
Luis
-----Message d'origine-----
bonjour
avec des "
Set TABLE1 = Db.OpenRecordset("Clients")

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

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"lUIS" a écrit
dans



le message de news:3f9801c4ab88$036f8a40
$
Bonjour Ilan,
Je viens d'essayer mais j'ai une erreur bizarre:
Erreur d'exécution '3078'
Le moteur de base de donées Microsoft Jet ne peut pas
trouver la table ou la requête source.

et j'ai cette ligne en surbrillance

Set TABLE1 = Db.OpenRecordset(Clients)
Pourtant la table 'Clients' existe et elle est bien
orthographiée.
Je ne comprend pas.
Luis

-----Message d'origine-----
Bonjour Luis,

je pense qu'il s'agit du guillement en trop derriere
le




premier i.



Bonjour Ilan,
Je te remercie pour ton tuyaux, dans:
Do While not (isnull(TABLE1.Fields("CONTACT" & i"))
OR





TABLE1.Fields("CONTACT" & i)="")
J'ai une erreur de compilation
Luis
-----Message d'origine-----
Pardon, j'oubliais qu'il faut prevoir que les
Clients






n'ont pas tous 3 Contacts
Il faut alors remplacer la boucle For ... Next par
Do






While ... Loop comme :

i=1
Do While not(isnull(TABLE1.Fields("CONTACT" & i"))
OR






TABLE1.Fields



("CONTACT" & i)="")
if i>3 then Exit Do
TABLE2.AddNew
TABLE2!NCLient=TABLE1!NCLient
TABLE2!CONTACT=TABLE1.Fields("Contact" & i)
TABLE2!POlitesse=TABLE1.Fields("Politesse" & i)
....
....
TABLE2!Email=TABLE1.Fields("Email" & i)
TABLE2.UpDate
i=i+1
Loop



.



.





.



.












Avatar
Ilan
Re Luis

Essaie avec ceci
set TABLE1Û.openrecordset("SELECT * FROM Clients")
set TABLE2Û.openrecordset("SELECT * FROM CONTACTS_CLIENTS")

et remplace TABLE1.nomatch par TABLE2.nomatch


Re-bonjour,

Voilà j'ai fini d'écrire ça donne ce qui suit, mais rien
ne va s'inscrire dans la table2:

Dim Db As Database
Dim TABLE1, TABLE2 As Recordset

Set Db = CurrentDb
Set TABLE1 = Db.OpenRecordset("Clients")
Set TABLE2 = Db.OpenRecordset("CONTACTS_CLIENTS")
TABLE1.MoveFirst
While Not TABLE1.EOF
TABLE2.FindFirst ("Nclient=" & TABLE1!NClient)
If TABLE1.NoMatch Then
If Not (IsNull(TABLE1!RESPONSABLE) Or TABLE1!
RESPONSABLE = "") Then

TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT
TABLE2!TELDIRECT = TABLE1!TELDIRECT1
TABLE2!NATELDIRECT = TABLE1!NATEL
TABLE2!FAXDIRECT = TABLE1!FAX1
TABLE2!MAILDIRECT = TABLE1![e-mail1]
TABLE2!FONCTION = TABLE1!FONCTION
TABLE2.Update

End If
If Not (IsNull(TABLE1!RESPONSABLE2) Or TABLE1!
RESPONSABLE2 = "") Then
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE2
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE2
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT2
TABLE2!TELDIRECT = TABLE1!TELDIRECT2
TABLE2!NATELDIRECT = TABLE1!NATEL2
TABLE2!FAXDIRECT = TABLE1!FAX2
TABLE2!MAILDIRECT = TABLE1![e-mail2]
TABLE2!FONCTION = TABLE1!FONCTION2

TABLE2.Update
End If
If Not (IsNull(TABLE1!RESPONSABLE3) Or TABLE1!
RESPONSABLE3 = "") Then
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE3
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE3
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT3
TABLE2!TELDIRECT = TABLE1!TELEDIRECT3
TABLE2!NATELDIRECT = TABLE1!NATEL3
TABLE2!FAXDIRECT = TABLE1!FAX3
TABLE2!MAILDIRECT = TABLE1![e-mail3]
TABLE2!FONCTION = TABLE1!FONCTION3

TABLE2.Update
End If
End If
TABLE1.MoveNext
Wend
TABLE2.Close
TABLE1.Close


-----Message d'origine-----
Ok Luis,

Pour eviter toute erreur de compilation tu vas devoir
ecrire plus de ligne

de code


While Not TABLE1.EOF
TABLE2.FindFirst ("Nclient=" & TABLE1!nclient)
If TABLE1.NoMatch Then
If Not (IsNull(TABLE1!contact1) Or TABLE1!
contact1 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact1
...

TABLE2.Update
End If
If Not (IsNull(TABLE1!contact2) Or TABLE1!
contact2 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact2
...
TABLE2.Update
End If
If Not (IsNull(TABLE1!contact3) Or TABLE1!
contact3 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact2
....

TABLE2.Update
End If
End If
TABLE1.MoveNext
Wend
TABLE1.Close
TABLE2.Close


Bonjour Pierre CFI,
Merci pour les "
Maintenant j'ai une autre erreur:
Erreur d'exécution '3265'
Elément non trouvé dans la collection.
Avec cette ligne en surbrillance
Do While Not (IsNull(TABLE1.Fields("RESPONSABLE" & i))
Or


TABLE1.Fields("RESPONSABLE" & i) = "")
Dès que je sort de ce que je connais, je suis perdu.
Luis
-----Message d'origine-----
bonjour
avec des "
Set TABLE1 = Db.OpenRecordset("Clients")

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

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"lUIS" a écrit
dans



le message de news:3f9801c4ab88$036f8a40
$
Bonjour Ilan,
Je viens d'essayer mais j'ai une erreur bizarre:
Erreur d'exécution '3078'
Le moteur de base de donées Microsoft Jet ne peut pas
trouver la table ou la requête source.

et j'ai cette ligne en surbrillance

Set TABLE1 = Db.OpenRecordset(Clients)
Pourtant la table 'Clients' existe et elle est bien
orthographiée.
Je ne comprend pas.
Luis

-----Message d'origine-----
Bonjour Luis,

je pense qu'il s'agit du guillement en trop derriere
le




premier i.



Bonjour Ilan,
Je te remercie pour ton tuyaux, dans:
Do While not (isnull(TABLE1.Fields("CONTACT" & i"))
OR





TABLE1.Fields("CONTACT" & i)="")
J'ai une erreur de compilation
Luis
-----Message d'origine-----
Pardon, j'oubliais qu'il faut prevoir que les
Clients






n'ont pas tous 3 Contacts
Il faut alors remplacer la boucle For ... Next par
Do






While ... Loop comme :

i=1
Do While not(isnull(TABLE1.Fields("CONTACT" & i"))
OR






TABLE1.Fields



("CONTACT" & i)="")
if i>3 then Exit Do
TABLE2.AddNew
TABLE2!NCLient=TABLE1!NCLient
TABLE2!CONTACT=TABLE1.Fields("Contact" & i)
TABLE2!POlitesse=TABLE1.Fields("Politesse" & i)
....
....
TABLE2!Email=TABLE1.Fields("Email" & i)
TABLE2.UpDate
i=i+1
Loop



.



.





.



.












Avatar
Luis
Re-bonjour,
Bon maintenant ça copie.
Problèmes:
1.Lorsque je sélectionne un client et je clique sur copier
les contacts, tous les contacts de tous les clients se
copient, alors qu'il faudrait qu'uniquement les contacts
de ce clients se copient.
2.Si un contact change chez un client dans la table1
lorsque je fais copier dans la table2, il n'y a pas la
modification mais l'ajout de ce nouveau nom, alors que le
précédent n'a plus de raison d'être.
Exemple:
NClient1 Contact= Albert Dupont
Ce Monsieur quitte l'entreprise et est remplacé par
Jacqueline Sage
J'aurais dans la Table2
NClient Contact= Albert Dupont
NClient Contact= Jacqueline Sage

Alors que Albert Dupont n'est plus un contact.

Comment résoudre ces deux problèmes?
Merci encore pour tout.
Luis

-----Message d'origine-----
Re Luis

Essaie avec ceci
set TABLE1Û.openrecordset("SELECT * FROM Clients")
set TABLE2Û.openrecordset("SELECT * FROM
CONTACTS_CLIENTS")


et remplace TABLE1.nomatch par TABLE2.nomatch


Re-bonjour,

Voilà j'ai fini d'écrire ça donne ce qui suit, mais
rien


ne va s'inscrire dans la table2:

Dim Db As Database
Dim TABLE1, TABLE2 As Recordset

Set Db = CurrentDb
Set TABLE1 = Db.OpenRecordset("Clients")
Set TABLE2 = Db.OpenRecordset("CONTACTS_CLIENTS")
TABLE1.MoveFirst
While Not TABLE1.EOF
TABLE2.FindFirst ("Nclient=" & TABLE1!NClient)
If TABLE1.NoMatch Then
If Not (IsNull(TABLE1!RESPONSABLE) Or TABLE1!
RESPONSABLE = "") Then

TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT
TABLE2!TELDIRECT = TABLE1!TELDIRECT1
TABLE2!NATELDIRECT = TABLE1!NATEL
TABLE2!FAXDIRECT = TABLE1!FAX1
TABLE2!MAILDIRECT = TABLE1![e-mail1]
TABLE2!FONCTION = TABLE1!FONCTION
TABLE2.Update

End If
If Not (IsNull(TABLE1!RESPONSABLE2) Or TABLE1!
RESPONSABLE2 = "") Then
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE2
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE2
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT2
TABLE2!TELDIRECT = TABLE1!TELDIRECT2
TABLE2!NATELDIRECT = TABLE1!NATEL2
TABLE2!FAXDIRECT = TABLE1!FAX2
TABLE2!MAILDIRECT = TABLE1![e-mail2]
TABLE2!FONCTION = TABLE1!FONCTION2

TABLE2.Update
End If
If Not (IsNull(TABLE1!RESPONSABLE3) Or TABLE1!
RESPONSABLE3 = "") Then
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE3
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE3
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT3
TABLE2!TELDIRECT = TABLE1!TELEDIRECT3
TABLE2!NATELDIRECT = TABLE1!NATEL3
TABLE2!FAXDIRECT = TABLE1!FAX3
TABLE2!MAILDIRECT = TABLE1![e-mail3]
TABLE2!FONCTION = TABLE1!FONCTION3

TABLE2.Update
End If
End If
TABLE1.MoveNext
Wend
TABLE2.Close
TABLE1.Close


-----Message d'origine-----
Ok Luis,

Pour eviter toute erreur de compilation tu vas devoir
ecrire plus de ligne

de code


While Not TABLE1.EOF
TABLE2.FindFirst ("Nclient=" & TABLE1!nclient)
If TABLE1.NoMatch Then
If Not (IsNull(TABLE1!contact1) Or TABLE1!
contact1 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact1
...

TABLE2.Update
End If
If Not (IsNull(TABLE1!contact2) Or TABLE1!
contact2 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact2
...
TABLE2.Update
End If
If Not (IsNull(TABLE1!contact3) Or TABLE1!
contact3 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact2
....

TABLE2.Update
End If
End If
TABLE1.MoveNext
Wend
TABLE1.Close
TABLE2.Close


Bonjour Pierre CFI,
Merci pour les "
Maintenant j'ai une autre erreur:
Erreur d'exÃf©cution '3265'
ElÃf©ment non trouvÃf© dans la collection.
Avec cette ligne en surbrillance
Do While Not (IsNull(TABLE1.Fields("RESPONSABLE" &
i))




Or
TABLE1.Fields("RESPONSABLE" & i) = "")
DÃf¨s que je sort de ce que je connais, je suis
perdu.




Luis
-----Message d'origine-----
bonjour
avec des "
Set TABLE1 = Db.OpenRecordset("Clients")

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

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"lUIS" a
Ãf©crit





dans
le message de news:3f9801c4ab88$036f8a40
$
Bonjour Ilan,
Je viens d'essayer mais j'ai une erreur bizarre:
Erreur d'exÃf©cution '3078'
Le moteur de base de donÃf©es Microsoft Jet ne
peut pas





trouver la table ou la requÃfªte source.

et j'ai cette ligne en surbrillance

Set TABLE1 = Db.OpenRecordset(Clients)
Pourtant la table 'Clients' existe et elle est bien
orthographiÃf©e.
Je ne comprend pas.
Luis

-----Message d'origine-----
Bonjour Luis,

je pense qu'il s'agit du guillement en trop
derriere






le
premier i.



Bonjour Ilan,
Je te remercie pour ton tuyaux, dans:
Do While not (isnull(TABLE1.Fields("CONTACT" &
i"))







OR
TABLE1.Fields("CONTACT" & i)="")
J'ai une erreur de compilation
Luis
-----Message d'origine-----
Pardon, j'oubliais qu'il faut prevoir que les
Clients






n'ont pas tous 3 Contacts
Il faut alors remplacer la boucle For ... Next
par








Do
While ... Loop comme :

i=1
Do While not(isnull(TABLE1.Fields("CONTACT" &
i"))








OR
TABLE1.Fields



("CONTACT" & i)="")
if i>3 then Exit Do
TABLE2.AddNew
TABLE2!NCLient=TABLE1!NCLient
TABLE2!CONTACT=TABLE1.Fields("Contact" & i)
TABLE2!POlitesse=TABLE1.Fields("Politesse" &
i)








....
....
TABLE2!Email=TABLE1.Fields("Email" & i)
TABLE2.UpDate
i=i+1
Loop



.



.





.



.




.











Avatar
Luis
Re-bonjour,
Pardon je me suis trompé le problème est comme suit:

1.Lorsque je sélectionne un client et je clique sur copier
les contacts, tous les contacts de tous les clients se
copient, alors qu'il faudrait qu'uniquement les contacts
de ce clients se copient.
2.Si un contact change chez un client dans la table1
lorsque je fais copier dans la table2, il n'y a pas la
modification.
Exemple:
NClient1 Contact= Albert Dupont
Ce Monsieur quitte l'entreprise et est remplacé par
Jacqueline Sage
J'aurais dans la Table2
Toujours
NClient Contact= Albert Dupont

Alors que Albert Dupont n'est plus un contact.
Comment résoudre ces deux problèmes?
Merci encore pour tout.
Luis

-----Message d'origine-----
Bonjour Ilan,
Il y a toujours le même problème et je crois que c'est
parce que j'ai mal expliqué le problème
La TABLE1 est une table clients avec un centaine de
champs

dont les champs

RESPONSABLE
RESPONSABLE2
RESPONSABLE3
dans la Table2 ce champ s'appelle 'CONTACT'

DEPARTEMENT1
DEPARTEMENT2
DEPARTEMENT3
dans la Table2 ce champ s'appelle 'DEPARTEMENT'

POLITESSE
POLITESSE2
POLITESSE3
dans la Table2 ce champ s'appelle 'Mme_Mlle_M'

TELDIRECT1
TELDIRECT2
TELEDIRECT3
dans la Table2 ce champ s'appelle 'TELDIRECT'

NATEL
NATEL2
NATEL3
dans la Table2 ce champ s'appelle 'NATELDIRECT'

FAX1
FAX2
FAX3
dans la Table2 ce champ s'appelle 'FAXDIRECT'

e-mail1
e-mail2
e-mail3
dans la Table2 ce champ s'appelle 'MAILDIRECT'

Fonction
FONCTION2
FONCTION3
dans la Table2 ce champ s'appelle 'Fonction'

C'est 3 champs de la Table1 qui doivent être copiés,
quîls

soient vide ou pas, dans la Table2 à chaque fois

la Table1 s'appelle 'Clients'
la Table2 s'appelle 'Contacts_Clients'
Il n'y a pas de table 'CONTACTS'.
J'espère que j'ai été plus claire, cette fois.
Luis

-----Message d'origine-----
Ok Luis,

Pour eviter toute erreur de compilation tu vas devoir
ecrire plus de ligne

de code


While Not TABLE1.EOF
TABLE2.FindFirst ("Nclient=" & TABLE1!nclient)
If TABLE1.NoMatch Then
If Not (IsNull(TABLE1!contact1) Or TABLE1!
contact1 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact1
...

TABLE2.Update
End If
If Not (IsNull(TABLE1!contact2) Or TABLE1!
contact2 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact2
...
TABLE2.Update
End If
If Not (IsNull(TABLE1!contact3) Or TABLE1!
contact3 = "") Then

TABLE2.AddNew
TABLE2!nclient = TABLE1!nclient
TABLE2!Contact = TABLE1!contact2
....

TABLE2.Update
End If
End If
TABLE1.MoveNext
Wend
TABLE1.Close
TABLE2.Close


Bonjour Pierre CFI,
Merci pour les "
Maintenant j'ai une autre erreur:
Erreur d'exécution '3265'
Elément non trouvé dans la collection.
Avec cette ligne en surbrillance
Do While Not (IsNull(TABLE1.Fields("RESPONSABLE" & i))
Or


TABLE1.Fields("RESPONSABLE" & i) = "")
Dès que je sort de ce que je connais, je suis perdu.
Luis
-----Message d'origine-----
bonjour
avec des "
Set TABLE1 = Db.OpenRecordset("Clients")

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

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"lUIS" a écrit
dans



le message de news:3f9801c4ab88$036f8a40
$
Bonjour Ilan,
Je viens d'essayer mais j'ai une erreur bizarre:
Erreur d'exécution '3078'
Le moteur de base de donées Microsoft Jet ne peut pas
trouver la table ou la requête source.

et j'ai cette ligne en surbrillance

Set TABLE1 = Db.OpenRecordset(Clients)
Pourtant la table 'Clients' existe et elle est bien
orthographiée.
Je ne comprend pas.
Luis

-----Message d'origine-----
Bonjour Luis,

je pense qu'il s'agit du guillement en trop derriere
le




premier i.



Bonjour Ilan,
Je te remercie pour ton tuyaux, dans:
Do While not (isnull(TABLE1.Fields("CONTACT" & i"))
OR





TABLE1.Fields("CONTACT" & i)="")
J'ai une erreur de compilation
Luis
-----Message d'origine-----
Pardon, j'oubliais qu'il faut prevoir que les
Clients






n'ont pas tous 3 Contacts
Il faut alors remplacer la boucle For ... Next
par







Do
While ... Loop comme :

i=1
Do While not(isnull(TABLE1.Fields("CONTACT" &
i"))







OR
TABLE1.Fields



("CONTACT" & i)="")
if i>3 then Exit Do
TABLE2.AddNew
TABLE2!NCLient=TABLE1!NCLient
TABLE2!CONTACT=TABLE1.Fields("Contact" & i)
TABLE2!POlitesse=TABLE1.Fields("Politesse" & i)
....
....
TABLE2!Email=TABLE1.Fields("Email" & i)
TABLE2.UpDate
i=i+1
Loop



.



.





.



.


.










Avatar
Ilan
Bonjour Luis,
La fonction que je t'ai donne ne sert que lorsque CONTACTS_CLIENTS est vide.
Pour ce que tu veux faire il faut que la fonction connaisse le client
selectionne.
J'ai reecrit la fonction pour te permettre de faire ce que tu veux.
Mais comme tout programme il faut tester avant de valider.

Tu trouveras au debut de fonction les lignes
Chaine="SELECT * FROM Clients WHERE NClient=" & NomduControl.Value & ";"
Set TABLE1Û.Openrecordset(Chaine)
Ces lignes ne sont valables que si :
1) la fonction fait partie du code de ton formulaire sinon ajouter
forms("Nomduformulaire"). devant NomduControl
2) le control renvoie la valeur du champ NClient

Tu trouveras au bas de la fonction la ligne
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
x represente le nombre de champs de la table CLIENTS qui sont avant le
premier
champ RESPONSABLE. Tu dois le remplacer par sa valeur

Dim Db as DataBase
Dim TABLE1, TABLE2 as recordset
Dim Contact, InfoContact, IndiceInfo as integer

Function SetContact()
Set Db=currentdb
Chaine="SELECT * FROM Clients WHERE NClient=" & NomduControl.Value & ";"
Set TABLE1Û.Openrecordset(Chaine)
Set TABLE2Û.OpenRecordset("SELECT * FROM CONTACTS_CLIENTS;")

If Not (TABLE1.BOF Or TABLE1.EOF) Then
TABLE2.FindFirst ("NClient=" & TABLE1!NClient)
If TABLE2.NoMatch Then
For Contact = 1 To 3
GoSub AjouterContact
GoSub EcrireInfo
Next Contact
Else
For Contact = 1 To 3
If (TABLE2.EOF Or TABLE2!NClient <> TABLE1!NClient) Then
GoSub AjouterContact
Else
TABLE2.Edit
End If
GoSub EcrireInfo
TABLE2.MoveNext
Next Contact
End If
End If
TABLE1.Close
TABLE2.Close
Exit Function

AjouterContact:
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
Return

EcrireInfo:
For Info = 1 To 8
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
TABLE2.Fields.Item(InfoContact+1)=TABLE1.Fields.Item (IndiceInfo)
Next Info
TABLE2.Update
Return
End Function
Avatar
Ilan
Oops !
Remplace x par x-1


Bonjour Luis,
La fonction que je t'ai donne ne sert que lorsque CONTACTS_CLIENTS est vide.
Pour ce que tu veux faire il faut que la fonction connaisse le client
selectionne.
J'ai reecrit la fonction pour te permettre de faire ce que tu veux.
Mais comme tout programme il faut tester avant de valider.

Tu trouveras au debut de fonction les lignes
Chaine="SELECT * FROM Clients WHERE NClient=" & NomduControl.Value & ";"
Set TABLE1Û.Openrecordset(Chaine)
Ces lignes ne sont valables que si :
1) la fonction fait partie du code de ton formulaire sinon ajouter
forms("Nomduformulaire"). devant NomduControl
2) le control renvoie la valeur du champ NClient

Tu trouveras au bas de la fonction la ligne
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
x represente le nombre de champs de la table CLIENTS qui sont avant le
premier
champ RESPONSABLE. Tu dois le remplacer par sa valeur

Dim Db as DataBase
Dim TABLE1, TABLE2 as recordset
Dim Contact, InfoContact, IndiceInfo as integer

Function SetContact()
Set Db=currentdb
Chaine="SELECT * FROM Clients WHERE NClient=" & NomduControl.Value & ";"
Set TABLE1Û.Openrecordset(Chaine)
Set TABLE2Û.OpenRecordset("SELECT * FROM CONTACTS_CLIENTS;")

If Not (TABLE1.BOF Or TABLE1.EOF) Then
TABLE2.FindFirst ("NClient=" & TABLE1!NClient)
If TABLE2.NoMatch Then
For Contact = 1 To 3
GoSub AjouterContact
GoSub EcrireInfo
Next Contact
Else
For Contact = 1 To 3
If (TABLE2.EOF Or TABLE2!NClient <> TABLE1!NClient) Then
GoSub AjouterContact
Else
TABLE2.Edit
End If
GoSub EcrireInfo
TABLE2.MoveNext
Next Contact
End If
End If
TABLE1.Close
TABLE2.Close
Exit Function

AjouterContact:
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
Return

EcrireInfo:
For Info = 1 To 8
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
TABLE2.Fields.Item(InfoContact+1)=TABLE1.Fields.Item (IndiceInfo)
Next Info
TABLE2.Update
Return
End Function



Avatar
Luis
Bonjour Ilan,
Que veut dire 'NomduControl.Value' dans
Chaine="SELECT * FROM Clients WHERE NClient=" &
NomduControl.Value & ";"

Pourquoi me parles-tu de la fonction? Dans
la fonction fait partie du code de ton formulaire sinon
ajouter
forms("Nomduformulaire"). devant NomduControl


Je vois un problème, c'est que les champs dans la
table1 'clients' ne se suivent pas comme ci-dessous et que
de plus,par exemple,entre 'fonction' et 'Responsable2' ou
entre 'DEPARTEMENT' et 'TELDIRECT1' il y a d'autres champs
qui n'ont rien à avoir avec les contacts, donc je ne peux
pas faire une comptage comme si tout se suivait, je peux
les faire suivre dans la requête qui est sous le
formulaire qui elle s'appelle 'Clients Vrais'


RESPONSABLE
POLITESSE
DEPARTEMENT1
TELDIRECT1
NATEL
FAX1
e-mail1]
FONCTION



Je prend un exemple concret.
FONCTION
ACTIVITE (ce champ ne fait pas partie de la selection des
contacts)
DEPARTEMENT1
OPERATIONS (ce champ ne fait pas partie de la selection
des contacts)
RESPONSABLE
Etc...

Donc là problème...
Luis

-----Message d'origine-----
Oops !
Remplace x par x-1


Bonjour Luis,
La fonction que je t'ai donne ne sert que lorsque
CONTACTS_CLIENTS est vide.


Pour ce que tu veux faire il faut que la fonction
connaisse le client


selectionne.
J'ai reecrit la fonction pour te permettre de faire ce
que tu veux.


Mais comme tout programme il faut tester avant de
valider.



Tu trouveras au debut de fonction les lignes
Chaine="SELECT * FROM Clients WHERE NClient=" &
NomduControl.Value & ";"


Set TABLE1Û.Openrecordset(Chaine)
Ces lignes ne sont valables que si :
1) la fonction fait partie du code de ton formulaire
sinon ajouter


forms("Nomduformulaire"). devant NomduControl
2) le control renvoie la valeur du champ NClient

Tu trouveras au bas de la fonction la ligne
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
x represente le nombre de champs de la table CLIENTS
qui sont avant le


premier
champ RESPONSABLE. Tu dois le remplacer par sa valeur

Dim Db as DataBase
Dim TABLE1, TABLE2 as recordset
Dim Contact, InfoContact, IndiceInfo as integer

Function SetContact()
Set Db=currentdb
Chaine="SELECT * FROM Clients WHERE NClient=" &
NomduControl.Value & ";"


Set TABLE1Û.Openrecordset(Chaine)
Set TABLE2Û.OpenRecordset("SELECT * FROM
CONTACTS_CLIENTS;")



If Not (TABLE1.BOF Or TABLE1.EOF) Then
TABLE2.FindFirst ("NClient=" & TABLE1!NClient)
If TABLE2.NoMatch Then
For Contact = 1 To 3
GoSub AjouterContact
GoSub EcrireInfo
Next Contact
Else
For Contact = 1 To 3
If (TABLE2.EOF Or TABLE2!NClient <> TABLE1!NClient)
Then


GoSub AjouterContact
Else
TABLE2.Edit
End If
GoSub EcrireInfo
TABLE2.MoveNext
Next Contact
End If
End If
TABLE1.Close
TABLE2.Close
Exit Function

AjouterContact:
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
Return

EcrireInfo:
For Info = 1 To 8
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
TABLE2.Fields.Item(InfoContact+1)
=TABLE1.Fields.Item (IndiceInfo)


Next Info
TABLE2.Update
Return
End Function

.





Avatar
Ilan
Bonjour Luis,

1)
'Nomducontrol.Value' : Tu dois remplacer 'Nomducontrol' par le nom du
control
(une zone de liste, une boite de saisie, .... ) qui contient le client
selectionne.

2)
Pour n'avoir dans TABLE1 que les champs qui t'interessent.
Remplace SELECT *
par SELECT NClient, Responsable ,... (dans ce cas-ci x=0)





Bonjour Ilan,
Que veut dire 'NomduControl.Value' dans
Chaine="SELECT * FROM Clients WHERE NClient=" &
NomduControl.Value & ";"

Pourquoi me parles-tu de la fonction? Dans
la fonction fait partie du code de ton formulaire sinon
ajouter
forms("Nomduformulaire"). devant NomduControl


Je vois un problème, c'est que les champs dans la
table1 'clients' ne se suivent pas comme ci-dessous et que
de plus,par exemple,entre 'fonction' et 'Responsable2' ou
entre 'DEPARTEMENT' et 'TELDIRECT1' il y a d'autres champs
qui n'ont rien à avoir avec les contacts, donc je ne peux
pas faire une comptage comme si tout se suivait, je peux
les faire suivre dans la requête qui est sous le
formulaire qui elle s'appelle 'Clients Vrais'


RESPONSABLE
POLITESSE
DEPARTEMENT1
TELDIRECT1
NATEL
FAX1
e-mail1]
FONCTION



Je prend un exemple concret.
FONCTION
ACTIVITE (ce champ ne fait pas partie de la selection des
contacts)
DEPARTEMENT1
OPERATIONS (ce champ ne fait pas partie de la selection
des contacts)
RESPONSABLE
Etc...

Donc là problème...
Luis

-----Message d'origine-----
Oops !
Remplace x par x-1


Bonjour Luis,
La fonction que je t'ai donne ne sert que lorsque
CONTACTS_CLIENTS est vide.


Pour ce que tu veux faire il faut que la fonction
connaisse le client


selectionne.
J'ai reecrit la fonction pour te permettre de faire ce
que tu veux.


Mais comme tout programme il faut tester avant de
valider.



Tu trouveras au debut de fonction les lignes
Chaine="SELECT * FROM Clients WHERE NClient=" &
NomduControl.Value & ";"


Set TABLE1Û.Openrecordset(Chaine)
Ces lignes ne sont valables que si :
1) la fonction fait partie du code de ton formulaire
sinon ajouter


forms("Nomduformulaire"). devant NomduControl
2) le control renvoie la valeur du champ NClient

Tu trouveras au bas de la fonction la ligne
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
x represente le nombre de champs de la table CLIENTS
qui sont avant le


premier
champ RESPONSABLE. Tu dois le remplacer par sa valeur

Dim Db as DataBase
Dim TABLE1, TABLE2 as recordset
Dim Contact, InfoContact, IndiceInfo as integer

Function SetContact()
Set Db=currentdb
Chaine="SELECT * FROM Clients WHERE NClient=" &
NomduControl.Value & ";"


Set TABLE1Û.Openrecordset(Chaine)
Set TABLE2Û.OpenRecordset("SELECT * FROM
CONTACTS_CLIENTS;")



If Not (TABLE1.BOF Or TABLE1.EOF) Then
TABLE2.FindFirst ("NClient=" & TABLE1!NClient)
If TABLE2.NoMatch Then
For Contact = 1 To 3
GoSub AjouterContact
GoSub EcrireInfo
Next Contact
Else
For Contact = 1 To 3
If (TABLE2.EOF Or TABLE2!NClient <> TABLE1!NClient)
Then


GoSub AjouterContact
Else
TABLE2.Edit
End If
GoSub EcrireInfo
TABLE2.MoveNext
Next Contact
End If
End If
TABLE1.Close
TABLE2.Close
Exit Function

AjouterContact:
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
Return

EcrireInfo:
For Info = 1 To 8
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
TABLE2.Fields.Item(InfoContact+1)
=TABLE1.Fields.Item (IndiceInfo)


Next Info
TABLE2.Update
Return
End Function

.








Avatar
Luis
Bonjour Ilan,
La je suis perdu car je ne comprend pas ce que je fais.
Je te mets là la fonction en entier que j'ai mis dans mon
formulaire:

Dim Db As Database
Dim TABLE1, TABLE2 As Recordset
Dim CONTACT, InfoContact, IndiceInfo As Integer

Function SetContact()
Set Db = CurrentDb
Chaîne = "SELECT * FROM Clients WHERE NClient=" & Forms!
[Clients].[NClient] & ";"
Set TABLE1 = Db.OpenRecordset(Chaîne)
Set TABLE2 = Db.OpenRecordset("SELECT * FROM
CONTACTS_CLIENTS;")

If Not (TABLE1.BOF Or TABLE1.EOF) Then
TABLE2.FindFirst ("NClient=" & TABLE1!NClient)
If TABLE2.NoMatch Then
For CONTACT = 1 To 3
GoSub AjouterContact
GoSub EcrireInfo
Next CONTACT
Else
For CONTACT = 1 To 3
If (TABLE2.EOF Or TABLE2!NClient <> TABLE1!NClient) Then
GoSub AjouterContact
Else
TABLE2.Edit
End If
GoSub EcrireInfo
TABLE2.MoveNext
Next CONTACT
End If
End If
TABLE1.Close
TABLE2.Close
Exit Function

AjouterContact:
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
Return

EcrireInfo:
For Info = 1 To 8
IndiceInfo = 8 * (CONTACT - 1) + InfoContact + X
TABLE2.Fields.Item(InfoContact + 1) =
TABLE1.Fields.Item(IndiceInfo)
Next Info
TABLE2.Update
Return
End Function

Et dans le bouton Valider du formulaire
SetContact

Peux tu s'il te plaît vérifier car il se produit 3 choses
dans la table2.
1. les modifications portée ne s'éffectuent pas
2. le 2ème contact, c'est à dire responsable2 perd le
numéro de client.
3. le 3ème contact, c'est à dire responsable3 se retouve
avec le numéro de Fax de la société à la place du numéro
de client.

Que se passe-t-il?
Comme je t'ai dit les champs dans la table1 ne se suivent
pas, est-ce que ça vient de la?

Dans l'ancienne version on indiquait ce qui correspondait
à quoi:
Dim Db As Database
Dim TABLE1, TABLE2 As Recordset

Set Db = CurrentDb
Set TABLE1 = Db.OpenRecordset("SELECT * FROM Clients")
Set TABLE2 = Db.OpenRecordset("SELECT * FROM
CONTACTS_CLIENTS")

TABLE1.MoveFirst
While Not TABLE1.EOF
TABLE2.FindFirst ("Nclient=" & TABLE1!NClient)
If TABLE2.NoMatch Then
If Not (IsNull(TABLE1!RESPONSABLE) Or TABLE1!
RESPONSABLE = "") Then

TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
TABLE2!CONTACT = TABLE1!RESPONSABLE
TABLE2!Mme_Mlle_M = TABLE1!POLITESSE
TABLE2!DEPARTEMENT = TABLE1!DEPARTEMENT1
TABLE2!TELDIRECT = TABLE1!TELDIRECT1
TABLE2!NATELDIRECT = TABLE1!NATEL
TABLE2!FAXDIRECT = TABLE1!FAX1
TABLE2!MAILDIRECT = TABLE1![e-mail1]
TABLE2!FONCTION = TABLE1!FONCTION
TABLE2.Update
etc...
Et maintenant plus.
Désolé encore de tant te demander mais la je suis dans le
bleu.
Luis
-----Message d'origine-----
Bonjour Luis,
La fonction que je t'ai donne ne sert que lorsque
CONTACTS_CLIENTS est vide.

Pour ce que tu veux faire il faut que la fonction
connaisse le client

selectionne.
J'ai reecrit la fonction pour te permettre de faire ce
que tu veux.

Mais comme tout programme il faut tester avant de valider.

Tu trouveras au debut de fonction les lignes
Chaine="SELECT * FROM Clients WHERE NClient=" &
NomduControl.Value & ";"

Set TABLE1Û.Openrecordset(Chaine)
Ces lignes ne sont valables que si :
1) la fonction fait partie du code de ton formulaire
sinon ajouter

forms("Nomduformulaire"). devant NomduControl
2) le control renvoie la valeur du champ NClient

Tu trouveras au bas de la fonction la ligne
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
x represente le nombre de champs de la table CLIENTS qui
sont avant le

premier
champ RESPONSABLE. Tu dois le remplacer par sa valeur

Dim Db as DataBase
Dim TABLE1, TABLE2 as recordset
Dim Contact, InfoContact, IndiceInfo as integer

Function SetContact()
Set Db=currentdb
Chaine="SELECT * FROM Clients WHERE NClient=" &
NomduControl.Value & ";"

Set TABLE1Û.Openrecordset(Chaine)
Set TABLE2Û.OpenRecordset("SELECT * FROM
CONTACTS_CLIENTS;")


If Not (TABLE1.BOF Or TABLE1.EOF) Then
TABLE2.FindFirst ("NClient=" & TABLE1!NClient)
If TABLE2.NoMatch Then
For Contact = 1 To 3
GoSub AjouterContact
GoSub EcrireInfo
Next Contact
Else
For Contact = 1 To 3
If (TABLE2.EOF Or TABLE2!NClient <> TABLE1!NClient)
Then

GoSub AjouterContact
Else
TABLE2.Edit
End If
GoSub EcrireInfo
TABLE2.MoveNext
Next Contact
End If
End If
TABLE1.Close
TABLE2.Close
Exit Function

AjouterContact:
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
Return

EcrireInfo:
For Info = 1 To 8
IndiceInfo = 8 * (Contact - 1) + InfoContact + x
TABLE2.Fields.Item(InfoContact+1)=TABLE1.Fields.Item
(IndiceInfo)

Next Info
TABLE2.Update
Return
End Function

.



Avatar
Ilan
Bonsoir Luis,
Je n'ai pas mis de commentaires dans le code pour que le post soit plus
lisisble.

1) l'instruction SELECT * renvoie tous les champs de la table. Puisque tu
n'as besoin que des champs relatifs aux contacts, remplace le signe *
par le nom des champs desires en separant chaque champ d'une virgule.

Ex: SELECT NCLIENT, RESPONSABLE, POLITESSE
dans cette exemple il n' y a qu'un champ devant RESPONSABLE donc X=0
il faut donc remplacer la ligne : IndiceInfo=8*(CONTACT-1) + InfoConctat +
X par
IndiceInfo=8*(CONTACT-1) + InfoContact

Pour information:
CONTACT : correspond au numero du contact a ajouter ou a modifier.Il y a 3
contacts d'ou les boucles de traitement For CONTACT=1 to 3
INFOCONTACT : correspond au numero de cette information. Il y a 8 valeurs d'ou
les boucles de traitements For InfoContact=1 to 8 )
INDICEINFO: correspond au numero du champ de TABLE1 dont on souhaite copier
la valeur dans TABLE2.


2)Concernant l'instruction WHERE:
Comment s'appelle ton formulaire ?
Comment s'appelle le controle dans lequel tu choisis le client ?
Quelle valeur est contenue dans ce controle (Le nom du client, son
numero) ?

3) Commentaires du code :

'TABLE1 est-elle vide ?
If Not (TABLE1.BOF Or TABLE1.EOF) Then
'Non TABLE1 n'est pas vide alors Rechercher le client dans TABLE2
TABLE2.FindFirst ("NClient=" & TABLE1!NClient)
'Le client a-t-il ete trouve dans TABLE2?
If TABLE2.NoMatch Then
'Non le client n'a pas ete trouve alors ajouter tous les contacts
For CONTACT = 1 To 3
GoSub AjouterContact
GoSub EcrireInfo
Next CONTACT
Else
'Oui Le client a ete trouve alors du Contact1 au Contact3
For CONTACT = 1 To 3
'Le contact est-il manquant dans TABLE2 ?
If (TABLE2.EOF Or TABLE2!NClient <> TABLE1!NClient) Then
'Oui le Contact est manquant alors Ajouter le contact
GoSub AjouterContact
Else
'Non le contact existe alors copier les 8 infos de TABLE1 dans TABLE2
TABLE2.Edit
End If
'Boucle d'ecriture des 8 valeurs Contact,Politesse,....,Email
GoSub EcrireInfo
'Aller au contact suivant dans TABLE2
TABLE2.MoveNext
Next CONTACT
End If
End If
TABLE1.Close
TABLE2.Close
Exit Function

AjouterContact:
TABLE2.AddNew
TABLE2!NClient = TABLE1!NClient
Return

EcrireInfo:
For InfoContact = 1 To 8
IndiceInfo = 8 * (CONTACT - 1) + InfoContact + X
TABLE2.Fields.Item(InfoContact + 1) = TABLE1.Fields.Item(IndiceInfo)
Next Info
TABLE2.Update
Return
End Function
1 2 3