Exporter vers word le résultat d' une requete.

Résolu
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 21 sept. 2008 à 21:21
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 22 sept. 2008 à 01:04
Salut,


Voilà ce qui marche:


Depuis vb6, j' insère des données dans une feuille Excel
avec la méthode CopyFromRecordset.
Exemple:
'-------------------------------------------------------------
Public Sub TO_EXCEL(sPath as string,sQuery As String,sDoc As String)


    Dim sDb As Database
    Set sDb = DBEngine.Workspaces(0).OpenDatabase(sPath)


    Dim rs As Recordset
    Set rs = sDb.OpenRecordset(sQuery, dbOpenDynaset)
       
     'variables classeur Excel
         Dim appExcel As Excel.Application 'Application Excel
         Dim wbExcel As Excel.Workbook  'Classeur Excel
         Dim wsExcel As Excel.Worksheet 'Feuille Excel
       
     'Ouverture de l' application
        Set appExcel = CreateObject("Excel.Application")
     'Ouverture d'un fichier Excel
        Set wbExcel = appExcel.Workbooks.Open(sDoc)
     'wsExcel correspond à la première feuille du fichier
        Set wsExcel = wbExcel.Worksheets(1)
  
        wsExcel.Cells(4, 2) = "LISTE DES INSCRITS"
    
     'copie des données
       wsExcel.Range("A6").CopyFromRecordset rs
      


 '...Imprimer
 '...Fermer...
 
End Sub


'-------------------------------------------------------------
Voici ce que je voudrais faire:


Depuis vb6, insèrer des données dans un document word
de la même manière..
Exemple:
---------------------------------------------------------------
Public Sub TO_WORD(sPath as string,sQuery As String,sDoc As String)


    Dim sDb As Database
    Set sDb = DBEngine.Workspaces(0).OpenDatabase(sPath)


    Dim rs As Recordset
    
    Set rs = sDb.OpenRecordset(sQuery, dbOpenDynaset)
   
    'variables Word
     Dim ObjWord As New Word.Application
     ObjWord.Documents.Open sDoc


    'copie des données  
    'QU' EST-CE QUI MANQUE ICI ?
     wbWord.? rs


 
 '...Imprimer
 '...Fermer...
 
End Sub
'------------------------------------------------------------------------


Quelqu' un a une idée ?
Merci.

  
<hr />


[] Ce qui va sans dire. va mieux en le disant.


<hr />

8 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
21 sept. 2008 à 23:03
A excuse
Mais j'avais pas compris que c'est juste le code recordset que tu cherchais
Je croyais que c'est un code pour remplir du word (j'ai lu le post en diagonale)
C'est pas la peine réécrire le code source de la source ;-)

Il faut surement lire le recordset à la main pour remplir un tableau
Car word n'est pas comme excel (les tableaux ne sont pas fait pour gérer les recordsets)

Bon courage
3
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 sept. 2008 à 22:20
Allez les gars, soyez sympas !
J' ai le curseur qui clignote.
Prêt à rebondir sur vos suggestions.
Je suis même prêt à faire des concessions.
Disons que j' accepte un code sur trois lignes.
Mais pas plus, hé !


PS: la fusion, j' ai déjà essayé.Et elle marche elle aussi.
Et J' ai déjà un code avec les signets. 
       
<hr />


[] Ce qui va sans dire. va mieux en le disant.


<hr />
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
21 sept. 2008 à 22:30
Salut,

Sois pas si pressé çà donne pas envie de repondre ;-)
et une simple recherche sur vbfrance --> http://www.vbfrance.com/codes/PILOTAGE-WORD-VB_5120.aspx

Tu dois avoir l'habitude de cs avec le nombre de message que tu postes ;-)
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 sept. 2008 à 22:51
Salut,
Disons que mon deuxièùe post était un complément d' information
dans lequel j' expliquais que je voulais un code simple et spécifique.
Et voici le contenu de ton lien:
'-----------------------------------------------------------------------
'Enonciation des variables
Dim docword As New Word.Application
Private Sub Command1_Click()
'ouvre Word
Set docword = CreateObject("word.application")
'True pour word visible et false pour le mettre en arrière plan
    docword.Visible = True
    docword.DisplayAlerts = False   'évite les erreurs de traitement
    docword.Documents.Add 'ajoute un document vierge
'on va écrire
    docword.Selection.TypeText Text:="Comment piloter Word97"
'faire un tabulation
    docword.Selection.TypeText Text:=vbTab
   
'revenir à la ligne
    docword.Selection.TypeParagraph
'sauter une ligne
    docword.Selection.TypeParagraph
    docword.Selection.TypeParagraph
   
'zoomer
    docword.ActiveWindow.ActivePane.View.Zoom.Percentage = 100
   
'mise en forme
'ATTENTION un petit conseil mes petits amis, c'est de d'abord mettre le format
'avant de d'insérer le texte donc si vous avez bien compris vous faites :
'docword.selection.paragraphformat.alignement = wdalignparagraphcenter
'docword.selection.typetext text:="blablabla"
'centré
    docword.Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
'aligné à gauche
    docword.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
'justifié
    docword.Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify
'aligné à droite
    docword.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
'mettre le texte en souligné
    If docword.Selection.Font.Underline = wdUnderlineNone Then
        docword.Selection.Font.Underline = wdUnderlineSingle
    Else
        docword.Selection.Font.Underline = wdUnderlineNone
    End If
   
'changer la taille de la police
    docword.Selection.Font.Size = xx 'xx est une valeur numérique
   
'changer la police
    docword.Selection.Font.Name = "Arial"
'mettre en gras
    docword.Selection.Font.Bold = wdToggle
 
'mettre en italique
    docword.Selection.Font.Italic = wdToggle
'souligner le texte
    If docword.Selection.Font.Underline = wdUnderlineNone Then
        docword.Selection.Font.Underline = wdUnderlineSingle
    Else
        docword.Selection.Font.Underline = wdUnderlineNone
    End If
'changer la couleur de la police
    docword.Selection.Font.ColorIndex = wdRed 'ici en rouge
    docword.Selection.Font.ColorIndex = wdAuto 'ici en couleur automatique
   
'changer la couleur de fond du document
    docword.ActiveDocument.Background.Fill.ForeColor.RGB = RGB(xxx, xxx, xxx)
    'où xxx est une valeur comprise en 0 et 255 (256 couleurs)
    docword.ActiveDocument.Background.Fill.Visible = msoTrue
    docword.ActiveDocument.Background.Fill.Solid
'INSERER UN OBJET
'insérer une image à partir du fichier
    docword.Selection.InlineShapes.AddPicture FileName:="C:\cool.bmp", _
        LinkToFile:=False, SaveWithDocument:=True
'insérer un graphique type EXCEL
    docword.ActiveDocument.Shapes.AddOLEObject Anchor:=Selection.Range, _
        ClassType:="MSGraph.Chart.8", LinkToFile:=False, DisplayAsIcon:=False
'insérer un graphique à partir d'un fichier EXCEL existant
    docword.ActiveDocument.Shapes.AddOLEObject ClassType:= _
        "MSGraph.Chart.8", FileName:="c:\cool.xls", LinkToFile:=False, _
        DisplayAsIcon:=False, Left:=xxx, Top:=xxx 'xxx est une valeur numérique
'linktofile:=True permet d'ouvrir le fichier EXCEL lorsque vous double-cliquez sur
'le graphique.
'left, top, ainsi que height et width définisse la position et la taille du graph
'insérer un WORDART
    docword.ActiveDocument.Shapes.AddTextEffect(msoTextEffect28, "COOL", _
        "Impact", 36#, msoFalse, msoFalse, 261.35, 157.5).Select
'insérer un tableau
    docword.ActiveDocument.Tables.Add Range:=Selection.Range, _
    NumRows:=2, NumColumns:=2
    'pour écrire dans le tableau utiliser le typetext à la suite
    'de cette fonction. Pour se déplacer, utiliser :
    docword.Selection.MoveRight Unit:=wdCell
    docword.Selection.MoveUp Unit:=wdLine, Count:=1
    docword.Selection.MoveDown Unit:=wdLine, Count:=1
   
'insérer un lien hypertexte
    docword.ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
        "http://www.cool.com/", SubAddress:=""
       
'effacer l'objet insérer
    docword.Selection.ShapeRange.Delete
   
'insérer la date
    docword.Selection.InsertDateTime DateTimeFormat:="jjjj j MMMM aaaa", _
        InsertAsField:=False
   
'insérer un signet
    With docword.ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:="cool"
        .DefaultSorting = wdSortByLocation
                            'ou = wdsortbyname -> indexer par nom
        .ShowHidden = False
    End With
   
'enregistrer le document sous cool.doc
    docword.ActiveDocument.SaveAs FileName:="c:\cool.doc"
'quitter word
    docword.Application.Quit
End Sub
'Enonciation des variables
Dim docword As New Word.Application


Private Sub Command1_Click()


'ouvre Word
Set docword = CreateObject("word.application")


'True pour word visible et false pour le mettre en arrière plan
    docword.Visible = True


    docword.DisplayAlerts = False   'évite les erreurs de traitement
    docword.Documents.Add 'ajoute un document vierge


'on va écrire
    docword.Selection.TypeText Text:="Comment piloter Word97"


'faire un tabulation
    docword.Selection.TypeText Text:=vbTab
   
'revenir à la ligne
    docword.Selection.TypeParagraph
'sauter une ligne
    docword.Selection.TypeParagraph
    docword.Selection.TypeParagraph
   
'zoomer
    docword.ActiveWindow.ActivePane.View.Zoom.Percentage = 100
   
'mise en forme
'ATTENTION un petit conseil mes petits amis, c'est de d'abord mettre le format
'avant de d'insérer le texte donc si vous avez bien compris vous faites :
'docword.selection.paragraphformat.alignement = wdalignparagraphcenter
'docword.selection.typetext text:="blablabla"


'centré
    docword.Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
'aligné à gauche
    docword.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
'justifié
    docword.Selection.ParagraphFormat.Alignment = wdAlignParagraphJustify
'aligné à droite
    docword.Selection.ParagraphFormat.Alignment = wdAlignParagraphRight


'mettre le texte en souligné
    If docword.Selection.Font.Underline = wdUnderlineNone Then
        docword.Selection.Font.Underline = wdUnderlineSingle
    Else
        docword.Selection.Font.Underline = wdUnderlineNone
    End If
   
'changer la taille de la police
    docword.Selection.Font.Size = xx 'xx est une valeur numérique
   
'changer la police
    docword.Selection.Font.Name = "Arial"


'mettre en gras
    docword.Selection.Font.Bold = wdToggle
 
'mettre en italique
    docword.Selection.Font.Italic = wdToggle


'souligner le texte
    If docword.Selection.Font.Underline = wdUnderlineNone Then
        docword.Selection.Font.Underline = wdUnderlineSingle
    Else
        docword.Selection.Font.Underline = wdUnderlineNone
    End If


'changer la couleur de la police
    docword.Selection.Font.ColorIndex = wdRed 'ici en rouge
    docword.Selection.Font.ColorIndex = wdAuto 'ici en couleur automatique
   
'changer la couleur de fond du document
    docword.ActiveDocument.Background.Fill.ForeColor.RGB = RGB(xxx, xxx, xxx)
    'où xxx est une valeur comprise en 0 et 255 (256 couleurs)
    docword.ActiveDocument.Background.Fill.Visible = msoTrue
    docword.ActiveDocument.Background.Fill.Solid


'INSERER UN OBJET
'insérer une image à partir du fichier
    docword.Selection.InlineShapes.AddPicture FileName:="C:\cool.bmp", _
        LinkToFile:=False, SaveWithDocument:=True


'insérer un graphique type EXCEL
    docword.ActiveDocument.Shapes.AddOLEObject Anchor:=Selection.Range, _
        ClassType:="MSGraph.Chart.8", LinkToFile:=False, DisplayAsIcon:=False
'insérer un graphique à partir d'un fichier EXCEL existant
    docword.ActiveDocument.Shapes.AddOLEObject ClassType:= _
        "MSGraph.Chart.8", FileName:="c:\cool.xls", LinkToFile:=False, _
        DisplayAsIcon:=False, Left:=xxx, Top:=xxx 'xxx est une valeur numérique
'linktofile:=True permet d'ouvrir le fichier EXCEL lorsque vous double-cliquez sur
'le graphique.
'left, top, ainsi que height et width définisse la position et la taille du graph


'insérer un WORDART
    docword.ActiveDocument.Shapes.AddTextEffect(msoTextEffect28, "COOL", _
        "Impact", 36#, msoFalse, msoFalse, 261.35, 157.5).Select


'insérer un tableau
    docword.ActiveDocument.Tables.Add Range:=Selection.Range, _
    NumRows:=2, NumColumns:=2
    'pour écrire dans le tableau utiliser le typetext à la suite
    'de cette fonction. Pour se déplacer, utiliser :
    docword.Selection.MoveRight Unit:=wdCell
    docword.Selection.MoveUp Unit:=wdLine, Count:=1
    docword.Selection.MoveDown Unit:=wdLine, Count:=1
   
'insérer un lien hypertexte
    docword.ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
        "http://www.cool.com/", SubAddress:=""
       
'effacer l'objet insérer
    docword.Selection.ShapeRange.Delete
   
'insérer la date
    docword.Selection.InsertDateTime DateTimeFormat:="jjjj j MMMM aaaa", _
        InsertAsField:=False
   
'insérer un signet
    With docword.ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:="cool"
        .DefaultSorting = wdSortByLocation
                            'ou = wdsortbyname -> indexer par nom
        .ShowHidden = False
    End With
   
'enregistrer le document sous cool.doc
    docword.ActiveDocument.SaveAs FileName:="c:\cool.doc"


'quitter word
    docword.Application.Quit


End Sub
'-----------------------------------------------------------------------------


1° ce genre de code, j' en ai vu une vingtaine.
2° ça ne répond pas à ma question.
Peut être que je n' ai vu, mais je ne vois nulle part
une référence à un recordset.
Peux -tu me montrer ou c' est..
Merci.




 





<hr />




[] Ce qui va sans dire. va mieux en le disant.


<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 sept. 2008 à 23:18
"..Il faut surement lire le recordset à la main pour remplir un tableau..."


beh voilà déjà un début de réponse :-)

'insérer un tableau
    docword.ActiveDocument.Tables.Add Range:=Selection.Range, _
    NumRows:=2, NumColumns:=2

Ce n' est pas ce que je cherchais mais bon !

Je pourrais donc parcourir mon recordset dans une boucle
et insérer une à une toutes les lignes (avec une boucle imbriquée pour les colonnes).

En attendant une meilleure, merci en tout cas de l' info au sujet des tableaux et les recordsets.

Bonne fin de soirée.

<hr />

[] Ce qui va sans dire. va mieux en le disant.

<hr />
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
21 sept. 2008 à 23:31
En cherchant un peu plus
Je suis tomber
sur http://support.microsoft.com/kb/261999

extrait
' Execute a SQL statement to retrieve the information
Set oRS = oConn.Execute( _
"SELECT CustomerID, CompanyName, ContactName FROM Customers")
' Use GetString to return the recordset as a string
sTemp = oRS.GetString(adClipString, -1, vbTab)

' Insert a heading on the string
sTemp = "Customer ID" & vbTab & "Company Name" & _
vbTab & "Contact Name" & vbCrLf & sTemp
' Insert the data into the Word document
oRange.Text = sTemp
' Convert the text to a table and format the table
oRange.ConvertToTable vbTab, , , , wdTableFormatColorful2
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
21 sept. 2008 à 23:42
cool !
je cours de ce pas tester tout ça, mais à première vue ça ne doit être que ça.

Merci encore une fois de ce coup de pouce.
Comme quoi, il ne faut jamais désespèrer, même quand ça
s' annonce mal

Je te tiendrais au courant du résultat.

A+

<hr />

[] Ce qui va sans dire. va mieux en le disant.

<hr />
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
22 sept. 2008 à 01:04
Comme promis, voici une première adaptation du code extrait du Lien et qui marche.
'------------------------------------------------------------------------
Public Sub wExport(xIdClas As String)
   
    Dim sPath As String
    sPath = App.Path & "\Documents\Source\DB_IMPORT.mdb"
 
    Dim sBase As Database
    Set sBase = DBEngine.Workspaces(0).OpenDatabase(sPath)
   
    Dim sQuery As String
     sQuery = "SELECT [N Dossier], [Nom Francais], [Prenom Francais], [Date Naissance] " & _
                  "FROM INSCRITS"     sQuery sQuery & " WHERE Classe'" & xIdClas & "'"


    Dim oRs As Recordset
     'ouvrir la table
     Set oRs = sBase.OpenRecordset(sQuery, dbOpenDynaset)


 'PARTIE TIREE DU LIEN 
   ' Declare our variables
   Dim oWord As Word.Application
   Dim oDoc As Word.Document
   Dim oRange As Word.Range
   Dim sTemp As String
   ' Create an instance of Word
   Set oWord = CreateObject("Word.Application")
   ' Show Word to the user
   oWord.Visible = True
   ' Add a new, blank document
   Set oDoc = oWord.Documents.Add
   ' Get the current document's range object
   Set oRange = oDoc.Range


   ' Insert a heading on the string

 'ADAPTARION
  sTemp = "N Dossier" & vbTab & "Nom Francais" & vbTab & "Prenom Francais" & _
     vbTab & "Date Naissance" & vbCrLf & sTemp
  
   ' Insert the data into the Word document
 
   With oRs
       
        .MoveFirst
        Do While Not oRs.EOF 
             sTemp = sTemp & ![N Dossier] & vbTab & _
 ![Nom Francais] & vbTab & ![Prenom Francais] & _
             vbTab & ![Date Naissance] & vbCrLf
             oRs.MoveNext
        Loop
  
   End With
 
  oRange.Text = sTemp
   ' Convert the text to a table and format the table
   oRange.ConvertToTable vbTab, , , , wdTableFormatColorful2
 End Sub
 
NB: Bien que ça marche à la perfection, je reste intrigué par le fait que sTemp étant de type String, elle supporte quand même la concaténation d' un grand nombre d' enregistrements !

Autre remarque: Dans un premier test avec un code semblable à celui du lien, avec ADODB DONC, j' ai eu une erreur sur oRs.GetString .. (Méthode ou membre de donnée introuvable).

Si tu as une explication..

A+ et merci encore.
       

<hr />


[] Ce qui va sans dire. va mieux en le disant.


<hr />
0
Rejoignez-nous