Se connecter avec
S'enregistrer | Connectez-vous

VBA SQL Access Erreur de syntaxe

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte
Expert Programmation

Avant que ce ne soit du SQL, c'est du VB.
Regarde ce que voit VB, qui lui n'interprête pas le SQL :
SQL = "INSERT INTO CA ( année, france ) SELECT " 2007 " AS Année, Temp.F1 FROM Temp"
SQL = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 2007 "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"


Tu ne trouves pas qu'il y a comme un problème ?

OUi j'ai modifer mon code je doit mettre des '2007' au lieu de "2007"
Mais il importe toujours pas dans ma table.
En plus après c'est pour importer une table dans Excel a la suite d'un tableau déja présent sans rien effacer c'est possible??

j'ai lu l'aide de Access et ils disent rien sur le fait de faire un export Access vers Excel sans rien effacer et pour le mettre a un endroit précis sur la feuille mais de toute maniere mon code SQL ne fonctionne pas du tout alors qu'il fonctionne bien sans Access

voila mon code

  1. Sub Commande0_Click()
  2.  
  3. 'Déclaration des variables
  4. Dim l As Long
  5. Dim Chiffre As String
  6. Dim SQL As String
  7.  
  8. 'Recherche a l'intérieur du fichier chiffre d'affaire de la cellule a importer
  9. Chiffre = "D:\Test\Essai.xls"
  10. l = Ligne()
  11. DoCmd.DeleteObject acTable, "Temp"
  12. DoCmd.TransferSpreadsheet acImport, , "Temp", "D:\Eric\dossier_projets\TDB\Chiffres-Affaires\a-Activité paiement porteurs CA an2007.xls", 0, "K" & l & ":K" & l
  13. DoCmd.OpenQuery "Req_CA"
  14. SQL = "INSERT INTO CA ( année, [Paiement france] ) SELECT [2007] AS Année, Temp.F1FROM Temp;"
  15. MsgBox SQL
  16.  
  17.  
  18. End Sub

j'ai trouvé la réponse ""2007"" au lieu de [2007]
et j'ai oublié de taperl a commande
  1. CurrentDb.Execute SQL


J'ai un porbleme de syntaxe j'aimerais exporter ma table Access cers un tableau Excel est ce bien commet cela??
  1. DoCmd.TransferSpreadsheet acExport, , CA, TDB

Il requiet un argument nom de Table

Quand tu dois donner un argument de type string ou variant correspondant au nom d'une table ou autre il faut des guillemets...
  1. DoCmd.TransferSpreadsheet acExport, , "CA", "TD"

Puis avec TD tout court ca fonctionnera pas.
Regarde l'aide de la fonction

NomFichier Variant facultatif. Expression chaîne qui représente le nom et le chemin du fichier de feuille de calcul dont vous voulez importer les données, dans lequel vous voulez exporter des données ou auquel vous voulez attacher des données.


TD est une variable c'est vrai que je ne l'ai pas précisé par contre il me fait rien du tout j'essai d'exporter dans un tableau Excel existant et il y' a rien de modifier. (J'aimerais ajouter la table a la suite d'un tableau déja présent)
C'est une erreur de ma commande??
Expert Programmation

