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

Lié des requêtes SQL à l'aide d'une macro sous word [WORD, ACCESS] - VB/VBA/VBS - Programmation

Marsh Posté le 31-05-2007 à 11:28:06    

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
Reply

Marsh Posté le 31-05-2007 à 11:28:06   

Reply

Marsh Posté le 31-05-2007 à 13:44:10    

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. :)

Reply

Marsh Posté le 31-05-2007 à 13:56:02    

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
Reply

Marsh Posté le 31-05-2007 à 14:31:38    

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

Reply

Marsh Posté le 31-05-2007 à 14:42:23    

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
Reply

Marsh Posté le 31-05-2007 à 17:21:38    

essaies avec dim RS as DAO.RecordSet

Reply

Marsh Posté le 31-05-2007 à 17:44:16    


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

Reply

Marsh Posté le 31-05-2007 à 18:10:37    

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 ?

Reply

Marsh Posté le 31-05-2007 à 19:59:21    

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
Reply

Marsh Posté le 01-06-2007 à 10:50:13    

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

Reply

Marsh Posté le 01-06-2007 à 10:50:13   

Reply

Marsh Posté le 01-06-2007 à 11:16:56    

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

Reply

Marsh Posté le 01-06-2007 à 11:59:48    

tu peux nous faire un screenshot de tes tables stp ?

Reply

Marsh Posté le 01-06-2007 à 14:01:05    

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


Message édité par MarsVolta le 01-06-2007 à 14:41:52
Reply

Marsh Posté le 01-06-2007 à 14:27:11    

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

Reply

Marsh Posté le 01-06-2007 à 14:40:07    

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

Reply

Marsh Posté le 01-06-2007 à 15:13:00    

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

Reply

Marsh Posté le 01-06-2007 à 15:27:23    

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
Reply

Marsh Posté le 01-06-2007 à 16:37:44    

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.

Reply

Marsh Posté le 01-06-2007 à 16:45:58    

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
Reply

Marsh Posté le 01-06-2007 à 16:51:25    

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


 
?

Reply

Marsh Posté le 01-06-2007 à 17:11:45    

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
Reply

Marsh Posté le 01-06-2007 à 18:34:42    

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.

Reply

Marsh Posté le 03-06-2007 à 13:52:55    

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

Reply

Marsh Posté le 04-06-2007 à 17:29:57    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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