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?
Bonjour Ilan, J'ai fais tel que tu me l'indiques mais j'ais une erreur: Erreur d'exécution '3061' Trop peu de paramètres. 25 attendu. Voici mon code complet: Dim Db As Database Dim TABLE1, TABLE2 As Recordset Dim CONTACT, INFOCONTACT, INDICEINFO As Integer
Function SetContact() Set Db = CurrentDb Chaîne = "SELECT NClient, RESPONSABLE, POLITESSE, FONCTION, TELDIRECT1, NATEL, [e-mail1], FAX1, DEPARTEMENT1, RESPONSABLE2, POLITESSE2, FONCTION2, TELDIRECT2, NATEL2, [e-mail2], FAX2, DEPARTEMENT2, RESPONSABLE3, POLITESSE3, FONCTION3, TELEDIRECT3, NATEL3, [e-mail3], FAX3, DEPARTEMENT3" Set TABLE1 = Db.OpenRecordset(Chaîne) Set TABLE2 = Db.OpenRecordset("SELECT * FROM CONTACTS_CLIENTS;") If Not (TABLE1.BOF Or TABLE1.EOF) Then TABLE2 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
EcrireInfo: For Info = 1 To 8 INDICEINFO = 8 * (CONTACT - 1) + INFOCONTACT TABLE2.Fields.Item(INFOCONTACT + 1) = TABLE1.Fields.Item(INDICEINFO) Next Info TABLE2.Update Return End Function
-----Message d'origine----- 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
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
.
Bonjour Ilan,
J'ai fais tel que tu me l'indiques mais j'ais une erreur:
Erreur d'exécution '3061'
Trop peu de paramètres. 25 attendu.
Voici mon code complet:
Dim Db As Database
Dim TABLE1, TABLE2 As Recordset
Dim CONTACT, INFOCONTACT, INDICEINFO As Integer
Function SetContact()
Set Db = CurrentDb
Chaîne = "SELECT NClient, RESPONSABLE, POLITESSE,
FONCTION, TELDIRECT1, NATEL, [e-mail1], FAX1,
DEPARTEMENT1, RESPONSABLE2, POLITESSE2, FONCTION2,
TELDIRECT2, NATEL2, [e-mail2], FAX2, DEPARTEMENT2,
RESPONSABLE3, POLITESSE3, FONCTION3, TELEDIRECT3, NATEL3,
[e-mail3], FAX3, DEPARTEMENT3"
Set TABLE1 = Db.OpenRecordset(Chaîne)
Set TABLE2 = Db.OpenRecordset("SELECT * FROM
CONTACTS_CLIENTS;")
If Not (TABLE1.BOF Or TABLE1.EOF) Then
TABLE2
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
EcrireInfo:
For Info = 1 To 8
INDICEINFO = 8 * (CONTACT - 1) + INFOCONTACT
TABLE2.Fields.Item(INFOCONTACT + 1) =
TABLE1.Fields.Item(INDICEINFO)
Next Info
TABLE2.Update
Return
End Function
-----Message d'origine-----
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
Bonjour Ilan, J'ai fais tel que tu me l'indiques mais j'ais une erreur: Erreur d'exécution '3061' Trop peu de paramètres. 25 attendu. Voici mon code complet: Dim Db As Database Dim TABLE1, TABLE2 As Recordset Dim CONTACT, INFOCONTACT, INDICEINFO As Integer
Function SetContact() Set Db = CurrentDb Chaîne = "SELECT NClient, RESPONSABLE, POLITESSE, FONCTION, TELDIRECT1, NATEL, [e-mail1], FAX1, DEPARTEMENT1, RESPONSABLE2, POLITESSE2, FONCTION2, TELDIRECT2, NATEL2, [e-mail2], FAX2, DEPARTEMENT2, RESPONSABLE3, POLITESSE3, FONCTION3, TELEDIRECT3, NATEL3, [e-mail3], FAX3, DEPARTEMENT3" Set TABLE1 = Db.OpenRecordset(Chaîne) Set TABLE2 = Db.OpenRecordset("SELECT * FROM CONTACTS_CLIENTS;") If Not (TABLE1.BOF Or TABLE1.EOF) Then TABLE2 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
EcrireInfo: For Info = 1 To 8 INDICEINFO = 8 * (CONTACT - 1) + INFOCONTACT TABLE2.Fields.Item(INFOCONTACT + 1) = TABLE1.Fields.Item(INDICEINFO) Next Info TABLE2.Update Return End Function
-----Message d'origine----- 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
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
.
Ilan
tu as oublie FROM Clients ORDER BY NClient; dans la variable chaine remplace Set TABLE2="SELECT * FROM Contacts_Clients;" par Set TABLE2="SELECT * FROM Contacts_Clients ORDER BY NClient;" remplace egalement For info=1 to 8 par For INFOCONTACT=1 to 8 et Next Info par Next INFOCONTACT
Bonjour Ilan, J'ai fais tel que tu me l'indiques mais j'ais une erreur: Erreur d'exécution '3061' Trop peu de paramètres. 25 attendu. Voici mon code complet: Dim Db As Database Dim TABLE1, TABLE2 As Recordset Dim CONTACT, INFOCONTACT, INDICEINFO As Integer
Function SetContact() Set Db = CurrentDb Chaîne = "SELECT NClient, RESPONSABLE, POLITESSE, FONCTION, TELDIRECT1, NATEL, [e-mail1], FAX1, DEPARTEMENT1, RESPONSABLE2, POLITESSE2, FONCTION2, TELDIRECT2, NATEL2, [e-mail2], FAX2, DEPARTEMENT2, RESPONSABLE3, POLITESSE3, FONCTION3, TELEDIRECT3, NATEL3, [e-mail3], FAX3, DEPARTEMENT3" Set TABLE1 = Db.OpenRecordset(Chaîne) Set TABLE2 = Db.OpenRecordset("SELECT * FROM CONTACTS_CLIENTS;") If Not (TABLE1.BOF Or TABLE1.EOF) Then TABLE2 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
EcrireInfo: For Info = 1 To 8 INDICEINFO = 8 * (CONTACT - 1) + INFOCONTACT TABLE2.Fields.Item(INFOCONTACT + 1) = TABLE1.Fields.Item(INDICEINFO) Next Info TABLE2.Update Return End Function
-----Message d'origine----- 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
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
.
tu as oublie FROM Clients ORDER BY NClient; dans la variable chaine
remplace Set TABLE2="SELECT * FROM Contacts_Clients;"
par Set TABLE2="SELECT * FROM Contacts_Clients ORDER BY NClient;"
remplace egalement
For info=1 to 8 par For INFOCONTACT=1 to 8
et
Next Info par Next INFOCONTACT
Bonjour Ilan,
J'ai fais tel que tu me l'indiques mais j'ais une erreur:
Erreur d'exécution '3061'
Trop peu de paramètres. 25 attendu.
Voici mon code complet:
Dim Db As Database
Dim TABLE1, TABLE2 As Recordset
Dim CONTACT, INFOCONTACT, INDICEINFO As Integer
Function SetContact()
Set Db = CurrentDb
Chaîne = "SELECT NClient, RESPONSABLE, POLITESSE,
FONCTION, TELDIRECT1, NATEL, [e-mail1], FAX1,
DEPARTEMENT1, RESPONSABLE2, POLITESSE2, FONCTION2,
TELDIRECT2, NATEL2, [e-mail2], FAX2, DEPARTEMENT2,
RESPONSABLE3, POLITESSE3, FONCTION3, TELEDIRECT3, NATEL3,
[e-mail3], FAX3, DEPARTEMENT3"
Set TABLE1 = Db.OpenRecordset(Chaîne)
Set TABLE2 = Db.OpenRecordset("SELECT * FROM
CONTACTS_CLIENTS;")
If Not (TABLE1.BOF Or TABLE1.EOF) Then
TABLE2
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
EcrireInfo:
For Info = 1 To 8
INDICEINFO = 8 * (CONTACT - 1) + INFOCONTACT
TABLE2.Fields.Item(INFOCONTACT + 1) =
TABLE1.Fields.Item(INDICEINFO)
Next Info
TABLE2.Update
Return
End Function
-----Message d'origine-----
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
tu as oublie FROM Clients ORDER BY NClient; dans la variable chaine remplace Set TABLE2="SELECT * FROM Contacts_Clients;" par Set TABLE2="SELECT * FROM Contacts_Clients ORDER BY NClient;" remplace egalement For info=1 to 8 par For INFOCONTACT=1 to 8 et Next Info par Next INFOCONTACT
Bonjour Ilan, J'ai fais tel que tu me l'indiques mais j'ais une erreur: Erreur d'exécution '3061' Trop peu de paramètres. 25 attendu. Voici mon code complet: Dim Db As Database Dim TABLE1, TABLE2 As Recordset Dim CONTACT, INFOCONTACT, INDICEINFO As Integer
Function SetContact() Set Db = CurrentDb Chaîne = "SELECT NClient, RESPONSABLE, POLITESSE, FONCTION, TELDIRECT1, NATEL, [e-mail1], FAX1, DEPARTEMENT1, RESPONSABLE2, POLITESSE2, FONCTION2, TELDIRECT2, NATEL2, [e-mail2], FAX2, DEPARTEMENT2, RESPONSABLE3, POLITESSE3, FONCTION3, TELEDIRECT3, NATEL3, [e-mail3], FAX3, DEPARTEMENT3" Set TABLE1 = Db.OpenRecordset(Chaîne) Set TABLE2 = Db.OpenRecordset("SELECT * FROM CONTACTS_CLIENTS;") If Not (TABLE1.BOF Or TABLE1.EOF) Then TABLE2 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
EcrireInfo: For Info = 1 To 8 INDICEINFO = 8 * (CONTACT - 1) + INFOCONTACT TABLE2.Fields.Item(INFOCONTACT + 1) = TABLE1.Fields.Item(INDICEINFO) Next Info TABLE2.Update Return End Function
-----Message d'origine----- 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
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
.
Luis
Re-bonjour, Ca ne marche toujours pas. Maintenant j'ai erreur d'exécution '3078' Le moteur de base de données Microsoft Jet ne peut pas trouver la table ou la requête source 'From CLIENTS ORDER BY NClient; NClient, Responsable, ......'
Et en surbrillance il y a: Chaine = "FROM CLIENTS ORDER BY NClient; NClient, RESPONSABLE, RESPONSABLE2, RESPONSABLE3, NATEL, fonction, POLITESSE, POLITESSE2, POLITESSE3, FONCTION2, FONCTION3, TELDIRECT1, TELDIRECT2, TELEDIRECT3, e-mail1, e-mail2, e- mail3, NATEL2, NATEL3, FAX1, FAX2, FAX3, DEPARTEMENT1, DEPARTEMENT2, DEPARTEMENT3" Set TABLE1 = Db.OpenRecordset(Chaine) Pourtant lorsque je compile il n'y a pas de problèmes. Luis
-----Message d'origine----- tu as oublie FROM Clients ORDER BY NClient; dans la variable chaine
remplace Set TABLE2="SELECT * FROM Contacts_Clients;" par Set TABLE2="SELECT * FROM Contacts_Clients ORDER BY NClient;"
remplace egalement For info=1 to 8 par For INFOCONTACT=1 to 8 et Next Info par Next INFOCONTACT
Bonjour Ilan, J'ai fais tel que tu me l'indiques mais j'ais une erreur:
[e-mail3], FAX3, DEPARTEMENT3" Set TABLE1 = Db.OpenRecordset(Chaîne) Set TABLE2 = Db.OpenRecordset("SELECT * FROM CONTACTS_CLIENTS;") If Not (TABLE1.BOF Or TABLE1.EOF) Then TABLE2 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
EcrireInfo: For Info = 1 To 8 INDICEINFO = 8 * (CONTACT - 1) + INFOCONTACT TABLE2.Fields.Item(INFOCONTACT + 1) = TABLE1.Fields.Item(INDICEINFO) Next Info TABLE2.Update Return End Function
-----Message d'origine----- 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
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
.
.
Re-bonjour,
Ca ne marche toujours pas.
Maintenant j'ai erreur d'exécution '3078'
Le moteur de base de données Microsoft Jet ne peut pas
trouver la table ou la requête source 'From CLIENTS ORDER
BY NClient; NClient, Responsable, ......'
Et en surbrillance il y a:
Chaine = "FROM CLIENTS ORDER BY NClient; NClient,
RESPONSABLE, RESPONSABLE2, RESPONSABLE3, NATEL, fonction,
POLITESSE, POLITESSE2, POLITESSE3, FONCTION2, FONCTION3,
TELDIRECT1, TELDIRECT2, TELEDIRECT3, e-mail1, e-mail2, e-
mail3, NATEL2, NATEL3, FAX1, FAX2, FAX3, DEPARTEMENT1,
DEPARTEMENT2, DEPARTEMENT3"
Set TABLE1 = Db.OpenRecordset(Chaine)
Pourtant lorsque je compile il n'y a pas de problèmes.
Luis
-----Message d'origine-----
tu as oublie FROM Clients ORDER BY NClient; dans la
variable chaine
remplace Set TABLE2="SELECT * FROM Contacts_Clients;"
par Set TABLE2="SELECT * FROM
Contacts_Clients ORDER BY NClient;"
remplace egalement
For info=1 to 8 par For INFOCONTACT=1 to 8
et
Next Info par Next INFOCONTACT
Bonjour Ilan,
J'ai fais tel que tu me l'indiques mais j'ais une
erreur:
[e-mail3], FAX3, DEPARTEMENT3"
Set TABLE1 = Db.OpenRecordset(Chaîne)
Set TABLE2 = Db.OpenRecordset("SELECT * FROM
CONTACTS_CLIENTS;")
If Not (TABLE1.BOF Or TABLE1.EOF) Then
TABLE2
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
EcrireInfo:
For Info = 1 To 8
INDICEINFO = 8 * (CONTACT - 1) + INFOCONTACT
TABLE2.Fields.Item(INFOCONTACT + 1) =
TABLE1.Fields.Item(INDICEINFO)
Next Info
TABLE2.Update
Return
End Function
-----Message d'origine-----
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
Re-bonjour, Ca ne marche toujours pas. Maintenant j'ai erreur d'exécution '3078' Le moteur de base de données Microsoft Jet ne peut pas trouver la table ou la requête source 'From CLIENTS ORDER BY NClient; NClient, Responsable, ......'
Et en surbrillance il y a: Chaine = "FROM CLIENTS ORDER BY NClient; NClient, RESPONSABLE, RESPONSABLE2, RESPONSABLE3, NATEL, fonction, POLITESSE, POLITESSE2, POLITESSE3, FONCTION2, FONCTION3, TELDIRECT1, TELDIRECT2, TELEDIRECT3, e-mail1, e-mail2, e- mail3, NATEL2, NATEL3, FAX1, FAX2, FAX3, DEPARTEMENT1, DEPARTEMENT2, DEPARTEMENT3" Set TABLE1 = Db.OpenRecordset(Chaine) Pourtant lorsque je compile il n'y a pas de problèmes. Luis
-----Message d'origine----- tu as oublie FROM Clients ORDER BY NClient; dans la variable chaine
remplace Set TABLE2="SELECT * FROM Contacts_Clients;" par Set TABLE2="SELECT * FROM Contacts_Clients ORDER BY NClient;"
remplace egalement For info=1 to 8 par For INFOCONTACT=1 to 8 et Next Info par Next INFOCONTACT
Bonjour Ilan, J'ai fais tel que tu me l'indiques mais j'ais une erreur:
[e-mail3], FAX3, DEPARTEMENT3" Set TABLE1 = Db.OpenRecordset(Chaîne) Set TABLE2 = Db.OpenRecordset("SELECT * FROM CONTACTS_CLIENTS;") If Not (TABLE1.BOF Or TABLE1.EOF) Then TABLE2 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
EcrireInfo: For Info = 1 To 8 INDICEINFO = 8 * (CONTACT - 1) + INFOCONTACT TABLE2.Fields.Item(INFOCONTACT + 1) = TABLE1.Fields.Item(INDICEINFO) Next Info TABLE2.Update Return End Function
-----Message d'origine----- 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