Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
2039 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Probleme de requete

 



 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[VBA] Probleme de requete

n°1587921
Akash31
Posté le 18-07-2007 à 08:31:38  profilanswer
 

Bonjour,
je suis actuellement en stage et je suis amené a ecrire des macros (access, exel)
je n'avais jamais touché a ca avant, donc mechamment debutant  :pt1cable:  
voila mon probleme :
 
j'ai ecrit dans un module une fonction
 

Citation :

Dim CnxBasCrt As ADODB.Connection  'Connection sur la Base Courante
Set CnxBasCrt = CurrentProject.Connection 'Ouverture de la base courante
Dim ReqSQL As String 'Variable qui va nous permettre de découper une requete
 
ReqSQL = ****
 
CnxBasCrt.Execute ReqSQL
MsgBox ("cette putain de requete a été executé!" )
CnxBasCrt.Close


 
Ma requete est du style :
ReqSQL = "INSERT INTO Tab1 SELECT * FROM Tab2;"
Cette requete ne veut pas s'executer, enfin elle s'execute, mais ne produit aucun resultat (la msgbox apparait correctement!)
 
Enfin ma question, Tab2 étant le resultat d'une requete selection, ma requete est elle possible?
j'ai essayé de remplacé Tab2 par une autre "vrai" table et là ca marche!  
Tab2 est correctement remplie.
 
Voila, si quelqu'un pouvait me renseigner!
Merci d'avance!  
 
 
 

mood
Publicité
Posté le 18-07-2007 à 08:31:38  profilanswer
 

n°1587958
tegu
Posté le 18-07-2007 à 09:47:27  profilanswer
 

Est-ce que ta requete d'insertion fonctionne via l'interface Access, avec cette même syntaxe ?
Plutôt que d'utiliser ADODB essaie d'utiliser « DoCmd.RunSQL reqSQL » pour voir.

n°1587964
Akash31
Posté le 18-07-2007 à 09:50:58  profilanswer
 

En fait je modifie une macro deja ecrite, et seul ADODB avait été utilisé.
Je ne connais pas ta syntaxe DoCmd... :s
Pour te répondre, oui si j'explicite clairement la requete dans la macro (ouvrir requete, executerSql, fermer) avec ma requete, celle ci marche!
c'est pour ca que j'ai des doutes concernant le FOM Tab2 avec Tab2 resultat d'une requete selection.

n°1587971
jpcheck
Pioupiou
Posté le 18-07-2007 à 10:08:33  profilanswer
 

atta, deja tu nous dit que tu fais tes requetes, mais t'es dans excel ou dans access la ??

n°1587975
Akash31
Posté le 18-07-2007 à 10:14:33  profilanswer
 

je suis sous acces

n°1587977
jpcheck
Pioupiou
Posté le 18-07-2007 à 10:16:11  profilanswer
 

bon ben tu fais un  
 
docmd.runquery reqsql

n°1588001
Akash31
Posté le 18-07-2007 à 10:36:25  profilanswer
 

Comme je l'ai dit en haut, je ne connais pas cette syntaxe
j'ai jeté un coup d'oeil sur le net
et visiblement il faut d'autres ligne de code pour se connecter, et ouvrir la base...
exemple : Dim qdf As DAO.Querydef
les modules on jusqu'a present été ecrite avec des ADO
y a t-il un risque de conflit ou autre (je suis vraiment debutant...)
 
si quelqu'un pouvait trouver une idée pour que je garde le ADO, je suis preneur!
En attendant, je vais tester avec votre solution du DoCmd!

n°1588023
jpcheck
Pioupiou
Posté le 18-07-2007 à 10:54:45  profilanswer
 

ton interface n'est pas liée drectement avec la base dans ton cas, c'est ca ?

n°1588038
Akash31
Posté le 18-07-2007 à 11:08:52  profilanswer
 

eeuuhh j'ais pa compris la question ...
de quelle interface parles tu et de quelle liaison parle tu?

n°1588046
jpcheck
Pioupiou
Posté le 18-07-2007 à 11:13:04  profilanswer
 

