Bonjour,
Je voudrais créer une routine qui combinerais plusieurs tables dans un seul fichier excel de plusieurs feuilles.
J'ai retrouvé ce code que je tente de modifier pour mes besoins.
Voici mes modifications:
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 Public Sub ExportTable() ' déclaration des variables Dim tabListe() As String ' tableau où on va stocker la liste des tables Dim xlApp As Excel.Application ' ne pas oublier de cocher la référence Excel Dim xlBook As Excel.Workbook ' le classeur où se trouve la feuille Dim xlSheet As Excel.Worksheet ' la feuille où on va stocker les tables Dim db As DAO.Database ' nous utilisons la bibilothèque DAO Dim rst As DAO.Recordset ' le recordset pour récupérer les données des tables Dim i As Integer ' pour boucler sur les tables Dim lngNbrLigne As Long Set db = CurrentDb ' on rempli le tableau avec 3 tables ReDim tabListe(4) tabListe(0) = "Table1" tabListe(1) = "Table2" tabListe(2) = "Table3" tabListe(3) = "Table4" ' on ouvre notre classeur Excel Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("C:\Users\Philippe\Desktop\Peinture.xls") Set xlSheet = xlBook.Worksheets("Feuil2") 'ici on va stocker dans la deuxième feuille du classeur Peinture ' bouclage sur les tables pour remplir la feuille For i = 0 To UBound(tabListe()) - 1 Set rst = db.OpenRecordset("SELECT * FROM " & tabListe(i) & ";") If i = 0 Then ' si c'est la première table lngNbrLigne = rst.RecordCount + 1 xlSheet.Range("A1").CopyFromRecordset rst Else xlSheet.Range("A" & lngNbrLigne).CopyFromRecordset rst lngNbrLigne = lngNbrLigne + rst.RecordCount End If Set rst = Nothing Next i ' libération des objets xlBook.Save xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing MsgBox "Fin de traitement" End Sub
J'ai 3 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 ' on rempli le tableau avec 8 tables ReDim tabListe(8) tabListe(0) = "intervention chaussée" tabListe(1) = "Béton" tabListe(2) = "ActConn" tabListe(3) = "Autres éléments" tabListe(4) = "Bretelle" tabListe(5) = "Gravier" tabListe(6) = "Parachèvement 3 ans total" tabListe(7) = "Ponceau" ' on ouvre notre classeur Excel Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add ' création des 8 feuilles du nouveau classeur Set xlSheet = xlBook.Worksheets.Add 'ici on va stocker dans la deuxième feuille du classeur Peinture xlSheet.Name = "Intervention chaussée" ' bouclage sur les tables pour remplir la feuille For i = 0 To UBound(tabListe()) - 1 Set rst = db.OpenRecordset("SELECT * FROM " & tabListe(i) & ";") If i = 0 Then ' si c'est la première table lngNbrLigne = rst.RecordCount + 1 xlSheet.Range("A1").CopyFromRecordset rst Else xlSheet.Range("A" & lngNbrLigne).CopyFromRecordset rst lngNbrLigne = lngNbrLigne + rst.RecordCount End If Set rst = Nothing
1. - Est-ce possible de faire une boucle qui utiliserait le nom des 8 tables que je viens de copier dans mon tableau afin de nommée les feuilles excel que j'ai créé( Est ce que ce tableau contient toute la table ou seulement le nom de la table)
2. - Si j'ai bien compris, la boucle copie toute les tables sur la même feuille, je voudrais que chaque table soit copié sur des feuilles distinctes
3. - Comme j'ai créé mon fichier excel je dois surement modifier la libération de l'objet xlBook.save (voir la fin du 1er bloc de code)
J'espère avoir été suffisamment clair
merci d'avance
Partager