Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA : Export requête vers Excel

8 réponses
Avatar
papou
Bonjour à tous
J'ai un petit soucis que je ne parviens pas à résoudre.
Je souhaite via VBA exporter le résultat d'une requête dans une feuille d'un
classeur Excel, pour cela j'utilise la méthode suivante (partie du code) :
Dim AppXl As Object
Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("Rq Export")
Set AppXl = CreateObject("Excel.Application")
AppXl.Visible = True
Dim ClasseurXl As Object
Dim FeuilleXl As Object
Set ClasseurXl = AppXl.workbooks.Open("réseaux entreprises vierge.xls")
Set FeuilleXl = ClasseurXl.sheets("Brut")
FeuilleXl.range("A2").copyfromrecordset rs

Mon problème se situe au niveau de la ligne 5 (Set rs =
dbs.OpenRecordset("Rq Export"), j'ai un message m'indiquant :
"Trop peu de paramètres, 2 attendu"
Je ne parviens pas à invoquer l'aide sur la méthode OpenRecordSet pour
identifier le paramètre manquant requis
(message d'erreur avec demande de réinstallation de la fonctionnalité mais
le résultat est identique)

Quelqu'un peut-il me venir en aide ?

Merci d'avance
Cordialement
Pascal

8 réponses

Avatar
Raymond [mvp]
Bonjour.

Il faut ado pour transférer tout un recordset.
tu trouveras un exemple complet sur :
http://access.seneque.free.fr/transfert_recordset.htm pour une table mais tu
changeras le paramètre ainsi que les noms d'objets.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"papou" <nspm> a écrit dans le message de
news:%
Bonjour à tous
J'ai un petit soucis que je ne parviens pas à résoudre.
Je souhaite via VBA exporter le résultat d'une requête dans une feuille
d'un

classeur Excel, pour cela j'utilise la méthode suivante (partie du code) :
Dim AppXl As Object
Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("Rq Export")
Set AppXl = CreateObject("Excel.Application")
AppXl.Visible = True
Dim ClasseurXl As Object
Dim FeuilleXl As Object
Set ClasseurXl = AppXl.workbooks.Open("réseaux entreprises
vierge.xls")

Set FeuilleXl = ClasseurXl.sheets("Brut")
FeuilleXl.range("A2").copyfromrecordset rs

Mon problème se situe au niveau de la ligne 5 (Set rs > dbs.OpenRecordset("Rq Export"), j'ai un message m'indiquant :
"Trop peu de paramètres, 2 attendu"
Je ne parviens pas à invoquer l'aide sur la méthode OpenRecordSet pour
identifier le paramètre manquant requis
(message d'erreur avec demande de réinstallation de la fonctionnalité mais
le résultat est identique)

Quelqu'un peut-il me venir en aide ?

Merci d'avance
Cordialement
Pascal




Avatar
papou
Bonjour Raymond
Je te remercie, j'avais bien vu effectivement ton exemple sur ton excellent
site (si si !) mais je me pose plusieurs questions :
J'utilise la base de données actuellement ouverte donc dois-je adapter la
ligne avec uniquement le chemin et le nom de ma base Access ?
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:bd1.mdb" &
";"
J'exécute le code pour une requête donc comment adpater la ligne :
Set Rs = conn.Execute("clients", , adCmdTable)

Merci pour ta réponse
Cordialement
Pascal

"Raymond [mvp]" a écrit dans le message de
news:usSK0$
Bonjour.

Il faut ado pour transférer tout un recordset.
tu trouveras un exemple complet sur :
http://access.seneque.free.fr/transfert_recordset.htm pour une table mais
tu

changeras le paramètre ainsi que les noms d'objets.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"papou" <nspm> a écrit dans le message de
news:%
Bonjour à tous
J'ai un petit soucis que je ne parviens pas à résoudre.
Je souhaite via VBA exporter le résultat d'une requête dans une feuille
d'un

classeur Excel, pour cela j'utilise la méthode suivante (partie du code)
:


Dim AppXl As Object
Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("Rq Export")
Set AppXl = CreateObject("Excel.Application")
AppXl.Visible = True
Dim ClasseurXl As Object
Dim FeuilleXl As Object
Set ClasseurXl = AppXl.workbooks.Open("réseaux entreprises
vierge.xls")

Set FeuilleXl = ClasseurXl.sheets("Brut")
FeuilleXl.range("A2").copyfromrecordset rs

Mon problème se situe au niveau de la ligne 5 (Set rs > > dbs.OpenRecordset("Rq Export"), j'ai un message m'indiquant :
"Trop peu de paramètres, 2 attendu"
Je ne parviens pas à invoquer l'aide sur la méthode OpenRecordSet pour
identifier le paramètre manquant requis
(message d'erreur avec demande de réinstallation de la fonctionnalité
mais


le résultat est identique)

Quelqu'un peut-il me venir en aide ?

Merci d'avance
Cordialement
Pascal








Avatar
Raymond [mvp]
Je n'ai pas relu la procédure mais je pense qu'elle est bonne.
tu peux simplifier comme ceci:

Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
Rs.Open "Rq Export", CurrentProject.Connection

Dim XL_App As Object
Set XL_App = CreateObject("Excel.Application")
Dim XL_classeur As Object
Dim XL_feuille As Object
With XL_App
Set XL_classeur = .Workbooks.Open("réseaux entreprises
vierge.xls")
Set XL_feuille = XL_classeur.Sheets("Brut")
With XL_feuille
XL_feuille.Range("A2").CopyFromRecordset Rs
End With
.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With
Rs.Close
Set XL_App = Nothing
Set XL_classeur = Nothing
Set XL_feuille = Nothing
Set Rs = Nothing

j'espère ne rien avoir oublié.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"papou" <nspm> a écrit dans le message de
news:
Bonjour Raymond
Je te remercie, j'avais bien vu effectivement ton exemple sur ton
excellent

site (si si !) mais je me pose plusieurs questions :
J'utilise la base de données actuellement ouverte donc dois-je adapter la
ligne avec uniquement le chemin et le nom de ma base Access ?
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:bd1.mdb" &
";"
J'exécute le code pour une requête donc comment adpater la ligne :
Set Rs = conn.Execute("clients", , adCmdTable)


Avatar
papou
Raymond
Merci,
J'ai un message d'erreur :
"Instruction SQL non valide DELETE, INSERT, PROCEDURE, SELECT ou UPDATE
attendus"
sur la ligne
Rs.Open "Rq Export", CurrentProject.Connection
Merci encore
Cordialement
Pascal

"Raymond [mvp]" a écrit dans le message de
news:
Je n'ai pas relu la procédure mais je pense qu'elle est bonne.
tu peux simplifier comme ceci:

Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
Rs.Open "Rq Export", CurrentProject.Connection

Dim XL_App As Object
Set XL_App = CreateObject("Excel.Application")
Dim XL_classeur As Object
Dim XL_feuille As Object
With XL_App
Set XL_classeur = .Workbooks.Open("réseaux entreprises
vierge.xls")
Set XL_feuille = XL_classeur.Sheets("Brut")
With XL_feuille
XL_feuille.Range("A2").CopyFromRecordset Rs
End With
.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With
Rs.Close
Set XL_App = Nothing
Set XL_classeur = Nothing
Set XL_feuille = Nothing
Set Rs = Nothing

j'espère ne rien avoir oublié.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"papou" <nspm> a écrit dans le message de
news:
Bonjour Raymond
Je te remercie, j'avais bien vu effectivement ton exemple sur ton
excellent

site (si si !) mais je me pose plusieurs questions :
J'utilise la base de données actuellement ouverte donc dois-je adapter
la


ligne avec uniquement le chemin et le nom de ma base Access ?
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "C:bd1.mdb"
&


";"
J'exécute le code pour une requête donc comment adpater la ligne :
Set Rs = conn.Execute("clients", , adCmdTable)






Avatar
Raymond [mvp]
Tu as vérifié ta requête , elle fonctionne seule ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"papou" <nspm> a écrit dans le message de
news:
Raymond
Merci,
J'ai un message d'erreur :
"Instruction SQL non valide DELETE, INSERT, PROCEDURE, SELECT ou UPDATE
attendus"
sur la ligne
Rs.Open "Rq Export", CurrentProject.Connection
Merci encore
Cordialement
Pascal



Avatar
papou
Raymond
La requête prend un critère (date entre le et le) à partir d'un formulaire
La procédure d'export est lancée à partir d'un bouton une fois les critères
fournis sur ce formulaire
Si j'exécute la requête en lui donnant les critères, elle fonctionne
parfaitement.
Cordialement
Pascal

"Raymond [mvp]" a écrit dans le message de
news:
Tu as vérifié ta requête , elle fonctionne seule ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"papou" <nspm> a écrit dans le message de
news:
Raymond
Merci,
J'ai un message d'erreur :
"Instruction SQL non valide DELETE, INSERT, PROCEDURE, SELECT ou UPDATE
attendus"
sur la ligne
Rs.Open "Rq Export", CurrentProject.Connection
Merci encore
Cordialement
Pascal







Avatar
Raymond [mvp]
je viens de le faire avec une requête sélection banale et ça marche:
Set Rs = New ADODB.Recordset
Rs.Open "requête5", CurrentProject.Connection
ou
Rs.Open "SELECT Table1.* FROM Table1", CurrentProject.Connection
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"papou" <nspm> a écrit dans le message de
news:%
Raymond
La requête prend un critère (date entre le et le) à partir d'un formulaire
La procédure d'export est lancée à partir d'un bouton une fois les
critères

fournis sur ce formulaire
Si j'exécute la requête en lui donnant les critères, elle fonctionne
parfaitement.
Cordialement
Pascal


Avatar
sirgio
Bonjour,
j'exporte moi aussi des donnees sous excel à partir d'access et j'ai
le meme message d'erreur "Instruction SQL non valide DELETE, INSERT,
PROCEDURE, SELECT ou UPDATE attendus"

ET JE SAIS POURQUOI !!

Dans la requete qui sort les données à transferer, j'ai une somme sur
un champs.
Du coup ma requete SQL commence par :
"TRANSFORM Sum([table].[champ]) AS [Somme De champ] "
puis j'ai le :
"SELECT ..."


je sais donc d'ou vient mon erreur mais je ne sais pas comment la
résoudre!

si quelqu'un a une idée... merci!

Serge
-----------------------------------------------------
je viens de le faire avec une requête sélection banale et ça marche:
Set Rs = New ADODB.Recordset
Rs.Open "requête5", CurrentProject.Connection
ou
Rs.Open "SELECT Table1.* FROM Table1", CurrentProject.Connection
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"papou" <nspm> a écrit dans le message de
news:%
Raymond
La requête prend un critère (date entre le et le) à partir d'un formulaire
La procédure d'export est lancée à partir d'un bouton une fois les
critères

fournis sur ce formulaire
Si j'exécute la requête en lui donnant les critères, elle fonctionne
parfaitement.
Cordialement
Pascal