Insérer un tableau entre paragraphe dans un objet email via outlook
Bonjour,
Je veux insérer un tableau entre paragraphe dans un e-mail envoyé via outlook.
Je veux bien avoir ce body,
"Bonjour,
Blabala Blabala Blabala Blabala Blabala Blabala Blabala.
Mon tableau (copié d'excel).
Cordialement."
Ma Signature.
Mon souci est que la tableau est collé en premier au dessus de "Bonjour,".
'
'
'
StrBody = "<Html><body style=""font-family:Times_New_Roman; font-size:118%; color:#3498DB; background-color:#F9E79F;""> <p>Bonjour,</p> <p>Blabala Blabala Blabala Blabala Blabala Blabala Blabala.</p> <p>Mon Tableau (copié d'excel).</p> <p>Cordialement.</p> </body></Html>"
With xMailItem
.Display
.To = xEmailAddr
.CC = xEmailAddrCopy
.BCC = xEmailAddrHidden
.Subject = "Sujet"
.Save
'.HTMLBody = StrBody & "<br/>" & Ma Signature
'Copier et Coller Tableau
Range("B2:J10").Copy
Tableau = WdDoc.Application.Selection.Paste
End With
'
'
'
Merci par avance pour votre réponse
Bonjour David,
Dans ton tableau EXCEL, y a-t-il des images ou uniquement du texte ?
Bonjour Gérard,
Y a uniquement du texte.
Tableau de 9 C et 9 L.
Merci.
Bonjour David,
Je te propose le code suivvant :
Option Explicit
Sub eMail_Range()
Const cRangeToeMail = "$C$9:$L$9"
Const cIntroduction = "Bonjour, <br> <br> Blabala Blabala Blabala Blabala Blabala Blabala Blabala."
Const cSignature = "Ma Signature."
Const xEMailAddr = "gvialles@hotmail.com"
Const xEMailAddrCopy = "gvialles@hotmail.com"
Const xEMailAddrHidden = "gvialles@hotmail.com"
Const cSujet = "Sujet"
Dim oSheet As Worksheet
Dim oOL As Object
Dim oMail As Object
Set oSheet = ActiveSheet
Set oOL = CreateObject("Outlook.Application")
Set oMail = oOL.CreateItem(0)
With oMail
.To = xEMailAddr
.CC = xEMailAddrCopy
.BCC = xEMailAddrHidden
.Htmlbody = composeBody(oSheet, cIntroduction, cRangeToeMail, cSignature)
.Subject = cSujet
.Display 'ou .send si on veut envoyer immédiatement
End With
End Sub
Function composeBody(zSheet As Worksheet, zIntroduction As String, zRange As String, zSignature As String) As String
Const cTmpFile = "TemporaryFile.htm"
Dim sTempFilename As String
Dim oFS As Object
Dim oTS As Object
Dim oPO As Excel.PublishObject
Dim sBuffer As String
'On compose le nom du fichier temporaire
sTempFilename = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\" & cTmpFile
'On met en forme le début du corps du mail
composeBody = "<html> <body>" & zIntroduction & "<br><br>"
'On exporte le tableau dans le fichier temporaire en HTML
Set oPO = ThisWorkbook.PublishObjects.Add(xlSourceRange, sTempFilename, zSheet.Name, zRange, xlHtmlStatic, "", "")
oPO.Publish (True)
oPO.Delete
'On récupère le contenu du fichier tamporaire dans une variable string locale
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oTS = oFS.OpenTextFile(sTempFilename)
sBuffer = oTS.ReadAll
oTS.Close
Set oTS = Nothing
Set oFS = Nothing
'On ajoute la variable locale au corps du mail
composeBody = composeBody & sBuffer
'On ajoute la signature
composeBody = composeBody & "<br><br>" & zSignature
'On ferme le corps du mail
composeBody = composeBody & "</Body>"
End Function
Je joins mon classeur de test.
Bonjour Gérard,
Merci pour la solution c'est bien inséré.
Le tableau est au centre y a t il une ligne de plus à ajouter pour qu'il soit aligné à gauche?
A noter STP que je veux bien insérer comme ainsi selon cet ordre:
Bonjour,
Blabala Blabala Blabala Blabala Blabala Blabala Blabala.
Mon Tableau (copié d'excel).
Cordialement.
Signature.
Merci par avance pour votre réponse
Bonjour David,
Si tu veux centrer le tableau dans le corps du mail, tu ajoutes une balise d'alignement devant le tableau. Ce qui donne :
Function composeBody(zSheet As Worksheet, zIntroduction As String, zRange As String, zSignature As String) As String
Const cTmpFile = "TemporaryFile.htm"
Dim sTempFilename As String
Dim oFS As Object
Dim oTS As Object
Dim oPO As Excel.PublishObject
Dim sBuffer As String
'On compose le nom du fichier temporaire
sTempFilename = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\" & cTmpFile
'On met en forme le début du corps du mail
composeBody = "<html> <body>" & zIntroduction & "<br><br>"
'On exporte le tableau dans le fichier temporaire en HTML
Set oPO = ThisWorkbook.PublishObjects.Add(xlSourceRange, sTempFilename, zSheet.Name, zRange, xlHtmlStatic, "", "")
oPO.Publish (True)
oPO.Delete
'On récupère le contenu du fichier tamporaire dans une variable string locale
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oTS = oFS.OpenTextFile(sTempFilename)
sBuffer = oTS.ReadAll
oTS.Close
Set oTS = Nothing
Set oFS = Nothing
'On ajoute le tableau contenu dans la variable locale au corps du mail en le centrant
composeBody = composeBody & "<p align=""center"">"
composeBody = composeBody & sBuffer
composeBody = composeBody & "</p>"
'On ajoute la signature
composeBody = composeBody & "<br><br>" & zSignature
'On ferme le corps du mail
composeBody = composeBody & "</Body>"
End Function
Bonjour Gérard,
Dsl, il est déjà aligné au centre d'office, moi je souhaite qu'il soit à gauche.
J'ai essayé avec ceci mais aucun résultat toujours au centre.
'On ajoute le tableau contenu dans la variable locale au corps du mail en le centrant
composeBody = composeBody & "<p align=""left"">"
composeBody = composeBody & sBuffer
composeBody = composeBody & "</p>"
Merci par avance pour votre réponse
David,
Excuses...j'avais lu de travers...
Je propose de remplacer :
'On ajoute le tableau contenu dans la variable locale au corps du mail en le centrant
composeBody = composeBody & "<p align=""center"">"
composeBody = composeBody & sBuffer
composeBody = composeBody & "</p>"
par
'On ajoute le tableau contenu dans la variable locale au corps du mail en la cadrant à gauche
composeBody = composeBody & Replace(sBuffer, " align=center", " align=left")
Bonjour Gérard,
Un grannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd bravo ça marche
juste une p'tite correction de frappe sur le code pour les guillemets sans espace avant align si non ça ne marche pas :
composeBody = composeBody & Replace(sBuffer, "align=center", "align=left")