ton code, tu le fais tourner derriere des formulaires non ?
ces formulaires vont-ils taper dans la bdd access ou bien une autre ailleurs ?

mood
Publicité
Posté le 18-07-2007 à 11:13:04  profilanswer
 

n°1588048
Akash31
Posté le 18-07-2007 à 11:14:42  profilanswer
 

non je n'utilise pas de formulaires jpcheck
j'importe des données depuis des tables liées
et en sortie j'effectue une mise en forme de ces données sous excel

n°1588061
jpcheck
Pioupiou
Posté le 18-07-2007 à 11:25:57  profilanswer
 

ok,
 
amha :
au lieu de faire de l'ADODB, tu lies les tables dans ton fichier mdb, et tu travailles dessus comme si de rien n'était avec DoCmd et CurrentDb
 
je pense aussi je la connection dans ton code d'origine est pas top...

n°1588079
Akash31
Posté le 18-07-2007 à 11:47:23  profilanswer
 

hhmm,
bon j'ai comme meme utilisé la connexion ADO, et j'ai juste executé ma requete avec un DoCmd et ... magie ca marche!
vous auriez un bon lien qui explique la "difference" entre ADO, DOA s'il vous plait?
 
en tout cas merci tegu et jpcheck pour votre solution!

n°1588092
jpcheck
Pioupiou
Posté le 18-07-2007 à 11:53:43  profilanswer
 
n°1588172
Akash31
Posté le 18-07-2007 à 13:04:17  profilanswer
 

ok merci, je jetterai un coup d'oeil dessus apres avoir digeré ;)

n°1588645
Akash31
Posté le 19-07-2007 à 11:00:01  profilanswer
 

ReBonjour,
J'ai une macro sous Access qui me permet de recuperer des donées et de les traiter a ma guise
A la fin de cette macro, je désire exporter les données traitées vers 3 fichiers excel distincts.
Quand j'execute le code d'exportation pour 1 fichier a la fois, l'export se fait sans probleme
Cepedant quand dans ma macro, j'enchaine l'execution des 3 exportations, la premiere s'effectue normalement, et la 2e plante forcement!
 
Une fonction d'exportation a la structure suivante :

Citation :

Declaration et Initialisation générale
Traitement de l'entete et remplissage du tableau xl
Appel a des fonction de mise en forme  
Options et fermeture


Lors de la 2e exportation, l'erreur se produit a l'appel d'une fonction, plus precisement a la premeire ligne qui est simplement un Range()
 
Je n'arrive pas a m'expliquer ce phenomene, si vous avez nue idée, n'hesitez pas!  

n°1588649
jpcheck
Pioupiou
Posté le 19-07-2007 à 11:08:29  profilanswer
 

l'import de données externes passe par la fonction docmd.trasfertsheet normalement

n°1588652
Akash31
Posté le 19-07-2007 à 11:15:34  profilanswer
 

je suis sous access et je souhaite exporter sous excel ;)

n°1588716
jpcheck
Pioupiou
Posté le 19-07-2007 à 11:57:04  profilanswer
 

Code :
  1. ' export
  2.     DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, TableExport, fichier, True


 
tableexport est la table qui a récupéré le résultat de ta requete,
fichier est le fichier d'export :)

n°1588764
Akash31
Posté le 19-07-2007 à 13:22:42  profilanswer
 

ok merci, seulement moi je veut effectuer une mise en former, donc quand j'exporte, j'ouvre une appli excel, j'ouvr un workbook ... ect
je suis pas sur que ce soit une solution qui est adapté a ce que je dois faire, mais bon je vasi voir et tester ca!
merci

n°1588767
jpcheck
Pioupiou
Posté le 19-07-2007 à 13:28:36  profilanswer
 

ben tu fais ton export,
puis tu fais ta mise en forme dans le fichier excel en question :)

n°1588770
tegu
Posté le 19-07-2007 à 13:38:39  profilanswer
 

Si le problème est lié à l'ouverture et la (non)fermeture de certains objets Excel (voire Excel lui-même), il va falloir nous donner un peu de code pour qu'on mette le doigt dessus.
 
Est-ce que tu gardes ton objet Excel entre deux exportations ?

