Sub EnvoiMailAvecPlage()
Dim DirTmp As String, sData As String
Dim Fso As Object, Rng As Range
Dim OutObj As Object, eMail As Object, StrHTML As String
Dim Dest As String, Signature As String
' Chemin et nom du fichier HTML temporaire
DirTmp = Environ("USERPROFILE") & "\Mail"
If Dir(DirTmp, vbDirectory) = "" Then MkDir DirTmp
DirTmp = DirTmp & "\~xLRange.htm"
' Avec ce classeur
With ThisWorkbook
With .Sheets("mail type")
' Définir la plage à exporter
Set Rng = .Range("A15:E33")
' Récupérer le destinataire
Dest = .Range("E6").Value
End With
' Exporte la plage vers un fichier de type HTML, ceci afin de respecter la mise en page de la plage :
.PublishObjects.Add(xlSourceRange, DirTmp, Rng.Parent.Name, Rng.Address, 0, "DivID", "").Publish True
End With
' Lecture du fichier HTML qui a été généré par PublishObjects :
Set Fso = CreateObject("Scripting.FileSystemObject")
Set oFile = Fso.OpenTextFile(DirTmp, 1, False)
sData = oFile.ReadAll
oFile.Close
Set oFile = Nothing: Set Fso = Nothing
' Création d'une instance Outlook pour envoyer un mail
Set OutObj = CreateObject("Outlook.Application")
Set eMail = OutObj.CreateItem(0)
With eMail
' Afficher l'objet mail pour avoir la signature
.Display
' Destinataire
.To = Dest
' Mémoriser la signature
Signature = .HtmlBody
' Sujet de l'eMail
.Subject = "Ceci est le sujet de mon mail"
' Corps du message
.HtmlBody = sData & Signature
End With
' Effacer les variables objet
Set eMail = Nothing: Set OutObj = Nothing: Set Rng = Nothing
' Supprimer le fichier temporaire
Kill DirTmp
End Sub