Bonjour,
J'ai essayé (étant novice, j'insiste bien sur le terme "essayé") de développer une méthode permettant d'exporter le résultat d'une requête (stockée dans Access) vers un fichier Excel.
Mon problème est le suivant : l'export fonctionne la première fois (à la perfection), cependant, lors du second export, les noms des champs du recordset ne s'affichent plus, seules les contenus s'affichent; ou pour être plus précis, on distingue 2 cas:
1 - On laisse ouvert le premier excel généré avant de réitérer la méthode : les noms des champs s'affichent dans un nouveau classeur différent de celui des données.
2 - On ferme le premier excel généré avant de réitérer la méthode : l'excel généré est vide et vba renvoie une erreur d’exécution '91'.
L'erreur semble venir de la boucle qui insère le nom des champs :
à noter VG_rst = Variable globale stockant mon recordset
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 Public Sub readRstInExcelSheet(sheetName As String) Dim appExcel As Excel.Application Dim wbExcel As Excel.Workbook Dim wsExcel As Excel.Worksheet Dim i As Integer Dim fieldName As String 'Si le recordset est vide, on gère l'erreur et on ne crée pas de tableau If VG_rst.EOF = True Then MsgBox "Il n'y a pas d'enregistrement à lire. Désolé...", vbOKOnly, "Erreur" Else 'On crée un classeur, une feuille Excel, puis on sélectionne la première feuille Set appExcel = CreateObject("Excel.Application") appExcel.Visible = True Set wbExcel = appExcel.Workbooks.Add Set wsExcel = wbExcel.Worksheets(1) 'On nomme la feuille concernée wsExcel.Name = sheetName 'On se déplace au premier enregistrement du recordset VG_rst.MoveFirst 'On sélectionne la première cellule de la feuille wsExcel.Range("A1").Select 'On nomme les différentes colonnes For i = 0 To VG_rst.Fields.Count - 1 fieldName = VG_rst.Fields(i).Name ActiveCell.Value = fieldName ActiveCell.Offset(0, 1).Select Next i 'On copie le recordset wsExcel.Range("A2").Select wsExcel.Range("A2").CopyFromRecordset VG_rst 'Libération des références Set VG_rst = Nothing Set wbExcel = Nothing Set appExcel = Nothing Set wsExcel = Nothing End If End Sub
Merci d'avance pour votre aide.
Partager