Bonjour à tous,
Je voudrais pouvoir exporter le contenu de 3 requêtes Access dans un fichier
Excel, dont chaque requête serais une feuille différente.
Si j'enchaine 3 fois l'instruction ci dessous cela écrase le fichier excel
par le contenu de la nouvelle requête.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour,
Un exemple de code (non testé) que tu copies dans un module de ta base de données Access. Tu devras adapter un peu comme le vrai nom des requêtes...selon les besoins de ton application.
Tu dois ajouter la référence suivante à Access si elle n'est pas déjà présente "Microsoft Activex Data objects 2.8 Library"
'------------------------------------- Sub VersExcel()
'Déclaration des variables Dim Cn As New ADODB.Connection Dim Rst As New ADODB.Recordset Dim StockedSub As New ADODB.Command Dim Arr(), Elt As Variant, Sh As Object Dim Xl As Object, Wk As Object, A As Integer
'Le nom des 3 requêtes : 'Les requêtes doivent exister déjà Arr = Array("Requête1", "Requête2", "Requête3")
'Crée une instance de l'application Excel Set Xl = CreateObject("Excel.Application") Xl.Visible = True 'ce n'est pas obligatoire..."
'Ajoute un nouveau classeur avec seulement une feuille Set Wk = Workbooks.Add(-4167)
'Ouverture de la connexion à la base de donnée Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Application.CurrentDb
'une boucle sur tous les requêtes For Each Elt In Arr StockedSub.ActiveConnection = cnt StockedSub.CommandText = Elt Set Rst = StockedSub.Execute A = A + 1 With Wk If A > 1 Then Set Sh = .Worksheets.Add Else Sh = .Worksheets(A) End If With Sh 'Copie du recordset vers Excel .Range("A1").CopyFromRecordset Rst End With End With Next 'Ferme le recordSet Rst.Close 'Ferme la connexion Cn.Close 'Enregistrer le classeur Wk.SaveAs "c:MonNouveauClasseur.xls" 'Ferme le fichier excel Wk.Close False 'Ferme l'application Excel Xl.Quit
'Libère la mémoire des objets créés Set Rst = Nothing: Set Cn = Nothing Set Sh = Nothing: Set Wk = Nothing: Set Xl = Nothing End Sub '-------------------------------------
"Jorge" a écrit dans le message de groupe de discussion : 4ccfc46b$0$32441$ Bonjour à tous, Je voudrais pouvoir exporter le contenu de 3 requêtes Access dans un fichier Excel, dont chaque requête serais une feuille différente. Si j'enchaine 3 fois l'instruction ci dessous cela écrase le fichier excel par le contenu de la nouvelle requête.
Quelle code faut-il utiliser pour obtenir 3 feuilles dans le même fichier Excel, si cela est possible bien sur. Merci d'avance pour vos sugestions !!!
Bonjour,
Un exemple de code (non testé) que tu copies dans un module
de ta base de données Access. Tu devras adapter un peu comme
le vrai nom des requêtes...selon les besoins de ton application.
Tu dois ajouter la référence suivante à Access si elle n'est pas déjà présente
"Microsoft Activex Data objects 2.8 Library"
'-------------------------------------
Sub VersExcel()
'Déclaration des variables
Dim Cn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim StockedSub As New ADODB.Command
Dim Arr(), Elt As Variant, Sh As Object
Dim Xl As Object, Wk As Object, A As Integer
'Le nom des 3 requêtes :
'Les requêtes doivent exister déjà
Arr = Array("Requête1", "Requête2", "Requête3")
'Crée une instance de l'application Excel
Set Xl = CreateObject("Excel.Application")
Xl.Visible = True 'ce n'est pas obligatoire..."
'Ajoute un nouveau classeur avec seulement une feuille
Set Wk = Workbooks.Add(-4167)
'Ouverture de la connexion à la base de donnée
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Application.CurrentDb
'une boucle sur tous les requêtes
For Each Elt In Arr
StockedSub.ActiveConnection = cnt
StockedSub.CommandText = Elt
Set Rst = StockedSub.Execute
A = A + 1
With Wk
If A > 1 Then
Set Sh = .Worksheets.Add
Else
Sh = .Worksheets(A)
End If
With Sh
'Copie du recordset vers Excel
.Range("A1").CopyFromRecordset Rst
End With
End With
Next
'Ferme le recordSet
Rst.Close
'Ferme la connexion
Cn.Close
'Enregistrer le classeur
Wk.SaveAs "c:MonNouveauClasseur.xls"
'Ferme le fichier excel
Wk.Close False
'Ferme l'application Excel
Xl.Quit
'Libère la mémoire des objets créés
Set Rst = Nothing: Set Cn = Nothing
Set Sh = Nothing: Set Wk = Nothing: Set Xl = Nothing
End Sub
'-------------------------------------
"Jorge" <sdfezerzer@jhkjhkjh.fr> a écrit dans le message de groupe de discussion :
4ccfc46b$0$32441$ba4acef3@reader.news.orange.fr...
Bonjour à tous,
Je voudrais pouvoir exporter le contenu de 3 requêtes Access dans un fichier
Excel, dont chaque requête serais une feuille différente.
Si j'enchaine 3 fois l'instruction ci dessous cela écrase le fichier excel
par le contenu de la nouvelle requête.
Un exemple de code (non testé) que tu copies dans un module de ta base de données Access. Tu devras adapter un peu comme le vrai nom des requêtes...selon les besoins de ton application.
Tu dois ajouter la référence suivante à Access si elle n'est pas déjà présente "Microsoft Activex Data objects 2.8 Library"
'------------------------------------- Sub VersExcel()
'Déclaration des variables Dim Cn As New ADODB.Connection Dim Rst As New ADODB.Recordset Dim StockedSub As New ADODB.Command Dim Arr(), Elt As Variant, Sh As Object Dim Xl As Object, Wk As Object, A As Integer
'Le nom des 3 requêtes : 'Les requêtes doivent exister déjà Arr = Array("Requête1", "Requête2", "Requête3")
'Crée une instance de l'application Excel Set Xl = CreateObject("Excel.Application") Xl.Visible = True 'ce n'est pas obligatoire..."
'Ajoute un nouveau classeur avec seulement une feuille Set Wk = Workbooks.Add(-4167)
'Ouverture de la connexion à la base de donnée Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Application.CurrentDb
'une boucle sur tous les requêtes For Each Elt In Arr StockedSub.ActiveConnection = cnt StockedSub.CommandText = Elt Set Rst = StockedSub.Execute A = A + 1 With Wk If A > 1 Then Set Sh = .Worksheets.Add Else Sh = .Worksheets(A) End If With Sh 'Copie du recordset vers Excel .Range("A1").CopyFromRecordset Rst End With End With Next 'Ferme le recordSet Rst.Close 'Ferme la connexion Cn.Close 'Enregistrer le classeur Wk.SaveAs "c:MonNouveauClasseur.xls" 'Ferme le fichier excel Wk.Close False 'Ferme l'application Excel Xl.Quit
'Libère la mémoire des objets créés Set Rst = Nothing: Set Cn = Nothing Set Sh = Nothing: Set Wk = Nothing: Set Xl = Nothing End Sub '-------------------------------------
"Jorge" a écrit dans le message de groupe de discussion : 4ccfc46b$0$32441$ Bonjour à tous, Je voudrais pouvoir exporter le contenu de 3 requêtes Access dans un fichier Excel, dont chaque requête serais une feuille différente. Si j'enchaine 3 fois l'instruction ci dessous cela écrase le fichier excel par le contenu de la nouvelle requête.