Transférer le contenu d'une zone rtf vers ms word

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 714 fois - Téléchargée 27 fois

Contenu du snippet

Le principe est assez simple : il suffit de copier l'info du RTF dans le Clipboard et de coller le tout dans la feuille Word (fonctionne très bien avec Excel). J'ai mis deux semaines à trouver toutes les infos mais aujourd'hui cela fonctionne très bien :)

Source / Exemple :


-> Dans un fichier module.bas, copier le code suivant :
Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function RegisterClipboardFormat Lib "user32" Alias _
    "RegisterClipboardFormatA" (ByVal lpString As String) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function CloseClipboard Lib "user32" () As Long
Public Declare Function SetClipboardData Lib "user32" ( _
    ByVal wFormat As Long, ByVal hMem As Long) As Long
Public Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
    ByVal dwBytes As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    ByVal Destination As Long, Source As Any, ByVal Length As Long)
Public Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Public Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Public Declare Function GlobalFree Lib "kernel32" ( _
     ByVal hMem As Long) As Long

Public Const GMEM_DDESHARE = &H2000
Public Const GMEM_MOVEABLE = &H2

-> Derrière un bouton de commande, copiez le code suivant :
Dim sRTF As String
sRTF = RTF21.RTFtext   '<-- Ton contrôle RTF

'Copie le contenu de ta zone RTF dans la memoire du PC...
Dim lSuccess As Long
Dim lRTF As Long
Dim hGlobal As Long
Dim lpString As Long
lSuccess = OpenClipboard(Me.hwnd)
lRTF = RegisterClipboardFormat("Rich Text Format")
lSuccess = EmptyClipboard
hGlobal = GlobalAlloc(GMEM_MOVEABLE Or GMEM_DDESHARE, Len(sRTF))
lpString = GlobalLock(hGlobal)

CopyMemory lpString, ByVal sRTF, Len(sRTF)
GlobalUnlock hGlobal
SetClipboardData lRTF, hGlobal
CloseClipboard
GlobalFree hGlobal

'...et colle le tout dans la cilbe choisie : ici Word
Dim oWord As Object
Dim oDoc As Object
Set oWord = CreateObject("word.application")
Set oDoc = oWord.Documents.Add

With oWord
    With .Selection
        .TypeText "CECI EST UN TEST" & Chr(11) & " ET C'EST TANT MIEUX"
        .TypeText vbCrLf & vbCrLf
        .Paste
        .TypeText vbCrLf & vbCrLf
        .TypeText "Bon courage !"
    End With
    .Visible = True
End With

A voir également

Ajouter un commentaire Commentaires
Messages postés
18
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
15 avril 2010

Bonjour à Tous
moi, je travail pour l'impression sans utiliser ni word ni excel mais avec datareport
j'ai passer des mois à trouver la solution jusqu'à ce que j'ai trouver la solution ici dans vbfrance.
la voici:

le truc c'est dans la ligne ALMAHI JAMAL et dans BONJOUR



Option Explicit
Dim CN As New ADODB.Connection
Dim RS As New ADODB.Recordset
Dim CMD As New ADODB.Command

Private Sub Form_Load()
Command1.Caption = "Show Report"
CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\Temp.mdb;"
With CMD
.ActiveConnection = CN
.CommandType = adCmdText
.CommandText = "Select Nom, PrixV from Produit"
.Execute
End With
With RS
.ActiveConnection = CN
.CursorLocation = adUseClient
.Open CMD
End With
End Sub

Private Sub Command1_Click()
DataReport1.Hide
Set DataReport1.DataSource = RS
DataReport1.DataMember = ""
DataReport1.Sections("Section2").Controls.Item("Label1").Caption = "ALMAHI JAMAL"
DataReport1.Sections("Section2").Controls.Item("Label2").Caption = "BONJOUR"
DataReport1.Refresh
DataReport1.Show
End Sub

Private Sub Command2_Click()
End
End Sub
Messages postés
256
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
20 mars 2013
1
Cela va surement m'aider à améliorer mon code !

N'étant pas aussi assidu de ce qui se passe sur le site VBFrance serait il possible de poster une indication sur ce post afin d'indiquer lorsque tu aura poster ta source ?

Merci d'avance !

Olivier
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
je posterais un truc, sur VbFrance, tout le monde en profitera ainsi...
Messages postés
256
Date d'inscription
jeudi 23 octobre 2003
Statut
Membre
Dernière intervention
20 mars 2013
1
En effet cela est un réel avantage !

Peux-tu m'envoyer un petit exemple afin que j'améliore mon code ?

oguillet@wesper.com

Merci

Olivier
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
70
ah oui, on n'emploie pas du tout la même tactique ^^

oui, bien sur, on peux crée un fichier Word/excel....
on sais piloter Word/Excel depuis VB...

outre la rapidité, ma technique a l'avantage de ne pas nécessiter Word sur le poste ^^
Afficher les 13 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.