Mise en page Word dans un mail Outlook

amayaa

XLDnaute Nouveau
Bonjour à tous, j'ai très peu d'expérience en vba c'est pourquoi je viens solliciter votre aide et votre bonne volonté =D

Je possède une macro qui se lance sur excel 2010

j'ai une liste de candidats qui doivent être trié selon leur localisation départementale (pour ça, aucun problème).
Ensuite je fais un publipostage vers Word avec un modèle Word créer spécialement pour ses candidats avec une mise en page particulière, des couleurs, etc
Tous les personnes du même département se retrouve finalement dans un meme document Word adapté au nombre de personne y appartenant, et j'ai donc au finale un doc Word pour chaque département.

Ensuite j'envoie tout par mail par Outlook en corps du message (l'adresse mail est differente pour chaque département), et là.... c'est le drame.

voilà donc mon problème, je perds absolument toute la mise en page soigneusement créer avec Word, je n'obtiens que le texte brut dans le corps.

Je souhaiterais donc savoir si c'est possible de garder cette mise en page et si oui, avoir une aide sur la résolution de mon problème. Merci d'avance =)
 
C

Compte Supprimé 979

Guest
Re : Mise en page Word dans un mail Outlook

Bonjour Amayaa et bienvenue sur ce forum ;)

Ensuite j'envoie tout par mail par Outlook en corps du message (l'adresse mail est differente pour chaque département), et là.... c'est le drame.
Juste comme ça, pourquoi ne pas joindre un fichier, plutôt que de mettre le document en corps de message !?

A+
 

amayaa

XLDnaute Nouveau
Re : Mise en page Word dans un mail Outlook

Bonjour le forum, finalement j'ai trouvé une solution à ce problème.
j'ai découvert sur un autre forum (je sais plus lequel >< ) un bout de code permettant de récupérer les sources d'une page html.
Donc après que le publipostage soit fini et que le document soit prêt à être envoyé, j'ai sauvegardé une copie en format html pour ainsi récupérer ses sources dans une variable et la mettre dans le HTMLBody. et désormais tout fonctionne comme je le souhaite.
merci à ceux qui auraient passé du temps sur mon cas même si je suis toujours preneur d'une autre solution.

a+ et bonne journée

PS : je peux montrer mon code pour ceux intéressé
 
Dernière édition:

amayaa

XLDnaute Nouveau
Re : Mise en page Word dans un mail Outlook

J'ai juste enlevé les parties ne correspondant pas au problème

Code:
  Dim NDF, NDF2, objet, listeContact As String
  Dim Chemin As String 
  Dim WordApp As Word.Application
  Dim WordDoc As Word.Document
  Dim oApp As Outlook.Application
  Dim oMail As Outlook.MailItem
  
  'dossier où se trouve le fichier modèle
  NDF = ActiveWorkbook.path & "\modele"
  'là où sera sauvegardé le fihier temporaire publiposté
  NDF2 = ActiveWorkbook.path & VPathD & "secret.htm"
  Application.DisplayAlerts = False
  Application.ScreenUpdating = False
  Chemin = ActiveWorkbook.path

  ActiveWorkbook.SaveAs Chemin & "\Temp.xls"

  ' Fermer le classeur
  ActiveWorkbook.Close savechanges:=False
Set WordApp = New Word.Application
Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)

    'sauvegarder temporairement la copie du modèle
    WordDoc.SaveAs Chemin & "\tempModele.doc"
  With WordDoc.MailMerge
    ' Si le fichier Excel n'est pas déjà lié dans le fichier Word
    .OpenDataSource Name:=Chemin & "\Temp.xls", ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
                    AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
                    Format:=wdOpenFormatAuto, _
                    Connection:="Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & Chemin & "\Temp.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet ", _
                    SQLStatement:="SELECT * FROM `feuille$`", SQLStatement1:="", SubType:=wdMergeSubTypeAccess
    With .DataSource
      .FirstRecord = wdDefaultFirstRecord
      .LastRecord = wdDefaultLastRecord
    End With
    'Exécute l'opération de publipostage
    .Execute Pause:=False
  End With

' Sauvegarder le document de Publipostage en html et fermeture
  
    WordDoc.Application.ActiveDocument.SaveAs2 Filename:=NDF2, _
        FileFormat:=wdFormatHTML, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False, CompatibilityMode:=0
    
    
  'création des mails
  Set oApp = GetObject(, "Outlook.Application")
  Set oMail = oApp.CreateItem(olMailItem)
  
  
  '--------------------------------
  'ces lignes permettent de récupérer le code source d'une page web
  'comme le fichier publiposté est enregistré en ".htm" je récupère son code source avec les balises html
  'qui vont se stocker dans la variable "sHtml"
  
    Dim oIE As Object
    Dim sHtml As String
    Set oIE = CreateObject("InternetExplorer.Application")
 
    oIE.navigate ("file:///" & NDF2)
    Do While (oIE.Busy)
        DoEvents
    Loop
    sHtml = oIE.Document.DocumentElement.outerHTML
    oIE.Quit
  '----------------------------------
  'en mettant la source dans un HTMLBody, Outlook va comprendre le html et le mail que recevront les destinataires,
  'sera à l'identique du fichier Word publiposté
  
  oMail.To = listeContact
  oMail.Subject = objet
  oMail.HTMLBody = sHtml
  oMail.Send
 

Discussions similaires

Réponses
1
Affichages
119
Compte Supprimé 979
C
Réponses
10
Affichages
366

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote