Bonjour à tous,
J'ai besoin de regrouper 2 tables en une nouvelle.
(Non, ce n'est pas une requête union que je veux faire)
J'ai une table avec des écritures comptables et j'ai une tables avec des écritures analytiques.
Pour une écriture comptable je peux avoir 0 écriture ana, ou n écritures ana.
J'ai fait un module sous VBA où je lis la première table et j'écris l'enregistrement dans la nouvelle table, puis je lis la seconde table en faisant des findfirst et findnext et j'écris dans la nouvelle talbe si je trouve des enregistrements.
Ca fonctionne bien mais c'est très très très long. En 8 heures, je n'ai généré que 50 000 lignes environs.
J'ai 300 000 lignes dans la premières tables et 200 000 lignes dans la seconde.
Voici mon code :
Questions :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 Sub Gen_Ecritures_old() Dim JCPTBASE As Recordset Dim JCPTBASA As Recordset Dim JEcritures As Recordset Set JCPTBASE = CurrentDb.OpenRecordset("Compta_Base1") Set JCPTBASA = CurrentDb.OpenRecordset("Compta_Ana1") Set JEcritures = CurrentDb.OpenRecordset("Ecritures") 'Remplissage de la table CPTBASE Do While Not JCPTBASE.EOF 'Ecriture des lignes de base JEcritures.AddNew JEcritures!CE1 = JCPTBASE!CE1 JEcritures!DOS = JCPTBASE!DOS JEcritures!CE2 = JCPTBASE!CE2 JEcritures!ETB = JCPTBASE!ETB JEcritures!CPT = JCPTBASE!CPT JEcritures!ECRDT = JCPTBASE!ECRDT JEcritures!Lib = JCPTBASE!Lib JEcritures!JNL = JCPTBASE!JNL JEcritures!ECRNO = JCPTBASE!ECRNO JEcritures!ECRLG = JCPTBASE!ECRLG JEcritures!AXE1 = JCPTBASE!AXE1 JEcritures!AXE2 = JCPTBASE!AXE2 JEcritures!AXE3 = JCPTBASE!AXE3 JEcritures!AXE4 = JCPTBASE!AXE4 JEcritures!CP = JCPTBASE!CP JEcritures!REG = JCPTBASE!REG JEcritures!LETT = JCPTBASE!LETT JEcritures!POINT = JCPTBASE!POINT JEcritures!LOT = JCPTBASE!LOT JEcritures!PIECE = JCPTBASE!PIECE JEcritures!ECHDT = JCPTBASE!ECHDT JEcritures!CHQNO = JCPTBASE!CHQNO JEcritures!DEV = JCPTBASE!DEV JEcritures!REGTYP = JCPTBASE!REGTYP JEcritures!PINOTIERS = JCPTBASE!PINOTIERS JEcritures!MT = JCPTBASE!MT JEcritures!MTDEV = JCPTBASE!MTDEV JEcritures!MTBIS = JCPTBASE!MTBIS JEcritures!SENS = JCPTBASE!SENS JEcritures!LETTDT = JCPTBASE!LETTDT JEcritures!POINTDT = JCPTBASE!POINTDT JEcritures!DEVP = JCPTBASE!DEVP JEcritures!ECRVALNO = JCPTBASE!ECRVALNO JEcritures!CPTCOL = JCPTBASE!CPTCOL JEcritures!NATPAI = JCPTBASE!NATPAI JEcritures.Update 'Recherche des écritures analytiques JCPTBASA.MoveFirst JCPTBASA.FindFirst "[ECRNO] = " & JCPTBASE!ECRNO & " and [ECRLG] = " & JCPTBASE!ECRLG Do While Not JCPTBASA.NoMatch 'Ecriture des lignes analytiques JEcritures.AddNew JEcritures!CE1 = JCPTBASA!CE1 JEcritures!DOS = JCPTBASA!DOS JEcritures!CE2 = JCPTBASA!ETB JEcritures!ETB = JCPTBASA!ECRNO JEcritures!CPT = JCPTBASA!ECRLG JEcritures!ECRDT = JCPTBASA!MASKLG JEcritures!Lib = JCPTBASA!AXE1 JEcritures!JNL = JCPTBASA!AXE2 JEcritures!ECRNO = JCPTBASA!AXE3 JEcritures!ECRLG = JCPTBASA!AXE4 JEcritures!AXE2 = JCPTBASA!JNL JEcritures!CP = JCPTBASA!DEV JEcritures!REG = JCPTBASA!MT JEcritures!LETT = JCPTBASA!SENS JEcritures.Update JCPTBASA.FindNext "[ECRNO] = " & JCPTBASE!ECRNO & " and [ECRLG] = " & JCPTBASE!ECRLG Loop JCPTBASE.MoveNext Loop End Sub
- Est ce que l'utilisation de VBA est la bonne solution ?
- Si oui, il y a t'il moyen d'optimiser ?
Merci d'avance pour votre aide
Partager