[Access] VBA récuperer données requête

VBA récuperer données requête [Access] - VB/VBA/VBS - Programmation

Marsh Posté le 20-07-2006 à 17:27:28    

Bonjour
 
Je dois générer un document Excel à partir d'une DB Access. J'y arrive presque, il me manque une chose: récupérer les données fournies par une requête enregistrée. (Je dois procéder ainsi)
 
J'ai trouvé ce code:

Code :
  1. Set rec = CurrentDb.OpenRecordset("NomTable", dbOpenSnapshot)


 
Cela fonctionne, mais uniquement pour les données d'une table. Lorsque je remplace le nom de la table par celui de la requête qui m'intéresse ça plante.
 
Je ne connais pas très bien VBA, si vous pouviez m'aider à adapter ce petit bout de code à mes besoins ça serait vraiment sympa. Merci.
 
PS: j'ai fait pas mal de recherches sur google sans pour autant trouver de solution...


Message édité par Big-Foot le 28-07-2006 à 12:53:25
Reply

Marsh Posté le 20-07-2006 à 17:27:28   

Reply

Marsh Posté le 20-07-2006 à 17:32:49    

"select * from larequete"
 
bon, ok, y'a mieu
 
mais t'as dit que ton truc est urgent... donc tu chercheras mieu après :p

Reply

Marsh Posté le 20-07-2006 à 22:49:28    

Arjuna a écrit :