As-tu mis l'Option Explicit ?
Interdit de demander ce que c'est avant d'avoir lu la doc.
Interdit de répondre "NON CAR JE M'EN FOUS" (ou n'importe quelle autre raison)

En plus, on te l'a déjà dit. Soit CA est une variable, et elle doit contenir le nom de la table, soit c'est le nom de la table, et elle doit être entre guillemets.

Effectivement transferSpreadSheet est une fonction basique d'import export, il ne faut pas s'attendre à mes miracles.

Maintenant on a parlé des méthodes pour ouvrir Excel et travaillé directement dessus depuis Access dans un autre topic avec cette méthode c'est très simple de faire ce que tu recherches.
Expert Programmation

Hoegarden31» Je lis TOUS les sujets parce que je suis modérateur. Donc je lirai ton autre sujet. et si je jugerai ma contribution opportune, je n'hésiterais pas.

darksploilt» Ah bon, c'est impossible. Et à quoi sert le sixième paramètre de la fonction TransferSpreadsheet.

VOUS ALLEZ ME LIRE CES P*****S DE MANUELS AVANT DE POSER UNE QUESTION OU DONNER UNE REPONSE [:zeb]

(Ce n'est pas bon pour mon karma de m'énerver comme ça :whistle:  )

zeb J'ai lu ce manuel!!! le sixieme argument est valable seulement pour une importation (c'est écris noir sur blanc a moins qu'on est pas le même) moi c'est une exportation que je veux faire Acces vers Excel. et le dernier n'est pas spécifié a quoi il sert. Après j'ai lu sur d'autre forum ou tuto que ce n'est pas possible avec cette fonction donc c'est pour cela que je demande une méthode.
Expert Programmation

Citation :
zeb J'ai lu ce manuel!!! le sixieme argument est valable seulement pour une importation (c'est écris noir sur blanc a moins qu'on est pas le même) moi c'est une exportation que je veux faire Acces vers Excel. et le dernier n'est pas spécifié a quoi il sert. Après j'ai lu sur d'autre forum ou tuto que ce n'est pas possible avec cette fonction donc c'est pour cela que je demande une méthode.



:whistle:  Je l'ai lu il y a longtemps, et quand je poste du boulot, je ne l'ai pas à disposition.
PIS ON N'A PAS MSACCESS NOUS AU BOULOT. ON A UNE VRAIE BASE DE DONNEES :o  [<-- mauvaise foi détectée]

Bon, un bon point, vous l'avez lu :D 

Dixit MSAccess:
Citation :
Étendue La plage de données à importer ou à laquelle s'attacher. Laissez cet argument à blanc pour importer ou vous attacher à la feuille de calcul tout entière. Vous pouvez saisir le nom d'une plage dans la feuille de calcul ou bien spécifier la plage de cellules à importer ou à laquelle s'attacher, comme par exemple A1:E25 (remarquez que la syntaxe A1..E25 ne fonctionne pas dans Access 97 ou ultérieur). Si vous importez de ou que vous vous attachez à une feuille de calcul d'Excel version 5.0 ou ultérieure, vous pouvez préfixer la plage avec le nom du classeur et un point d'exclamation, comme par exemple Budget!A1:C7.
Remarque Quand vous exportez vers une feuille de données, vous devez laisser cet argument à blanc. Si vous saisissez une plage, l'exportation va échouer.

Citation :
Oui pour une importation moi je fais une exportation ce qui est différent c'est mon sujet lol. et j'ai essayé en plus donc voila mais passons j'ai détourné le problème


Je pense pas que tu es lu la bonne partie sinon tu as compris de travers.
La méthode avec CreateObject permet de manipuler directement un fichier Excel et de le remplir manuellement derrière, dans ce cas import ou export ca n'a aucune valeur puisque tu peux faire tout ce que tu veux (créer des classeurs, les remplirs, en ouvrir...)

  1. if ucase(valeur) = "TOTAL" then ' bien
  2. if valeur = "total" or valeur = "TOTAL" then 'mal


Pour l'automation l'exemple que je donne donne les bases. Une fois que tu as instancié la variable AppExcel tu maitrise Excel comme si tu faisais une macro directement sous excel. Donc sert toi des conseils Excel de ce cher Zeb.

Par exemple :
Il faut referencer Excel dans Access (outils/reference dans VBA)
  1. Dim appExcel as excel.application
  2. Dim wbfile as workbook
  3.  
  4. Set AppExcel = CreateObject("Excel.Application" )
  5. If Not AppExcel Is Nothing Then
  6. Set wbFile = AppExcel.Workbooks.Open("c:\toto.xls", False, True) 'Ouverture d'un classeur
  7. if not wbfile is nothing then
  8. ' Traitement voulu...
  9. wbfile.sheets("A remplir").activate
  10. with wbfile.sheets("A remplir")
  11. .range("A1") = "Titre"
  12. .range("C1") = "Nom"
  13. ' etc....
  14. end with
  15. ' Fermeture des élements
  16. wbfile.close
  17. AppExcel.Application.Quit
  18. Set appexcel = nothing
  19. end if
  20. end if


C'est qu'un exemple evidemment tu peux faire des boucles, ouvrir un recordset sur ta table afin de tout remplir...

Merci pour ton exemple j'ai déja fait un code utilisant l'automation pour manipuler Excel mais je ne suis pas un pro des macros Excel.
oki c'était pour
  1. tant que valeur différent de "Total" ou "TOTAL"
pardon
Et j'aimerais importer une cellule access (ca c'est bon) mais pour la mettre dans une table déja existante Access
voila mon code:
  1. DoCmd.DeleteObject acTable, "Temp"
  2. DoCmd.TransferSpreadsheet acImport, , "Temp", filename, 0, "K" & l & ":K" & l
  3. SQL3 = "INSERT INTO T_stats_global_regroup ( année, montant, type ) SELECT ""2007"" AS Année, Temp.F1, ""CA_2007"" AS type FROM Temp;"

l est une variable contenant un chiffre
Je voulais savoir s'il y avait pas une méthode une méthode plus propre

Si tu as dans ce classeur que cette cellule à récupérer cette méthode marche très bien. Ton SQL est pas très joli :p 
  1. SQL3 = "INSERT INTO T_stats_global_regroup ( année, montant, type ) SELECT '2007' AS Année, F1, 'CA_2007' AS type FROM Temp"

D'ailleur les points virgules en fin de requete sont inutiles sous VBA Access (pour mon plus grand bonheur) :D 
Lassé par la pub ? Créez un compte