Insérer un tableau entre paragraphe dans un objet email via outlook Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
Avatar du membre
David007
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 12 décembre 2019
Version d'Excel : 2010 FR

Message par David007 » 18 décembre 2019, 16:38

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 :)
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 825
Appréciations reçues : 74
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 20 décembre 2019, 15:11

Bonjour David,

Dans ton tableau EXCEL, y a-t-il des images ou uniquement du texte ?
Cordialement,

Gérard
Avatar du membre
David007
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 12 décembre 2019
Version d'Excel : 2010 FR

Message par David007 » 23 décembre 2019, 09:50

Bonjour Gérard,

Y a uniquement du texte.

Tableau de 9 C et 9 L.

Merci.
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 825
Appréciations reçues : 74
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 23 décembre 2019, 16:20

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.
Test_eMail_GVS.xlsm
(24.24 Kio) Téléchargé 2 fois
1 membre du forum aime ce message.
Cordialement,

Gérard
Avatar du membre
David007
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 12 décembre 2019
Version d'Excel : 2010 FR

Message par David007 » 30 décembre 2019, 11:12

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 :)
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 825
Appréciations reçues : 74
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 3 janvier 2020, 10:34

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
Cordialement,

Gérard
Avatar du membre
David007
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 12 décembre 2019
Version d'Excel : 2010 FR

Message par David007 » 3 janvier 2020, 11:17

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 :)
Avatar du membre
GVIALLES
Membre dévoué
Membre dévoué
Messages : 825
Appréciations reçues : 74
Inscrit le : 28 novembre 2017
Version d'Excel : 2016, 360
Téléchargements : Mes applications

Message par GVIALLES » 3 janvier 2020, 12:44

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")
1 membre du forum aime ce message.
Cordialement,

Gérard
Avatar du membre
David007
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 12 décembre 2019
Version d'Excel : 2010 FR

Message par David007 » 3 janvier 2020, 15:44

Bonjour Gérard,

Un grannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnd bravo ça marche :D

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")
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message