n°1589130
Akash31
Posté le 20-07-2007 à 09:20:44  profilanswer
 

Alors effectivement j'avais pensé a ca, aussi je me suis attarder sur toutes les ouverture effetuées et si elle était fermé!
Voila les differentes ouvertures :  

Citation :

Dim cnn As ADODB.Connection
Dim rst2 As New ADODB.Recordset      
Dim xlApp As Excel.Application
Dim wbk As Excel.Workbook
Dim sht As Excel.Worksheet
 
Set cnn = CurrentProject.Connection
rst2.Open "Tab1", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect
 
Set xlApp = CreateObject("Excel.Application" )
xlApp.Application.DisplayAlerts = False
 
With xlApp
    .Visible = True
    .SheetsInNewWorkbook = 1
        Set wbk = .Workbooks.Add
            Set sht = .Worksheets.Add
               With sht
                  *** Code ***
               End With
        wbk.Close
   .Quit
End With
 
Set sht = Nothing
Set wbk = Nothing
Set xlApp = Nothing
Set fso = Nothing
rst2.Close
cnn.Close


 
Voila donc la structure de mes fonction d'importations
Donc pour te repondre tegu, non je ne garde pas le meme.
 
Dans le Code je remplit la feuille puis je fais appel a des fonctions de mise en page
 
Quand je lance ma macro avec l'exction des 3 codes exports a la suite,
le classeur 1 s'ouvre, ouvre une feuille, se remplit, et se ferme
le classeur 2 s'ouvre se remplit, et au moment de l'appel de la 1ere fonction de mise en page, ca bug d'entrée au niveau du Range, 'la metgode Range au niveau _Global a échoué'
 
Pour info, je fais des tests en attendant vos reponse et donc j'ai crée 2 autres modules avec dedans une seule fonction d'export
macro 1 :  init, remplissage et export1
macro 2 : export 2
macro 3 : export 3
 
j'execute la macro 1  init et export 1 OK
j'execute la macro 2  export 2 bug --> pb de range ...
je met fin au debogeur, arrete la macro et relance la macro 2 --> cette fois c'est OK
j'execute la macro 3  export 3 bug --> pb de range ...
je met fin au debogeur, arrete la macro et relance la macro 3 --> cette fois c'est OK!
 
Donc voila, je soupconne un probleme de variables ... ou alors un petit bug d'acces ... a vous la parole!  :pt1cable:


Message édité par Akash31 le 20-07-2007 à 09:21:12
n°1589150
jpcheck
Pioupiou
Posté le 20-07-2007 à 09:51:32  profilanswer
 

ton problème de range tu peux nous montrer la ligne incriminée stp ?

n°1589184
tegu
Posté le 20-07-2007 à 10:32:20  profilanswer
 

Bon je vais te dire comment j'aurais déclaré tout ça, sans présumer pour autant que ça résoudra ton problème :
Déclaration en deux temps pour ADODB.Recordset
Dim rst2 As ADODB.Recordset  
Set rst2 = New ADODB.Recordset

 

Remplacer
Set xlApp = CreateObject("Excel.Application" )
par
Set xlApp = New Excel.Application
sauf si, au final, tu voudras être totalement indépendant de la version d'Excel, auquel cas il faut aussi déclarer tous tes objets Excel en « Object ».

 

Les deux conseils suivants peuvent résoudre ton problème :
Avant de faire
Set wbk = Nothing
tu devrais faire
wbk.Close

 

Avant de faire
Set xlApp = Nothing
tu devrais faire
xlApp.Quit

 

Pour compléter, ajoute à la fin
Set rst2 = Nothing
Set cnn = Nothing

 


Message édité par tegu le 20-07-2007 à 10:33:56
n°1589216
Akash31
Posté le 20-07-2007 à 10:49:54  profilanswer
 

j'ai u peu modifié mon code , mais selon l'ordre de mes exportation (l'ordre importe peu, et j'ai effetué toutes les permutations possibles pour determiner si un export en particliuer plantait, mais non)
 
    If (Range("D8:D8" ).Value <> 0) Then
    If (Range("D8" ).Value <> 0) Then
    If (Range(Cells(8, 4), Cells(8, 4)).Value <> 0) Then
 
j'ai essayé plusieurs versions sans succes
 
tegu, les close et le quit sont present dans le code,  
tu me propose de faire dans "l'ordre", wbk.close, set nothing, x1App.quit, set nothing, c'est bien ca?
 
 
[Edit]
Sans succès pour  
wbk.Close
Set wbk = Nothing
x1App.Quit
Set xlApp = Nothing
[\Edit]


Message édité par Akash31 le 20-07-2007 à 10:54:36
n°1589222
jpcheck
Pioupiou
Posté le 20-07-2007 à 10:57:22  profilanswer
 

tu as mis activeworkbook avant tes range ?

n°1589225
Akash31
Posté le 20-07-2007 à 11:03:44  profilanswer
 

nop ...
tu pense que je devrait faire des ActiveWorkBook.Range ?
Range est une methode compatible avec un workbook? ce ne serait pas plutot ActiveSheet?

n°1589249
jpcheck
Pioupiou
Posté le 20-07-2007 à 11:37:59  profilanswer
 

ce code la marche nickel chez moi...
avec Path en string  
 

Code :
  1. Workbooks.Open FileName:=Path
  2.     For i = 1 To 1000
  3.         If ActiveWorkbook.Range("c" & i).Value = "Contrepartie eligible" Then
  4.             ActiveWorkbook.Range("d" & i).Value = 1
  5.         ElseIf ActiveWorkbook.Range("c" & i).Value = "Professionnel" Then
  6.             ActiveWorkbook.Range("d" & i).Value = 2
  7.           ElseIf ActiveWorkbook.Range("c" & i).Value = "Client Retail" Then
  8.             ActiveWorkbook.Range("d" & i).Value = 4
  9.         End If
  10.     Next i
  11.     ActiveWorkbook.SaveAs FileName:=Path, FileFormat:=xlExcel9795, Password:="", WriteResPassword:="", _
  12.     ReadOnlyRecommended:=False, CreateBackup:=False
  13.     ActiveWindow.Close

n°1589256
Akash31
Posté le 20-07-2007 à 11:53:48  profilanswer
 

Code :
  1. If (ActiveWorkbook.Range("D8" ).Value <> 0) Then


 Meme erreur de range _global
 

Code :
  1. With ActiveWorkbook
  2.     If (.Range("D8" ).Value <> 0) Then


erruer 91, la methode Range ne semble pas s'appliquer avec un objet worbook dnas un with!
 
Mais tout de meme lorsque j'ai séparé mes export dans differentes macros, j'avais l'impression qu'il fallait "terminer" la macro vis a vis de l'objet _Global puis lancer l'autre export pour que ca mache ... je sais pas si je m'exprime bien là :s

n°1589261
jpcheck
Pioupiou
Posté le 20-07-2007 à 12:00:08  profilanswer
 

euh ,détail a la con, tu as bien mis dans les référence la bibli excel ?

n°1589270
Akash31
Posté le 20-07-2007 à 12:15:54  profilanswer
 

eeuuhhh....
euuuuhhh  :whistle:  
je viens de chercher ce que c'est sur le net
je n'ai pas de outils/refrence ni sous acces, ni sous excel
( je precise que j'ai la verion 2000 pour ces 2 soft)
mais sinon non je ne pense pas que la personne qui ait ecrite le code initial l'ai faite ...
 
Autrement, ma premiere idée semble etre la bonne :
 
TEST1:
j'ouvre le module1 ou est la fonction d'export1
je lance la fonction, l'export 1 se fait sans pb
j'ouvre le module2 ou est la fonction d'export2
je lance la fonction, l'export 2 bug et j'ai le proleme de range du _Global
 
TEST2:
j'ouvre le module1 ou est la fonction d'export1
je lance la fonction, l'export 1 se fait sans pb
j'ouvre le module2 ou est la fonction d'export2
JE REINITIALISE!
je lance la fonction, l'export 2  marche!  :bounce:  
 
Donc mon idée de variables qui traine et bug semble pas si mauvaise
si quelqu'un sait comment on peut reinitialiser dans ue macro entre 2 execution de code, je veut bien tester!
(j'ai cherché moi meme mais rien ne me tente pour le moment, je regarderais chacune des effet des actions qui sont proposés dans la macro dans l'aprem!)
 
EDIT : Bon appétit ^^


Message édité par Akash31 le 20-07-2007 à 12:25:31
n°1589301
tegu
Posté le 20-07-2007 à 13:16:46  profilanswer
 

Quand tu es dans l'interface d'écriture du code VBA (par ALT+F11) tu dois avoir un menu Outils et une option Références, même dans Excel 2000.
 
Mais si tu n'a pas de référence vers la bibliothèque Excel je ne comprends pas pourquoi les types d'objet Worksheet et Workbook peuvent être déclarés.
 
As-tu utilisé l'option de compilation dans ce module, au moins une fois  (ALT+F11, menu Debogage, option compiler...) ?
 
edit: tu n'as pas précisé si tu avais testé en ajoutant les deux lignes :
Set rst2 = Nothing
Set cnn = Nothing
 


Message édité par tegu le 20-07-2007 à 13:24:08
n°1589334
Akash31
Posté le 20-07-2007 à 13:48:53  profilanswer
 

Dsl je n'avait pas "vu" ces lignes :p
mes yeux sont passé dessus en comprenant *.close
Effectivement c'est pas bete, etant donnée que je reutilise ces meme noms dans les autres exports.
Bon, ca ne marche pas mieux, mais je laisse ces lignes ^^
 
Autrement, j'avais compris les reference dans excel ou access ...
Dans l'editeur vba, j'ai effectivement outils/references des cf cochés!


Message édité par Akash31 le 20-07-2007 à 13:51:45
n°1589979
Akash31
Posté le 23-07-2007 à 11:09:22  profilanswer
 

Bon voila, le dernier probleme concernant l'enchainement des export n'est toujours pas reglé,
j'ai commencé a rédiger mon rapport de stage et vous y figurer tous les deux!
encore merci de m'avoir répondu et aidé, ca fais plaisir de trouver de l'aide! =)


Message édité par Akash31 le 23-07-2007 à 11:09:48
n°1589981
jpcheck
Pioupiou
Posté le 23-07-2007 à 11:11:10  profilanswer
 

on pourra avoir une copie ?  :sol:

n°1590315
Akash31
Posté le 23-07-2007 à 16:16:28  profilanswer
 

une copie du rapport? lol je vois pas trop ce que tu veut en faire mais bon :p
sinon il est a peine entamé, docn plus tard! ^^
 
Si une idée vous passe par la tete concernant un probleme d'ouverture successive de fichier excel pour l'exportation de donnée depuis access, n'hesitez pas! :D

n°1591881
Akash31
Posté le 26-07-2007 à 15:10:49  profilanswer
 

Bon alors toujours ce probleme d'exportation successive de données depuis access vers excel ...
j'aurais donc une question .....
est ce que, je dis bien est ce que .... il serait possble de générer dans une macro, ou une fonction l'action REinitialiser que l'on peu faire avec la souris  sous vba?

n°1591900
jpcheck
Pioupiou
Posté le 26-07-2007 à 15:37:37  profilanswer
 

qu'appelles-tu "reinitialiser" ?  :heink:

n°1593138
Akash31
Posté le 30-07-2007 à 08:53:33  profilanswer
 

jpcheck a écrit :

qu'appelles-tu "reinitialiser" ?  :heink:


 
http://img406.imageshack.us/img406/6718/reinitialiserio9.th.jpg

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Probleme de requete

 

Sujets relatifs
résoluProbleme de chargement de dll
Problème affichage FF / IE7Problème sur "€" et" "-" avec FPDF (génération PDF)
Problème de variable dans un ActiveChart.SetSourceData Sourceproblème lecture d'un fichier texte
Plusieurs flash dans une page html - probleme avec swfObjectrequete alter
Problème boucle à droite![VBA] Access, probleme de requete
Plus de sujets relatifs à : [VBA] Probleme de requete


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR