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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [WORD, ACCESS]Lié des requêtes SQL à l'aide d'une macro sous word

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[WORD, ACCESS]Lié des requêtes SQL à l'aide d'une macro sous word

n°1567735
MarsVolta
Posté le 31-05-2007 à 11:28:06  profilanswer
 

Bonjour à tous,
 
Voilà mon problème. J'ai des requêtes SQl sous access et je voudrais pouvoir créer une macro sous word qui affiche ces mêmes requêtes dans un modèle word. Les requêtes doivent pouvoir s'afficher dans le même document et les informations se placer dans un ordre définis afin que le document soit clair.
 
J'ai essayé d'exporter les requêtes avec l'assistant d'access et de faire un publipostage sous word en enregistrant la macro mais le problème c'est que je ne peux pas afficher plusieurs requêtes sur un même document.
 
Voilà si vous pourriez me renvoyer la démarche à suivre.
 
Merci d'avance pour vos réponses


Message édité par MarsVolta le 31-05-2007 à 11:39:14
mood
Publicité
Posté le 31-05-2007 à 11:28:06  profilanswer
 

n°1567884
jpcheck
Pioupiou
Posté le 31-05-2007 à 13:44:10  profilanswer
 

1/ ajouter les références access dans ton projet word
2/ ouvrir la base depuis word :
dim db as database
set db = opendatabase("C:\monrepertoire\madb.mdb" )
 
3/ rédiger les requetes sql au format string
dim ReqSQL as String
ReqSQL = "SELECT * FROM MaTable;"
 
4/ exécuter les requêtes et récupérer les recordsets
dim RS as RecordSet
Set RS = db.Openrecordset (ReqSQL)
 
5/ dispatcher les champs comme bon te semble
Txt1.value = RS!Champs1
 
etc. :)

n°1567901
MarsVolta
Posté le 31-05-2007 à 13:56:02  profilanswer
 

Merci beaucoup pour ta réponse rapide mais quand tu dis "ajouter les références access dans ton projet word" ça veut dire quoi ?
 
Quand je tape mon code dans visual basic de word il me dit que le type database n'est pas reconnu ? tu sais d'ou ça vient ?? <---- Problème résolu il fallait que j'active la bibliotheque.
 
Par contre il me dit qu'il y a un erreur de type pour ça :
 
dim RS as RecordSet  
Set RS = db.Openrecordset (ReqSQL)  
 
Et dernière question tu fais comment pour dispatcher les champs parce que je vois pas comment définir les champs dans word afin que la macro les reconnaisse et ainsi attribuer chaque champs de ma requête à un champ word  :D  
 
Merci d'avance pour ton aide.


Message édité par MarsVolta le 31-05-2007 à 14:24:37
n°1567940
jpcheck
Pioupiou
Posté le 31-05-2007 à 14:31:38  profilanswer
 

la réponse à la question 1 est ta résolution de la question 2 (référence biblio c pareil ^^)
 
ajoute aussi la référence DAO 3.X  
 
pour les champs ben ca dépend ton récipient final mais en gros tu accèdes au champsX d'un recordset par recordset!champsX

n°1567967
MarsVolta
Posté le 31-05-2007 à 14:42:23  profilanswer
 

Oki merci je vais essayer de bidouiller mon modèle word par contre la référence DAO 3.X n'y est pas  :pt1cable: si j'ai trouvé la référence Microsoft DAO 3.6. Je te passe mon code
 
Sub test2()
Dim db As Database
Set db = opendatabase("D:\Documents and Settings\xmartin\Mes documents\db1.mdb" )
 
Dim ReqSQL As String
ReqSQL = "SELECT SES_COD, SES_DATARR FROM SES WHERE SES_COD BETWEEN 0 AND 2;"
 
Dim RS As RecordSet
Set RS = db.Openrecordset(ReqSQL)
 
Numéro.Value = RS!SES_COD
Date.Value = RS!SES_DATARR
End Sub
 
Mais j'ai toujours un problème de type avec la ligne Set RS = db.Openrecordset(ReqSQL)
 
Encore merci pour tout ;)


Message édité par MarsVolta le 31-05-2007 à 15:10:42
n°1568160
jpcheck
Pioupiou
Posté le 31-05-2007 à 17:21:38  profilanswer
 

essaies avec dim RS as DAO.RecordSet

n°1568207
MarsVolta
Posté le 31-05-2007 à 17:44:16  profilanswer
 


Merci pour le conseil mais ça me renvois une nouvelle erreur  
"Vous avez fait référence à une propriété ou une méthode d'objet, mais n'avez pas fourni de qualificateur d'objet correct.  
Spécifiez un qualificateur d'objet si vous ne l'avez pas fait. Par exemple, bien que vous puissiez omettre un qualificateur d'objet lors de la référence à une propriété de formulaire à partir du module du formulaire, vous devez explicitement spécifier le qualificateur lors d'une référence à la propriété à partir d'un module standard." C'est l'erreur 424
 
J'ai l'impression que ça vient du fait que ma requête a un type String et elle renvoit des nombres serait ce possible ? si uih que faut t'il faire pour convertir le string en integer ?
Sachant que la requete renvoit un nombre et une date...
 
Merci d'avance

n°1568243
jpcheck
Pioupiou
Posté le 31-05-2007 à 18:10:37  profilanswer
 

l'erreur pour le RS, est-ce parce que la requete est bonne mais RS foire ou bien est-ce que la requete est fausse ?

n°1568299
MarsVolta
Posté le 31-05-2007 à 19:59:21  profilanswer
 

C'est parce que le RS est faux ça ne me renvois même pas la requête :(
 
Enfait j'ai l'impression que les champs dans le document word ne sont pas reconnus dans le VB tu les mets comment dans word ?
 
j'ai mis  
Numéro.Value = RS!SES_COD  
Date.Value = RS!SES_DATARR  
dans le VB
 
et dans le doc word "Numéro" et "Date" .
 
Merci d'avance


Message édité par MarsVolta le 01-06-2007 à 09:31:24
n°1568455
tegu
Posté le 01-06-2007 à 10:50:13  profilanswer
 

Ton champ nommé « Date » peut éventuellement poser problème puisqu'en VBA il s'agit d'un type de données.

mood
Publicité
Posté le 01-06-2007 à 10:50:13  profilanswer
 

n°1568478
MarsVolta
Posté le 01-06-2007 à 11:16:56  profilanswer
 

Merci pour ta proposition mais ça n'a pas l'air de venir de ça :(

n°1568519
jpcheck
Pioupiou
Posté le 01-06-2007 à 11:59:48  profilanswer
 

tu peux nous faire un screenshot de tes tables stp ?

n°1568596
MarsVolta
Posté le 01-06-2007 à 14:01:05  profilanswer
 

si un modo pouvait supprimer ce message s'il vous plait...


Message édité par MarsVolta le 01-06-2007 à 14:41:52
n°1568613
jpcheck
Pioupiou
Posté le 01-06-2007 à 14:27:11  profilanswer
 

pardon, je me suis mal exprimé => peut-on avoir un screenshot de ta table SES stp  :pt1cable:

n°1568628
MarsVolta
Posté le 01-06-2007 à 14:40:07  profilanswer
 

http://img175.imageshack.us/img175/7303/table1ga5.th.png
 
Voilà merci de t'occuper de mon cas

n°1568666
jpcheck
Pioupiou
Posté le 01-06-2007 à 15:13:00  profilanswer
 

euh, ton SES_COD est-ce qu'il est déclaré comme numérique ou comme texte stp ?

n°1568684
MarsVolta
Posté le 01-06-2007 à 15:27:23  profilanswer
 

Euh dans mon code je n'ai pas déclaré SES_COD ni SES_DATARR
 
Même en les déclarant de cette manière :
Dim SES_COD As Integer
Dim SES_DATARR As Date, ça ne marche pas.  
 
Le problème c'est qu'il ne sait pas où renvoyer les valeurs de la requetes j'ai essayé en faisant :
Worksheets(1).Range("Numero" ) = RS!SES_COD
Worksheets(1).Range("Crea" ) = RS!SES_DATARR
 
mais il me dit : "tableau attendu" alors que sur le modèle word, un tableau est créé avec comme valeur dans la première colonne "Numero" et dans la deuxieme"Crea".
 
:(


Message édité par MarsVolta le 01-06-2007 à 15:49:24
n°1568713
jpcheck
Pioupiou
Posté le 01-06-2007 à 16:37:44  profilanswer
 

non mais ne cherche pas à créer des éléments dans ta fonction tu dois te limiter ici à  
1/ la database
2/ la requete
3/ le recordset
4/ éventuellement les variables de  récupération des champs.

n°1568717
MarsVolta
Posté le 01-06-2007 à 16:45:58  profilanswer
 

Ok je cherche désesperement la solution ^^
 
Sinon j'ai trouvé ça :
 
Private Sub BtExecut_Click()
Dim WordApp As Word.Application
Dim Box As Word.Shape
Dim ReqSQL As String
Dim RS As DAO.Recordset
Dim db As Database
Set WordApp = GetObject(, "Word.Application" )
       
    Set db = OpenDatabase("C:\monicess.mdb" )
    ReqSQL = "SELECT SES_COD, SES_DATARR FROM SES WHERE SES_COD BETWEEN 0 AND 2;"
 
    Set Box = WordApp.ActiveDocument.Shapes.AddShape(1, 5, 10, 100, 100)
    Set RS = db.OpenRecordset(ReqSQL)
     
     
     
    Box.TextFrame.TextRange.Text = RS!SES_COD & " " & " " & RS!SES_DATARR
End Sub
 
Alors cette fois ça me renvois un résultat  :D  sur ma feuille Word mais ça ne m'en renvois qu'un seul alors que la requête rapporte deux résultats.  :fou:


Message édité par MarsVolta le 01-06-2007 à 16:51:21
n°1568722
jpcheck
Pioupiou
Posté le 01-06-2007 à 16:51:25  profilanswer
 

Que te donne ca ?
 
 

Code :
  1. Dim db As Database
  2. Dim ReqSQL As String
  3. Dim RS As RecordSet
  4. Set db = Opendatabase("D:\Documents and Settings\xmartin\Mes documents\db1.mdb" )
  5. ReqSQL = "SELECT SES_COD, SES_DATARR FROM SES WHERE SES_COD BETWEEN 0 AND 2;"
  6. Set RS = db.Openrecordset(ReqSQL)
  7. msgbox Rs.Recordcount


 
?

n°1568732
MarsVolta
Posté le 01-06-2007 à 17:11:45  profilanswer
 

Alors ça me renvois un textbox avec le SES_COD mais 1 seul il manque donc SES_DATARR et le 2eme résultat avec le SES_Cod et la SES_DATARR
 
Je comprends pas un Recordcount doit me renvoyer le nombre d'enregistrement auquel j'ai accé mais quand j'execute la requête sous Access j'ai bien 2 enregistrements !!


Message édité par MarsVolta le 01-06-2007 à 17:16:23
n°1568771
tegu
Posté le 01-06-2007 à 18:34:42  profilanswer
 

Un recordset est un container d'enregistrements, comme une table.
Tu t'attendais à avoir accès à tous les champs de tous tes enregistrements sans rien faire ?
 
Regarde sur ce forum les messages relatifs à l'utilisation d'un recordset.
Tu trouveras facilement de la doc sur le web aussi.
 
Tu dois parcourir ce recordset pour lire les champs enregistrement par enregistrement.

n°1569277
MarsVolta
Posté le 03-06-2007 à 13:52:55  profilanswer
 

Bon bah merci pour l'astuce je vais voir ça ^^

n°1569943
MarsVolta
Posté le 04-06-2007 à 17:29:57  profilanswer
 

C'est tout bonj'arrive à afficher tout les résultats de la requête grâce à l'utilisation d'une boucle.
 
Encore merci à tous pour votre aide ^^


Message édité par MarsVolta le 04-06-2007 à 17:30:33
mood
Publicité
Posté le   profilanswer
 


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

  [WORD, ACCESS]Lié des requêtes SQL à l'aide d'une macro sous word

 

Sujets relatifs
Aide pour une expression régulièreDe l'aide svp
[Résolu] Créer macro importé un .csv dans excelAIDE
besoin d'aide pour creation textbox et label en dynamiqueMacro excel pour traitement fichier word
Problème de requetes imbriquéesIntérroger base Access
Aide pour la creation d'un fichier .bat 
Plus de sujets relatifs à : [WORD, ACCESS]Lié des requêtes SQL à l'aide d'une macro sous word


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