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

requete commence par TRANSFORM ....Erreur: Instruction SQL non valide DELETE, INSERT, PROCEDURE, SELECT ou UPDATE attendus

9 réponses
Avatar
sirgio
Bonjour,
j'exporte des donnees sous excel à partir d'access et j'ai le 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 ..."

alors qu'Access voudrait qu'elle commence directement par
"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

9 réponses

Avatar
Gilbert
Bonjour,
Il est normal pour une requête analyse croisée de commencer par
l'instruction TRANSFORM.
Le message d'erreur doit provenir d'autre chose dans ta requête.
Publie ici ta requête complète pour voir.

Cordialement
Gilbert

"Serge" a écrit dans le message de
news:
Bonjour,
j'exporte des donnees sous excel à partir d'access et j'ai le 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 ..."

alors qu'Access voudrait qu'elle commence directement par
"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


Avatar
sirgio
Bonjour, merci pour ta reponse!
je pense que cela vient de la requete qui commence par "transform" car
avec une autre requete, tout se passe bien !
Tu trouveras ci dessous le code qui appelle la requete puis la requete
elle meme!

Le code (de débutant, donc surement pleins de trucs qui te sembleront
bizarres!)



'On declare les variables

nom_categorie = Forms!export_excel!Categorie
nom_fichier_voulu = Forms!export_excel!fichier
nom_fichier = "c:excelfichiers" & nom_fichier_voulu &
".xls"

'On copie le fichier modele et on le nomme nom_fichier_voulu dans le
repertoire c:excelfichiers
FileCopy "c:excelsourceAAAA MM mois ENSEIGNE REGIONS.xls",
_
"c:excelfichiers" & nom_fichier_voulu & ".xls"

'On lance Excel en tache de fond
Dim XL_App As Object
Set XL_App = CreateObject("Excel.Application")

'On definit la variable classeur puis la variable feuille
Dim XL_classeur As Object
Dim XL_feuille As Object

'On ouvre le classeur (le fichier)
Set XL_classeur = XL_App.Workbooks.Open(nom_fichier)

'On declare un nouveau recordset
Dim Rs_menu As ADODB.Recordset
Set Rs_menu = New ADODB.Recordset
Rs_menu.Open " ma_requete_a_moi", CurrentProject.Connection

'On ouvre la feuille menu
With XL_App
Set XL_feuille = XL_classeur.Sheets("MENU")
With XL_feuille
.Range("A1").CopyFromRecordset Rs_menu
End With
End With

'On ferme Le recordset
Rs_menu.Close

'On sauvegarde le fichier, on le ferme et on quitte Excel
With XL_App
.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With

'On libere les variables
Set XL_App = Nothing
Set XL_classeur = Nothing
Set XL_feuille = Nothing
Set Rs = Nothing

End Sub






'*********************************************************

Requete "ma_requete_a_moi" :

TRANSFORM Sum([Table1].[Prixnet Euro]) AS [SommeDePrixnet Euro]
SELECT [TABLE2].CATEGORIE
FROM Table1 INNER JOIN [TABLE2] ON [Table1].CLIENT = [TABLE2].CLIENT
WHERE ((([Table1].AN)="2002" Or ([Table1].AN)="2003") AND
(([Table1].MOIS) Between "01" And "09") AND
(([TABLE2].CATEGORIE)="entreprise") AND (([Table1].ARTICLE)<>"code"))
GROUP BY [TABLE2].CATEGORIE
PIVOT [Table1].AN;



Merci beaucoup beaucoup de t'ennuyer pour moi... ca fait 4 jours que
je bloque la dessus et je crois que je commence à devenir fou :o)


'********************************************

"Gilbert" wrote in message news:<#...
Bonjour,
Il est normal pour une requête analyse croisée de commencer par
l'instruction TRANSFORM.
Le message d'erreur doit provenir d'autre chose dans ta requête.
Publie ici ta requête complète pour voir.

Cordialement
Gilbert

"Serge" a écrit dans le message de
news:
Bonjour,
j'exporte des donnees sous excel à partir d'access et j'ai le 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 ..."

alors qu'Access voudrait qu'elle commence directement par
"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




Avatar
Gilbert
Bonjour,

Et si tu enlèves la 'partie Transform' et la 'partie Pivot', c'est à dire
que tu ne gardes que :
SELECT [TABLE2].CATEGORIE
FROM Table1 INNER JOIN [TABLE2] ON [Table1].CLIENT = [TABLE2].CLIENT
WHERE ((([Table1].AN)="2002" Or ([Table1].AN)="2003") AND
(([Table1].MOIS) Between "01" And "09") AND
(([TABLE2].CATEGORIE)="entreprise") AND (([Table1].ARTICLE)<>"code"))
GROUP BY [TABLE2].CATEGORIE;
Que se passe-t'il?
puis en rajoutant le champ [Table1].[Prixnet Euro]
Que se passe-t'il?


Gilbert

"Serge" a écrit dans le message de
news:
Bonjour, merci pour ta reponse!
je pense que cela vient de la requete qui commence par "transform" car
avec une autre requete, tout se passe bien !
Tu trouveras ci dessous le code qui appelle la requete puis la requete
elle meme!

Le code (de débutant, donc surement pleins de trucs qui te sembleront
bizarres!)



'On declare les variables

nom_categorie = Forms!export_excel!Categorie
nom_fichier_voulu = Forms!export_excel!fichier
nom_fichier = "c:excelfichiers" & nom_fichier_voulu &
".xls"

'On copie le fichier modele et on le nomme nom_fichier_voulu dans le
repertoire c:excelfichiers
FileCopy "c:excelsourceAAAA MM mois ENSEIGNE REGIONS.xls",
_
"c:excelfichiers" & nom_fichier_voulu & ".xls"

'On lance Excel en tache de fond
Dim XL_App As Object
Set XL_App = CreateObject("Excel.Application")

'On definit la variable classeur puis la variable feuille
Dim XL_classeur As Object
Dim XL_feuille As Object

'On ouvre le classeur (le fichier)
Set XL_classeur = XL_App.Workbooks.Open(nom_fichier)

'On declare un nouveau recordset
Dim Rs_menu As ADODB.Recordset
Set Rs_menu = New ADODB.Recordset
Rs_menu.Open " ma_requete_a_moi", CurrentProject.Connection

'On ouvre la feuille menu
With XL_App
Set XL_feuille = XL_classeur.Sheets("MENU")
With XL_feuille
.Range("A1").CopyFromRecordset Rs_menu
End With
End With

'On ferme Le recordset
Rs_menu.Close

'On sauvegarde le fichier, on le ferme et on quitte Excel
With XL_App
.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With

'On libere les variables
Set XL_App = Nothing
Set XL_classeur = Nothing
Set XL_feuille = Nothing
Set Rs = Nothing

End Sub






'*********************************************************

Requete "ma_requete_a_moi" :

TRANSFORM Sum([Table1].[Prixnet Euro]) AS [SommeDePrixnet Euro]
SELECT [TABLE2].CATEGORIE
FROM Table1 INNER JOIN [TABLE2] ON [Table1].CLIENT = [TABLE2].CLIENT
WHERE ((([Table1].AN)="2002" Or ([Table1].AN)="2003") AND
(([Table1].MOIS) Between "01" And "09") AND
(([TABLE2].CATEGORIE)="entreprise") AND (([Table1].ARTICLE)<>"code"))
GROUP BY [TABLE2].CATEGORIE
PIVOT [Table1].AN;



Merci beaucoup beaucoup de t'ennuyer pour moi... ca fait 4 jours que
je bloque la dessus et je crois que je commence à devenir fou :o)


'********************************************

"Gilbert" wrote in message
news:<#...

Bonjour,
Il est normal pour une requête analyse croisée de commencer par
l'instruction TRANSFORM.
Le message d'erreur doit provenir d'autre chose dans ta requête.
Publie ici ta requête complète pour voir.

Cordialement
Gilbert

"Serge" a écrit dans le message de
news:
Bonjour,
j'exporte des donnees sous excel à partir d'access et j'ai le 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 ..."

alors qu'Access voudrait qu'elle commence directement par
"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






Avatar
sirgio
Dans ce cas, je n'ai plus une requete d'analyse croisée mais une
requete simple:

Au lieu d'avoir en resultat:

AN <> 1 4 5 6 8 9
2000 -12,96 53,78 342,93 85 817,21 5 631,68 176,56
2001 -22,26 51,76 838,52 18,44 95 032,24 4 098,35 430,25
2002 24,30 572,56 35,60 83 445,41 4 991,55 -759,41
2003 19,40 1 486,71 86 768,28 4 870,50 751,97

j'ai :


AN Expr1 Somme De Prixnet Euro
2000 -12,96
2000 1 53,78
2000 4 342,93
2000 6 85 817,21
2000 8 5 631,68
2000 9 176,56
2001 -22,26
2001 1 51,76
2001 4 838,52
2001 5 18,44
2001 6 95 032,24
2001 8 4 098,35
2001 9 430,25
2002 1 24,30
2002 4 572,56
2002 5 35,60
2002 6 83 445,41
2002 8 4 991,55
2002 9 -759,41
2003 1 19,40
2003 4 1 486,71
2003 6 86 768,28
2003 8 4 870,50
2003 9 751,97

et j'ai simplilfé, j'ai normalement beaucoup plus de valeurs et
d'années... et comme j'exporte tout cela sous excel, pour faire des
graphs, ca fait pas terrible ... et les utilisateurs seraient paumés!


mais meme en essayant d'envoyer cela, j'ai pas d'erreur, mais rien
n'arrive dans mon fichier alors que ca passe avec une requete plus
simple, ...
je comprends pas trop...
peut etre que ca prend trop de temps? j'ai vu qu'avec des recordset
des gens font des "loop" et autres, ca pourrait etre un truc comme ca?


je suis tout nouveau, ca rentre petit a petit mais je crois que la
route est encore longue :o)

en tout cas merci beaucoup pour ton aide!
Serge

"Gilbert" wrote in message news:<#...
Bonjour,

Et si tu enlèves la 'partie Transform' et la 'partie Pivot', c'est à dire
que tu ne gardes que :
SELECT [TABLE2].CATEGORIE
FROM Table1 INNER JOIN [TABLE2] ON [Table1].CLIENT = [TABLE2].CLIENT
WHERE ((([Table1].AN)="2002" Or ([Table1].AN)="2003") AND
(([Table1].MOIS) Between "01" And "09") AND
(([TABLE2].CATEGORIE)="entreprise") AND (([Table1].ARTICLE)<>"code"))
GROUP BY [TABLE2].CATEGORIE;
Que se passe-t'il?
puis en rajoutant le champ [Table1].[Prixnet Euro]
Que se passe-t'il?


Gilbert

"Serge" a écrit dans le message de
news:
Bonjour, merci pour ta reponse!
je pense que cela vient de la requete qui commence par "transform" car
avec une autre requete, tout se passe bien !
Tu trouveras ci dessous le code qui appelle la requete puis la requete
elle meme!

Le code (de débutant, donc surement pleins de trucs qui te sembleront
bizarres!)



'On declare les variables

nom_categorie = Forms!export_excel!Categorie
nom_fichier_voulu = Forms!export_excel!fichier
nom_fichier = "c:excelfichiers" & nom_fichier_voulu &
".xls"

'On copie le fichier modele et on le nomme nom_fichier_voulu dans le
repertoire c:excelfichiers
FileCopy "c:excelsourceAAAA MM mois ENSEIGNE REGIONS.xls",
_
"c:excelfichiers" & nom_fichier_voulu & ".xls"

'On lance Excel en tache de fond
Dim XL_App As Object
Set XL_App = CreateObject("Excel.Application")

'On definit la variable classeur puis la variable feuille
Dim XL_classeur As Object
Dim XL_feuille As Object

'On ouvre le classeur (le fichier)
Set XL_classeur = XL_App.Workbooks.Open(nom_fichier)

'On declare un nouveau recordset
Dim Rs_menu As ADODB.Recordset
Set Rs_menu = New ADODB.Recordset
Rs_menu.Open " ma_requete_a_moi", CurrentProject.Connection

'On ouvre la feuille menu
With XL_App
Set XL_feuille = XL_classeur.Sheets("MENU")
With XL_feuille
.Range("A1").CopyFromRecordset Rs_menu
End With
End With

'On ferme Le recordset
Rs_menu.Close

'On sauvegarde le fichier, on le ferme et on quitte Excel
With XL_App
.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Quit
End With

'On libere les variables
Set XL_App = Nothing
Set XL_classeur = Nothing
Set XL_feuille = Nothing
Set Rs = Nothing

End Sub






'*********************************************************

Requete "ma_requete_a_moi" :

TRANSFORM Sum([Table1].[Prixnet Euro]) AS [SommeDePrixnet Euro]
SELECT [TABLE2].CATEGORIE
FROM Table1 INNER JOIN [TABLE2] ON [Table1].CLIENT = [TABLE2].CLIENT
WHERE ((([Table1].AN)="2002" Or ([Table1].AN)="2003") AND
(([Table1].MOIS) Between "01" And "09") AND
(([TABLE2].CATEGORIE)="entreprise") AND (([Table1].ARTICLE)<>"code"))
GROUP BY [TABLE2].CATEGORIE
PIVOT [Table1].AN;



Merci beaucoup beaucoup de t'ennuyer pour moi... ca fait 4 jours que
je bloque la dessus et je crois que je commence à devenir fou :o)


'********************************************

"Gilbert" wrote in message
news:<#...

Bonjour,
Il est normal pour une requête analyse croisée de commencer par
l'instruction TRANSFORM.
Le message d'erreur doit provenir d'autre chose dans ta requête.
Publie ici ta requête complète pour voir.

Cordialement
Gilbert

"Serge" a écrit dans le message de
news:
Bonjour,
j'exporte des donnees sous excel à partir d'access et j'ai le 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 ..."

alors qu'Access voudrait qu'elle commence directement par
"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








Avatar
Gilbert
Bonsoir,

Je ne comprends plus ta question. Si tu obtiens le résultat de ta requête
comme ci-dessous, c'est qu'elle fonctionne.
AN <> 1 4 5 6 8 9
2000 -12,96 53,78 342,93 85 817,21 5 631,68 176,56
2001 -22,26 51,76 838,52 18,44 95 032,24 4 098,35 430,25
2002 24,30 572,56 35,60 83 445,41 4 991,55 -759,41
2003 19,40 1 486,71 86 768,28 4 870,50 751,97



A quel moment apparait ton message d'erreur dans ce cas?

Gibert

Avatar
sirgio
Bonjour Gilbert,
Ma requete fonctionne très bien si je ne la lance pas a partir du code
que je t'ai donné au debut et j'obtiens :


AN <> 1 4 5 6 8 9
2000 -12,96 53,78 342,93 85 817,21 5 631,68 176,56
2001 -22,26 51,76 838,52 18,44 95 032,24 4 098,35 430,25
2002 24,30 572,56 35,60 83 445,41 4 991,55 -759,41
2003 19,40 1 486,71 86 768,28 4 870,50 751,97


en revanche si je la lance a partir du code, j'ai un bug VBA qui me
dit:
"Instruction SQL non valide DELETE, INSERT, PROCEDURE, SELECT ou
UPDATE attendus"

Je pensais que c'etait tout simplement parceque ma requete par un
transform et non pas par un select ou delete ou insert ou update ...

quand je fait ce que tu m'as dit , c'est a dire retirer le transform,
ma requete me renvoit des données en 2 colonnes comme je te les avais
envoyées, ce qui est plus lourd à envoyer sous exel et surtout ca me
complique enormement la tache pour tracer les graphes sous excel,
c'est meme surement impossible, et pas tres classe!

peut faudrait-il enregistrer le resultat de la requete dans une table
puis faire un "select * " sur ma table... mais comment on fait pour
enregistrer le resultat d'une requete dans une table temporaire???
ben vi je suis debutant!! :o)

Encore merci pour ton aide, c'est vraiment sympa!

Serge

"Gilbert" wrote in message news:<#...
Bonsoir,

Je ne comprends plus ta question. Si tu obtiens le résultat de ta requête
comme ci-dessous, c'est qu'elle fonctionne.
AN <> 1 4 5 6 8 9
2000 -12,96 53,78 342,93 85 817,21 5 631,68 176,56
2001 -22,26 51,76 838,52 18,44 95 032,24 4 098,35 430,25
2002 24,30 572,56 35,60 83 445,41 4 991,55 -759,41
2003 19,40 1 486,71 86 768,28 4 870,50 751,97



A quel moment apparait ton message d'erreur dans ce cas?

Gibert



Avatar
Gilbert
Bonjour,
L'idée de transformer ta requête analyse croisée en requête séléction était
juste pour contrôler le fonctionnement correct de la requête, pas pour que
tu l'utilise telle quelle pour le transfert dans Excel.

Si ta requête fonctionne très bien si tu ne la lances pas a partir du code,
le problème vient peut-être de l'utilisation de ADO que je ne connais pas.
Il y a peut-être des restrictions quant à l'utilisation de requêtes analyses
croisées avec ADO.
Pour ma part j'utilise DAO et j'arrive très bien à exécuter des requêtes
analyses croisées à partir de VBA et à les envoyer dans Excel.
Voici un exemple :

'Il faut cocher dans les références Microsoft DAO 3.6 Object Library

Dim rst As DAO.Recordset
'RqteTmp est le nom de ma requête analyse croisée
Set rst = CurrentDb.OpenRecordset("RqteTmp")
Set XL_App = CreateObject("Excel.Application")
Set XL_Classeur = XL_App.Workbooks.Open(NomModele)
Set XL_Feuille = XL_App.Sheets("Feuil1")

'-- Création des en-têtes de
colonnes ------------------------------------------------------------
With XL_Feuille
varColonne = 1
For Each fld In rst.Fields
.Cells(1, varColonne).Value = fld.Name
varColonne = varColonne + 1
Next
End With

'-- Copie des
données --------------------------------------------------------------------
--------
rst.MoveLast
rst.MoveFirst
Set rngCurr = XL_Feuille.Range(XL_Feuille.Cells(3, 1), XL_Feuille.Cells(2 +
rst.RecordCount, 3))
rngCurr.CopyFromRecordset rst
.
.
.
Set rst = Nothing
Set rngCurr = Nothing
Set XL_Feuille = Nothing
Set XL_Classeur = Nothing
Set XL_App = Nothing

Gilbert


"Serge" a écrit dans le message de news:

Bonjour Gilbert,
Ma requete fonctionne très bien si je ne la lance pas a partir du code
que je t'ai donné au debut et j'obtiens :


AN <> 1 4 5 6 8 9
2000 -12,96 53,78 342,93 85 817,21 5 631,68 176,56
2001 -22,26 51,76 838,52 18,44 95 032,24 4 098,35 430,25
2002 24,30 572,56 35,60 83 445,41 4 991,55 -759,41
2003 19,40 1 486,71 86 768,28 4 870,50 751,97


en revanche si je la lance a partir du code, j'ai un bug VBA qui me
dit:
"Instruction SQL non valide DELETE, INSERT, PROCEDURE, SELECT ou
UPDATE attendus"

Je pensais que c'etait tout simplement parceque ma requete par un
transform et non pas par un select ou delete ou insert ou update ...

quand je fait ce que tu m'as dit , c'est a dire retirer le transform,
ma requete me renvoit des données en 2 colonnes comme je te les avais
envoyées, ce qui est plus lourd à envoyer sous exel et surtout ca me
complique enormement la tache pour tracer les graphes sous excel,
c'est meme surement impossible, et pas tres classe!

peut faudrait-il enregistrer le resultat de la requete dans une table
puis faire un "select * " sur ma table... mais comment on fait pour
enregistrer le resultat d'une requete dans une table temporaire???
ben vi je suis debutant!! :o)

Encore merci pour ton aide, c'est vraiment sympa!

Serge

"Gilbert" wrote in message
news:<#...

Bonsoir,

Je ne comprends plus ta question. Si tu obtiens le résultat de ta
requête


comme ci-dessous, c'est qu'elle fonctionne.
AN <> 1 4 5 6 8 9
2000 -12,96 53,78 342,93 85 817,21 5 631,68 176,56
2001 -22,26 51,76 838,52 18,44 95 032,24 4 098,35 430,25
2002 24,30 572,56 35,60 83 445,41 4 991,55 -759,41
2003 19,40 1 486,71 86 768,28 4 870,50 751,97



A quel moment apparait ton message d'erreur dans ce cas?

Gibert





Avatar
sirgio
Merci beaucoup beaucoup beaucoup Gilbert!!
Ca marche très bien!
J'ai meme simplifié ton code... mais c'est peut etre une betise...

J'ai placé les entetes de colonnes directement dans le fichier excel
car ils ne changent jamais!
et je n'utilise pas :
rst.MoveLast
rst.MoveFirst
... ca sert a quoi???

bref sans en tete mon code devient:


Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("ma_requete")


Set XL_feuille = XL_App.Sheets("Par Famille")
With XL_feuille
.Range("M13").CopyFromRecordset rst
.Shapes.addpicture img, False, True, 660 - largeur_img /
2, 377 - hauteur_img / 2, largeur_img / 2, hauteur_img / 2
End With

Set rst = Nothing


encore merci merci merci merci!! mon sauveur :o)




"Gilbert" wrote in message news:<eCbB#...
Bonjour,
L'idée de transformer ta requête analyse croisée en requête séléction était
juste pour contrôler le fonctionnement correct de la requête, pas pour que
tu l'utilise telle quelle pour le transfert dans Excel.

Si ta requête fonctionne très bien si tu ne la lances pas a partir du code,
le problème vient peut-être de l'utilisation de ADO que je ne connais pas.
Il y a peut-être des restrictions quant à l'utilisation de requêtes analyses
croisées avec ADO.
Pour ma part j'utilise DAO et j'arrive très bien à exécuter des requêtes
analyses croisées à partir de VBA et à les envoyer dans Excel.
Voici un exemple :

'Il faut cocher dans les références Microsoft DAO 3.6 Object Library

Dim rst As DAO.Recordset
'RqteTmp est le nom de ma requête analyse croisée
Set rst = CurrentDb.OpenRecordset("RqteTmp")
Set XL_App = CreateObject("Excel.Application")
Set XL_Classeur = XL_App.Workbooks.Open(NomModele)
Set XL_Feuille = XL_App.Sheets("Feuil1")

'-- Création des en-têtes de
colonnes ------------------------------------------------------------
With XL_Feuille
varColonne = 1
For Each fld In rst.Fields
.Cells(1, varColonne).Value = fld.Name
varColonne = varColonne + 1
Next
End With

'-- Copie des
données --------------------------------------------------------------------
--------
rst.MoveLast
rst.MoveFirst
Set rngCurr = XL_Feuille.Range(XL_Feuille.Cells(3, 1), XL_Feuille.Cells(2 +
rst.RecordCount, 3))
rngCurr.CopyFromRecordset rst
.
.
.
Set rst = Nothing
Set rngCurr = Nothing
Set XL_Feuille = Nothing
Set XL_Classeur = Nothing
Set XL_App = Nothing

Gilbert


"Serge" a écrit dans le message de news:

Bonjour Gilbert,
Ma requete fonctionne très bien si je ne la lance pas a partir du code
que je t'ai donné au debut et j'obtiens :


AN <> 1 4 5 6 8 9
2000 -12,96 53,78 342,93 85 817,21 5 631,68 176,56
2001 -22,26 51,76 838,52 18,44 95 032,24 4 098,35 430,25
2002 24,30 572,56 35,60 83 445,41 4 991,55 -759,41
2003 19,40 1 486,71 86 768,28 4 870,50 751,97


en revanche si je la lance a partir du code, j'ai un bug VBA qui me
dit:
"Instruction SQL non valide DELETE, INSERT, PROCEDURE, SELECT ou
UPDATE attendus"

Je pensais que c'etait tout simplement parceque ma requete par un
transform et non pas par un select ou delete ou insert ou update ...

quand je fait ce que tu m'as dit , c'est a dire retirer le transform,
ma requete me renvoit des données en 2 colonnes comme je te les avais
envoyées, ce qui est plus lourd à envoyer sous exel et surtout ca me
complique enormement la tache pour tracer les graphes sous excel,
c'est meme surement impossible, et pas tres classe!

peut faudrait-il enregistrer le resultat de la requete dans une table
puis faire un "select * " sur ma table... mais comment on fait pour
enregistrer le resultat d'une requete dans une table temporaire???
ben vi je suis debutant!! :o)

Encore merci pour ton aide, c'est vraiment sympa!

Serge

"Gilbert" wrote in message
news:<#...

Bonsoir,

Je ne comprends plus ta question. Si tu obtiens le résultat de ta
requête


comme ci-dessous, c'est qu'elle fonctionne.
AN <> 1 4 5 6 8 9
2000 -12,96 53,78 342,93 85 817,21 5 631,68 176,56
2001 -22,26 51,76 838,52 18,44 95 032,24 4 098,35 430,25
2002 24,30 572,56 35,60 83 445,41 4 991,55 -759,41
2003 19,40 1 486,71 86 768,28 4 870,50 751,97



A quel moment apparait ton message d'erreur dans ce cas?

Gibert







Avatar
Gilbert
rst.MoveLast
rst.MoveFirst
... ca sert a quoi???

rst.movelast sert à positionner la propriété Recordcount

Extrait de l'aide : La propriété RecordCount n'indique pas le nombre
d'enregistrements contenus dans un objet Recordset de type Feuille de
réponses dynamique (Dynaset), Instantané (Snapshot) ou En avant seulement
tant que vous n'avez pas eu accès à tous les enregistrements. Une fois que
vous avez accédé au dernier enregistrement, la propriété RecordCount indique
le nombre total d'enregistrements non supprimés dans l'objet Recordset ou
TableDef
Mais comme tu ne l'utilises pas, tu n'en as pas besoin.

rst.MoveFirst sert à se repositionner sur le premier enregistrement pour la
boucle ....que je ne fais pas, donc ne sert à rien dans ce cas. Je vais le
supprimer dans mon code.



encore merci merci merci merci!! mon sauveur :o)

Ca va, n'en fais pas trop ;o))


Gilbert