Bonjour,

je voulais savoir si il était possible d'exporter le résultat de plusieurs requêtes simultanément dans un même fichier de sortie Excel sur plusieurs feuilles (idéalement une par requete).
j'ai trouvé ce code que j'ai adapté sur le forum:
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
Private Sub btn_export_Click()
Call ExportVersXls
End Sub
 
    Sub ExportVersXls()
    ' pour éviter les problèmes de référence, en utilise le Late Binding (liaison tardive en français):
    Dim oApp As Object
    Dim oWbk As Object
    Dim oWSht As Object
 
    Dim oRst As Recordset
    Dim Qdf As DAO.QueryDef
    Dim oDb As Database
    Dim i As Long
 
    'Définition des applications excel et access
        Set oDb = CurrentDb()
        Set oApp = CreateObject("excel.application")
 
        oApp.Visible = True  ' pour contrôler le bon fonctionnement, on rend visible l'instance Excel,
                             ' l'instruction peut être enlevée après la phase de tests
        Set oWbk = oApp.Workbooks.Open("\\srv01326\EpargneCommun\Epargne-Retraite\Rentes\9_APPELS_DE_FONDS_AXA\RESULTATS\Export.xlsx")   ' modifier le chemin du fichier si besoin
        Set oWSht1 = oWbk.Worksheets("R_Annuités_Rentes")
        Set oWSht3 = oWbk.Worksheets("R_CNRCC")
        Set oWSht4 = oWbk.Worksheets("R_Coherence_Sexes")
        Set oWSht5 = oWbk.Worksheets("R_Date_Emission")
        Set oWSht6 = oWbk.Worksheets("R_Deces")
        Set oWSht7 = oWbk.Worksheets("R_Echéances_Fractionement")
        Set oWSht8 = oWbk.Worksheets("R_Fractionnement_Rente")
        Set oWSht9 = oWbk.Worksheets("R_Infos_Credirentier")
        Set oWSht11 = oWbk.Worksheets("R_Rentes_Paliers")
        Set oWSht12 = oWbk.Worksheets("R_Rentes_Terminee")
        Set oWSht13 = oWbk.Worksheets("R_Taux_Reversion")
        Set oWSht14 = oWbk.Worksheets("R_Taux_Technique")
        Set oWSht2 = oWbk.Worksheets("R_Capital_Constitutif")
        Set oWSht10 = oWbk.Worksheets("R_Rapprochement_annuelle")
        Set oWSht15 = oWbk.Worksheets("R_Types_Rentes")
 
    ' définition du jeu de données avec une requête enregistrée
        Set Qdf1 = oDb.QueryDefs("R_Annuités_Rentes")
        Set Qdf3 = oDb.QueryDefs("R_CNRCC")
        Set Qdf4 = oDb.QueryDefs("R_Coherence_Sexes")
        Set Qdf5 = oDb.QueryDefs("R_Date_Emission")
        Set Qdf6 = oDb.QueryDefs("R_Deces")
        Set Qdf7 = oDb.QueryDefs("R_Echéances_Fractionement")
        Set Qdf8 = oDb.QueryDefs("R_Fractionnement_Rente")
        Set Qdf9 = oDb.QueryDefs("R_Infos_Credirentier")
        Set Qdf11 = oDb.QueryDefs("R_Rentes_Paliers")
        Set Qdf12 = oDb.QueryDefs("R_Rentes_Terminee")
        Set Qdf13 = oDb.QueryDefs("R_Taux_Reversion")
        Set Qdf14 = oDb.QueryDefs("R_Taux_Technique")
        Set Qdf2 = oDb.QueryDefs("R_Capital_Constitutif")
        Set Qdf10 = oDb.QueryDefs("R_Rapprochement_annuelle")
        Set Qdf15 = oDb.QueryDefs("R_Types_Rentes")
 
 
        Set oRst1 = Qdf1.OpenRecordset
        Set oRst2 = Qdf2.OpenRecordset
        Set oRst3 = Qdf3.OpenRecordset
        Set oRst4 = Qdf4.OpenRecordset
        Set oRst5 = Qdf5.OpenRecordset
        Set oRst6 = Qdf6.OpenRecordset
        Set oRst7 = Qdf7.OpenRecordset
        Set oRst8 = Qdf8.OpenRecordset
        Set oRst9 = Qdf9.OpenRecordset
        Set oRst10 = Qdf10.OpenRecordset
        Set oRst11 = Qdf11.OpenRecordset
        Set oRst12 = Qdf12.OpenRecordset
        Set oRst13 = Qdf13.OpenRecordset
        Set oRst14 = Qdf14.OpenRecordset
        Set oRst15 = Qdf15.OpenRecordset
 
    ' suppression des anciennes données de la feuille
        oWSht1.Activate
        oWSht1.Cells.Select
        oWSht2.Activate
        oWSht2.Cells.Select
        oWSht3.Activate
        oWSht3.Cells.Select
        oWSht4.Activate
        oWSht4.Cells.Select
        oWSht5.Activate
        oWSht5.Cells.Select
        oWSht6.Activate
        oWSht6.Cells.Select
        oWSht7.Activate
        oWSht7.Cells.Select
        oWSht8.Activate
        oWSht8.Cells.Select
        oWSht9.Activate
        oWSht9.Cells.Select
        oWSht10.Activate
        oWSht10.Cells.Select
        oWSht11.Activate
        oWSht11.Cells.Select
        oWSht12.Activate
        oWSht12.Cells.Select
        oWSht13.Activate
        oWSht13.Cells.Select
        oWSht14.Activate
        oWSht14.Cells.Select
        oWSht15.Activate
        oWSht15.Cells.Select
        oApp.Selection.Delete
 
    ' entête de colonnes sur la 1ère ligne
        For i = 0 To oRst1.Fields.Count - 1
            oWSht1.Range("A1").Offset(0, i) = oRst1(i).Name
        Next i
 
        For i = 0 To oRst2.Fields.Count - 1
            oWSht2.Range("A1").Offset(0, i) = oRst2(i).Name
        Next i
 
        For i = 0 To oRst3.Fields.Count - 1
            oWSht3.Range("A1").Offset(0, i) = oRst3(i).Name
        Next i
 
        For i = 0 To oRst4.Fields.Count - 1
            oWSht4.Range("A1").Offset(0, i) = oRst4(i).Name
        Next i
 
        For i = 0 To oRst5.Fields.Count - 1
            oWSht5.Range("A1").Offset(0, i) = oRst5(i).Name
        Next i
 
        For i = 0 To oRst6.Fields.Count - 1
            oWSht6.Range("A1").Offset(0, i) = oRst6(i).Name
        Next i
 
        For i = 0 To oRst7.Fields.Count - 1
            oWSht7.Range("A1").Offset(0, i) = oRst7(i).Name
        Next i
 
        For i = 0 To oRst8.Fields.Count - 1
            oWSht8.Range("A1").Offset(0, i) = oRst8(i).Name
        Next i
 
        For i = 0 To oRst9.Fields.Count - 1
            oWSht9.Range("A1").Offset(0, i) = oRst9(i).Name
        Next i
 
        For i = 0 To oRst10.Fields.Count - 1
            oWSht10.Range("A1").Offset(0, i) = oRst10(i).Name
        Next i
 
        For i = 0 To oRst11.Fields.Count - 1
            oWSht11.Range("A1").Offset(0, i) = oRst11(i).Name
        Next i
 
        For i = 0 To oRst12.Fields.Count - 1
            oWSht12.Range("A1").Offset(0, i) = oRst12(i).Name
        Next i
 
        For i = 0 To oRst13.Fields.Count - 1
            oWSht13.Range("A1").Offset(0, i) = oRst13(i).Name
        Next i
 
        For i = 0 To oRst14.Fields.Count - 1
            oWSht14.Range("A1").Offset(0, i) = oRst14(i).Name
        Next i
 
        For i = 0 To oRst15.Fields.Count - 1
            oWSht15.Range("A1").Offset(0, i) = oRst15(i).Name
        Next i
    ' copie des données à partir de la 2ème ligne
        oWSht1.Range("A2").CopyFromRecordset oRst1
        oWSht2.Range("A2").CopyFromRecordset oRst2
        oWSht3.Range("A2").CopyFromRecordset oRst3
        oWSht4.Range("A2").CopyFromRecordset oRst4
        oWSht5.Range("A2").CopyFromRecordset oRst5
        oWSht6.Range("A2").CopyFromRecordset oRst6
        oWSht7.Range("A2").CopyFromRecordset oRst7
        oWSht8.Range("A2").CopyFromRecordset oRst8
        oWSht9.Range("A2").CopyFromRecordset oRst9
        oWSht10.Range("A2").CopyFromRecordset oRst10
        oWSht11.Range("A2").CopyFromRecordset oRst11
        oWSht12.Range("A2").CopyFromRecordset oRst12
        oWSht13.Range("A2").CopyFromRecordset oRst13
        oWSht14.Range("A2").CopyFromRecordset oRst14
        oWSht15.Range("A2").CopyFromRecordset oRst15
    ' fermeture des instances ouvertes
    oRst1.Close
    oRst2.Close
    oRst3.Close
    oRst4.Close
    oRst5.Close
    oRst6.Close
    oRst7.Close
    oRst8.Close
    oRst9.Close
    oRst10.Close
    oRst11.Close
    oRst12.Close
    oRst13.Close
    oRst14.Close
    oRst15.Close
    oWbk.Close True    ' sauvegarde du classeur
    Set oRst1 = Nothing
    Set oRst2 = Nothing
    Set oRst3 = Nothing
    Set oRst4 = Nothing
    Set oRst5 = Nothing
    Set oRst6 = Nothing
    Set oRst7 = Nothing
    Set oRst8 = Nothing
    Set oRst9 = Nothing
    Set oRst10 = Nothing
    Set oRst11 = Nothing
    Set oRst12 = Nothing
    Set oRst13 = Nothing
    Set oRst14 = Nothing
    Set oRst15 = Nothing
    Set oDb = Nothing
    Set oWSht1 = Nothing
    Set oWSht2 = Nothing
    Set oWSht3 = Nothing
    Set oWSht4 = Nothing
    Set oWSht5 = Nothing
    Set oWSht6 = Nothing
    Set oWSht7 = Nothing
    Set oWSht8 = Nothing
    Set oWSht9 = Nothing
    Set oWSht10 = Nothing
    Set oWSht11 = Nothing
    Set oWSht12 = Nothing
    Set oWSht13 = Nothing
    Set oWSht14 = Nothing
    Set oWSht15 = Nothing
    Set oWbk = Nothing
    Set oApp = Nothing
 
    End Sub
Mais d'une part je ne trouve pas ca très esthétique comme manière de coder, et de plus j'obtiens une erreur d'indice des les premières lignes.
Auriez-vous une idée d'une solution plus adapter ?

Cordialement