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")

Rechercher des sujets similaires à "inserer tableau entre paragraphe objet email via outlook"