Bonjour à tous,
Je sollicite votre aide svp.
J'ai deux tables qui se compense ainsi :
BORDEREAU : NumeroBordereau, NumeroConstructeur, Indice, Concatener
TMP3 : NumeroBordereau, NumeroConstructeur, Indice, FE
Je souhaite balayer la table TMP3 et récupérer tous les FE pour la même clé NumeroBordereau, NumeroConstructeur, Indice de la table BORDEREAU et les concatener dans le champ BORDEREAU.Concatener.
un exemple pour illustré cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10Dans la table BORDEREAU : NumeroBordereau | NumeroConstructeur | Indice | Concatener ------------------------------------------------------------------ BORD001 | CONS001 | B | ------------------------------------------------------------------ BORD002 | CONS002 | 1 | ------------------------------------------------------------------ BORD008 | CONS112 | F | ------------------------------------------------------------------
Toutes les clés NumeroBordereau, NumeroConstructeur, Indice de la table BORDEREAU se retrouvent dans la table TMP3 et je dois récupérer pour chaque clé le concaténer de toutes les FE de la table TMP3 et l'insérer dans le champ "Concatener" de la table BORDEREAU
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Dans la table TMP3 : NumeroBordereau | NumeroConstructeur | Indice | FE ------------------------------------------------------------------ BORD001 | CONS001 | B | LET145 ------------------------------------------------------------------ BORD001 | CONS001 | B | EBOM9 ------------------------------------------------------------------ BORD002 | CONS002 | 1 | EBOM12 ------------------------------------------------------------------ BORD002 | CONS002 | 1 | LET114 ------------------------------------------------------------------ BORD008 | CONS112 | F | ------------------------------------------------------------------ BORD008 | CONS112 | F | LET108 ------------------------------------------------------------------ BORD008 | CONS004 | F | EBOM009 ------------------------------------------------------------------
Donc le résultat serai :
Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9NumeroBordereau | NumeroConstructeur | Indice | Concatener ------------------------------------------------------------------ BORD001 | CONS001 | B | LET145#EBOM9 ------------------------------------------------------------------ BORD002 | CONS002 | 1 | EBOM12#LET114 ------------------------------------------------------------------ BORD008 | CONS112 | F |LET108#EBOM009 ------------------------------------------------------------------
Avec ce code je parcours bien la table TMP3 et les bordereau de la table TMP3 qui se trouve également dans la table BORDEREAU.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Private Sub Commande0_Click() Dim db As DAO.Database, rst As DAO.Recordset, Concatener As String, result As String Dim sSQL As String Dim TMP3 As string 'résultat requête qui récupère tous les enregistrements de la table TMP3 avec jointure de la table BORDEREAU Set db = CurrentDb TMP3 = "SELECT TMP3.Bordereau, TMP3.Numero_Constructeur, TMP3.Indice_Constructeur, TMP3.Fiche_Evolution FROM TMP3, BORDEREAU WHERE TMP3.Indice_Constructeur = BORDEREAU.Indice_Constructeur AND TMP3.Numero_Constructeur = BORDEREAU.Numero_Constructeur AND TMP3.Bordereau = BORDEREAU.Bordereau AND TMP3.Fiche_Evolution <> """"" ' Ouverture du recordset Set rst = db.OpenRecordset(TMP3, dbOpenForwardOnly, dbReadOnly) ' on parcourt la table Do Until rst.EOF result = rst!Fiche_Evolution 'Champ Fiche_Evolution correspond au champ FE de la table TMP3 tmp = tmp2 & "#" & result & "" ' je place le champ FE dans la variable tmp MsgBox tmp 'j'affiche tmp pour info tmp2 = tmp ' Je créé ma requête de mise à jour sSQL = "UPDATE BORDEREAU INNER JOIN TMP3 ON BORDEREAU.Indice_Constructeur = TMP3.Indice_Constructeur AND BORDEREAU.Numero_Constructeur = TMP3.Numero_Constructeur AND BORDEREAU.Bordereau = TMP3.Bordereau SET BORDEREAU.Concatener = """ & tmp2 & """ & """ & tmp & """ " DoCmd.RunSQL (sSQL) ' je l'execute rst.MoveNext Loop ' Fermeture du Recordset rst.Close END sub
Ma requête de mise à jour fonctionne.
Le problème est qu'il me concatène tous les champ TMP3.FE et qu'il me les insère dans les champs BORDEREAU.Concatener il n'arrive pas à faire la distinction entre les TMP3.FE de tel NumeroBordereau et de les récupèrer et me les mettre dans le champ BORDEREAU.Concatener du NumeroBordereau correspondant.
j'ai donc cela :
J'obtiens le concaténer total de tous les FE.TMP3 de Tous les Bordereaux et inséré dans dans tous les champs Concatener.BORDEREAU ce qui n'est pas correct.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9NumeroBordereau| NumeroConstructeur| Indice|Concatener ------------------------------------------------------------------ BORD001 | CONS001 | B | LET145#EBOM9EBOM12#LET114 ------------------------------------------------------------------ BORD002 | CONS002 | 1 | LET145#EBOM9EBOM12#LET114 ------------------------------------------------------------------ BORD008 | CONS112 | F |LET145#EBOM9EBOM12#LET114 ------------------------------------------------------------------
Désolé pour l'explication assez longue et j'espère avoir été claire.
Pour mon code j'ai fait de mon mieux je ne suis pas un expert du VBA.
Merci pour votre aide.
Partager