Bonjour,
Je réalise un bout de code qui boucle les champs de plusieurs tables pour calculer des requêtes croisées sur chaque champs.
Le but est d'assembler toutes ces requêtes en une seule table.
J'ai Deux tables : Groupe et Individus. Un groupe est composé de plusieurs individus.
Le champs de ligne est groupe. Chaque requête croisée compte le nombre d'individus possédant le critère X pour chaque groupe (tableau de contingence).
Voila avec ce code je crée une table avec tous les champs présent dans mes requêtes croisées, mais je n'ai ajouté aucune valeur.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 Option Compare Database Public Sub CreationTableSynthese() '---------------------Variables objets 'Base de données Dim db As Database 'Table à analyser(GROUPE ET INDIVIDUS) Dim tb As TableDef 'Champs des tables à analyser(GROUPE ET INDIVIDUS) Dim fld As Field 'Nouvelle table (TableSynthèse) Dim Ntb As TableDef 'Champs de la table qui va être créée Dim Nfld As Field 'RecordSet qui stock la requête SQL Dim rst As Recordset 'Recordset qui stock la nouvelle table Dim Nrst As Recordset '---------------------Variables diverses 'Nom de la nouvelle table Dim NomNouvelleTable As String 'Variable SQL Dim MonSql As String 'Variables Tables à croiser Dim TablesACroiser() As String 'Variable pour stocker les champs de la requête SQL Dim fldSQL As Field '---------------------Affectation de la Base de données 'Affectation de la BD Set db = CurrentDb '---------------------Création de la table 'Nom de la nouvelle table NomNouvelleTable = "TableSynthese" 'Test qui vérifie l'existence de la table qui va être créée If ExistTable(NomNouvelleTable) = True Then DoCmd.Close acTable, NomNouvelleTable db.TableDefs.Delete NomNouvelleTable End If 'Création de la nouvelle table Set Ntb = db.CreateTableDef(NomNouvelleTable) '---------------------Définition des tables à analyser 'Appel de la fonction qui définie les tables TablesACroiser = TablesPourTCD '--------------------- Dim j As Integer 'Boucle sur les Tables dont on va faire une requête croisée sur chaque champs For j = 0 To UBound(TablesACroiser) Set tb = db.TableDefs(TablesACroiser(j)) 'Boucle sur chaque champs de la table For Each fld In tb.Fields 'Appel de la fonction qui initialise le code SQL selon le type de champ MonSql = EditSQL(tb, fld) 'Affectation du RecordSet contenant le code SQL Set rst = db.OpenRecordset(MonSql, dbOpenDynaset) 'Boucle sur chaque champs de la requête croisée For Each fldSQL In rst.Fields Set Nfld = Ntb.CreateField With Nfld 'On rajoute j pour éviter la redondance des champs entre les différentes tables .Name = fld.Name & "_" & fldSQL.Name & " " & j .Type = fld.Type End With 'Ajout du nouveau champ dans la table Debug.Print Nfld.Name Ntb.Fields.Append Nfld Ntb.Fields.Refresh Next fldSQL Next fld Next j 'On ajoute la nouvelle table à la BD db.TableDefs.Append Ntb rst.Close Application.RefreshDatabaseWindow End Sub
Je n'arrive pas à trouver le solution.
J'ai un autre module qui Ajoute le nombre de Recordset nécessaire (je calcul le nombre de groupe et j'ajoute autant de recordset) et un dernier module qui doit ajouter les valeurs en reprenant chaque requêtes une par une.
C'est un peu tiré par les cheveux, aussi si quelqu'un voit une autre méthode pour ajouter les valeurs de chaque requête. Il est clair que je manque de méthode.
Merci.
Olivier.
Partager