"select * from larequete"


 
C'est du SQL ça non ? Mais moi j'ai une requête SQL enregistrée dans Access, et je veux utiliser celle-ci sans la copier-coller en fait (elle prend une valeur d'un formulaire et je pense pas que ça va fonctionner depuis VBA, en tout cas sans me donner encore du travail).
Bon si jamais il n'y a que cette solution quel serait le code qui entoure la requête SQL ? Càd connection à la base définition des variables etc ??


Message édité par Big-Foot le 20-07-2006 à 22:49:42
Reply

Marsh Posté le 21-07-2006 à 09:40:38    

marequete, c'est ta requête ACCESS.
 
toi au lieu de l'appeller directement, tu fait un SELECT à partir d'elle.
 
ca revient RIGOUREUSEMENT AU MEME

Reply

Marsh Posté le 21-07-2006 à 10:23:00    

J'ai essayé de faire comme tu dis. Alors ça marche avec une requête simple mais pas avec la requête qui m'intéresse.
 

Code :
  1. SQLstr = "SELECT CPS_ProductSearch_5GroupProd.PRODUCT_DESCRIPTION FROM
  2. CPS_ProductSearch_5GroupProd WHERE
  3. (((CPS_ProductSearch_5GroupProd.PRODUCT_DESCRIPTION) = [Forms]![CPS_ProductSearch_5GroupProd]![PRODUCT_DESCRIPTION_form]))
  4. ORDER BY CPS_ProductSearch_5GroupProd.ABBREVIATED_DESCRIPTION;"


 
Ma requête est basée sur d'autre requêtes et elle recoit un variable comme condition. C'est ça qui pose problème ?


Message édité par Big-Foot le 21-07-2006 à 10:23:32
Reply

Marsh Posté le 21-07-2006 à 10:51:45    

normal.
là tu mets pas la valeur de ton champs, mais son nom...
 
"... = " & "'" & Replace([Forms]![CPS_ProductSearch_5GroupProd]![PRODUCT_DESCRIPTION_form], "'", "''" ) & "'" & "..."

Message cité 1 fois
Message édité par Arjuna le 21-07-2006 à 10:52:15
Reply

Marsh Posté le 21-07-2006 à 10:58:48    

soit dit en passant tu peux tres bien generer un excel a partir d une requete (deja enregistree dans tes requetes) depuis le VBA access avec la fonction  
DoCmd.TransferSpreadsheet acExport, , "nomrequete", "cheminfichierexcel.xls", False, ""

Message cité 1 fois
Message édité par betsamee le 21-07-2006 à 10:59:34
Reply

Marsh Posté le 21-07-2006 à 11:17:22    

Reply

Marsh Posté le 21-07-2006 à 11:36:48    

Arjuna a écrit :

normal.
là tu mets pas la valeur de ton champs, mais son nom...
 
"... = " & "'" & Replace([Forms]![CPS_ProductSearch_5GroupProd]![PRODUCT_DESCRIPTION_form], "'", "''" ) & "'" & "..."


Excuses-moi mais j'ai pas compris ta remarque je crois..
![PRODUCT_DESCRIPTION_form] c'est une variable que je récupère dans mon formulaire, seulement je ne crois pas que VBA récupère celle-ci automatiquement comme le fait access..
 

betsamee a écrit :

soit dit en passant tu peux tres bien generer un excel a partir d une requete (deja enregistree dans tes requetes) depuis le VBA access avec la fonction  
DoCmd.TransferSpreadsheet acExport, , "nomrequete", "cheminfichierexcel.xls", False, ""


Non je peux pas faire ça, je dois faire une présentation assez complexe.

Message cité 1 fois
Message édité par Big-Foot le 21-07-2006 à 11:38:34
Reply

Marsh Posté le 21-07-2006 à 11:39:06    

tu mets un nom de variable VB (le champs) dans une chaîne de caractère (requête SQL). normal que ça ne marche pas. il faut mettre la valeur à la place.

Reply

Marsh Posté le 21-07-2006 à 11:39:06   

Reply

Marsh Posté le 21-07-2006 à 11:55:18    

Arjuna a écrit :

t pas drôle :o


je sais [:petrus75]
 
 

Big-Foot a écrit :


Non je peux pas faire ça, je dois faire une présentation assez complexe.


tu as un moyen de mettre un modele de document excel quelque part je me rappelle plus exactement mais je sais que je le faisais

Reply

Marsh Posté le 21-07-2006 à 13:29:38    

Arjuna a écrit :

tu mets un nom de variable VB (le champs) dans une chaîne de caractère (requête SQL). normal que ça ne marche pas. il faut mettre la valeur à la place.


Ok mais pour récupérer cette variable du formulaire je fais comment sous vba ?
 

betsamee a écrit :

je sais [:petrus75]
 
tu as un moyen de mettre un modele de document excel quelque part je me rappelle plus exactement mais je sais que je le faisais


 
Ah? Ca c'est intéressant, tu peux m'en dire plus ?
Ce que j'ai fait moi, c'est que j'édite un document "template" avec ma méthode.

Reply

Marsh Posté le 21-07-2006 à 13:53:33    

Big-Foot a écrit :

Ok mais pour récupérer cette variable du formulaire je fais comment sous vba ?
 
 
 
Ah? Ca c'est intéressant, tu peux m'en dire plus ?
Ce que j'ai fait moi, c'est que j'édite un document "template" avec ma méthode.


je te repond dimanche je serais devant le code que j avais pondu

Reply

Marsh Posté le 25-07-2006 à 20:15:02    

Pour utiliser ta requete directement enregistré, si y'a une valeur qui vient d'un formulaire, il faut utiliser des requetes paramétrées.
ex:
set rp = currentdb.querydefs("nomrequete" )
rp![[forms]![nomform]![nomchamp]]=[forms]![nomform]![nomchamp]
set req=rp.openrecordset

Reply

Marsh Posté le 28-07-2006 à 12:53:02    

aenor a écrit :

Pour utiliser ta requete directement enregistré, si y'a une valeur qui vient d'un formulaire, il faut utiliser des requetes paramétrées.
ex:
set rp = currentdb.querydefs("nomrequete" )
rp![[forms]![nomform]![nomchamp]]=[forms]![nomform]![nomchamp]
set req=rp.openrecordset


En fait en attendant j'ai un peu contourné le problème: j'ai transformer ma requête de selection,en une requête de création de table. Après je tape une requête de selection dans mon script et voilà.
Le seul problème c'est que j'ai des messages qui me signalent que je crée une table etc...
Mais bon ça passe, et les gens qui m'ont demandé ça n'y voit pas d'inconvenient.  [:airforceone]  
 
Mais merci pour la réponse! Ca va sûrement me servir une fois, et puis ça va probablement aussi dépanner des gens à la recherche de cette infos.

Reply

Marsh Posté le 02-08-2006 à 18:46:05    

Bonsoir,
une adrese pour les messages:
http://faq.vb.free.fr/index.php?question=78
Cordialement

Reply

Marsh Posté le 07-08-2006 à 18:44:19    

Big-Foot a écrit :

En fait en attendant j'ai un peu contourné le problème: j'ai transformer ma requête de selection,en une requête de création de table. Après je tape une requête de selection dans mon script et voilà.
Le seul problème c'est que j'ai des messages qui me signalent que je crée une table etc...
Mais bon ça passe, et les gens qui m'ont demandé ça n'y voit pas d'inconvenient.  [:airforceone]  
 
Mais merci pour la réponse! Ca va sûrement me servir une fois, et puis ça va probablement aussi dépanner des gens à la recherche de cette infos.


 
pour enlever les messages : docmd.setwarnings false

Reply

Marsh Posté le 07-08-2006 à 20:55:54    

oki merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed