Publipostage avec PJ (facile) sans perdre la mise en forme (+dur!)

Fusky

XLDnaute Junior
Bonjour,

J’ai trouvé sur le net un tuto pour faire du publipostage incluant des pieces jointes qui m'a beaucoup aidé.
Ici : Merging With Attachments

Le tuto est accompagné d’une macro qui marche très bien, à un détail près : la mise en forme de mon texte disparait !

Je vous explique :
  1. J’écris le corps de mon message, je le met en page (le tout sous word)
  2. Je lies ce fichier à ma base de donnée contenant noms, prénom, email et chemain d’accès du fichier à joindre
  3. Je lance la macro
  4. … et hop ! abracadabra, chacun de mes destinataires reçoivent un message personnalisé (cher Jean Toto, cher Pierre Dupond,…) contenant une pièce jointe personnalisé également.

Malheureusement le corps de l’email est totalement uniformisé (plus de gras, de bullet point,…) ! Je ne peux pas envoyer mes emails comme cela … (je n’essaye pas de vendre de solutions miracles pour « ENLARGE YOUR P… » rassurez vous )

Du haut de mon ignorance en programmation VBA j’imagine que la macro ci-dessous copie le texte que j’ai écris sous Word et le colle, tout bêtement, sous Outlook ce qui cause la perte de mise en forme. Y a-t-il une façon d’éviter cela d’après vous ?



Code:
Sub emailmergewithattachments()
Dim Source As Document, Maillist As Document, TempDoc As Document
Dim Datarange As Range
Dim i As Long, j As Long
Dim bStarted As Boolean
Dim oOutlookApp As Outlook.Application
Dim oItem As Outlook.MailItem
Dim mysubject As String, message As String, title As String
Set Source = ActiveDocument
' Check if Outlook is running.  If it is not, start Outlook
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
    Set oOutlookApp = CreateObject("Outlook.Application")
    bStarted = True
End If
' Open the catalog mailmerge document
With Dialogs(wdDialogFileOpen)
    .Show
End With
Set Maillist = ActiveDocument
' Show an input box asking the user for the subject to be inserted into the email messages
message = "Enter the subject to be used for each email message."    ' Set prompt.
title = " Email Subject Input"    ' Set title.
' Display message, title
mysubject = InputBox(message, title)
' Iterate through the Sections of the Source document and the rows of the catalog mailmerge document,
' extracting the information to be included in each email.
For j = 1 To Source.Sections.Count - 1
    Set oItem = oOutlookApp.CreateItem(olMailItem)
    With oItem
        .Subject = mysubject
        .Body = Source.Sections(j).Range.Text
        Set Datarange = Maillist.Tables(1).Cell(j, 1).Range
        Datarange.End = Datarange.End - 1
        .To = Datarange
        For i = 2 To Maillist.Tables(1).Columns.Count
            Set Datarange = Maillist.Tables(1).Cell(j, i).Range
            Datarange.End = Datarange.End - 1
            .Attachments.Add Trim(Datarange.Text), olByValue, 1
        Next i
        .Send
    End With
    Set oItem = Nothing
Next j
Maillist.Close wdDoNotSaveChanges
'  Close Outlook if it was started by this macro.
If bStarted Then
    oOutlookApp.Quit
End If
MsgBox Source.Sections.Count - 1 & " messages have been sent."
'Clean up
Set oOutlookApp = Nothing
End Sub


Merci d'avance
 

Fusky

XLDnaute Junior
Re : Publipostage avec PJ (facile) sans perdre la mise en forme (+dur!)

Bonjour DoubleZero,

J'avais déjà parcouru cette solution mais malheureusement elle ne semble pas adapté à mon cas de figure où le fichier joint varie systématiquement en fonction du destinataire (ici il faut relancer la macro pour changer le fichier).

Peut-être, et c'est la raison pour laquelle je suis venu poser la question, suffit-il de rajouter une ligne dans le code qui dit "copier en valeur ET en format" (le corps du texte issus de word vers le message outlook).
Il vous parle ce code ou c'est compliqué ?
 

DoubleZero

XLDnaute Barbatruc
Re : Publipostage avec PJ (facile) sans perdre la mise en forme (+dur!)

Bonjour, Fusky, le forum,

Dommage que la suggestion ne soit pas LA bonne solution.

En ce qui concerne le(s) code(s), je ne peux, hélas, être d’aucun secours… pour cause d’incompétence absolue !

Bon courage.
 

JNP

XLDnaute Barbatruc
Re : Publipostage avec PJ (facile) sans perdre la mise en forme (+dur!)

Bonjour le fil :),
Le problème se situe au niveau de .Body qui prends du texte brut :rolleyes:...
La base de la solution passe par l'utilisation de .HTMLBody pour pouvoir coder une mise en forme ;).
Après, ce n'est pas aussi simple que ça en à l'air, par ce que pour cela, soit il faut coder le HTML en brut, ce qui n'est pas évident (tu peux jeter un œil à ce fil, entre autres), soit il faut passer par le presse papier pour récupérer la présentation en HTML (tu peux jeter un œil ICI).
Vois déjà si ça peut te mener quelque part :p.
A + :cool:
 

Fusky

XLDnaute Junior
Re : Publipostage avec PJ (facile) sans perdre la mise en forme (+dur!)

Bravo JNP !
En transformant
.Body = Source.Sections(j).Range.Text
en
.HTMLBody = Source.Sections(j).Range.Text
et en formattant mon texte en HTML, les mails que j'envoie ont enfin fière allure !

Pour passer le texte en HTML je l'enregistre sous word en web page (.htm), j'ouvre le fichier avec firefox, je sélectionne le texte que je veux et clic droit "Voir le Code Source".

Merci à vous deux !
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 339
Membres
103 524
dernier inscrit
Smile1813