Mise en page d'un email envoyé depuis Excel

julien0112

XLDnaute Nouveau
Bonjour,

J'ai un tableau dans excel que je copie (range("c4:i22") par exemple) et que je colle en format html dans un email outlook.

Le code est le suivant:


'-----------------------------------------------------------------------'
' Cette routine va créer une instance de Outlook (si
' pas encore démarré) et va ensuite ouvrir une
' fenêtre de type mail. Le corps du message sera
' initialisé avec le contenu d'un fichier de type
' HTML. Ce fichier aura été préalablement
' créé par la routine SendRangeByMail
'
' Nécessite l'ajout d'une référence vers "Microsoft
' Outlook Object Library"
'
'-----------------------------------------------------------------------

Sub PrepareOutlookMail(ByVal sFileName As String)

Dim appOutlook As Outlook.Application
Dim oMail As Outlook.MailItem

Set appOutlook = CreateObject("Outlook.Application")

' Si Outlook n'était pas ouvert, l'instruction
' ci-dessus aura eu pour conséquence de
' démarrer Outlook.
'Ce type de démarrage par automation fait
'apparaître une fenêtre de sécurité qui demande
'à l'utilisateur de permettre au programme de
'continuer.
'
'Le message est "A program is trying to send an
'email. Do you want to allow..."
'
'Dans le cas où l'utilisateur aurait cliqué sur No,
'l'objet appOutlook est égal à Nothing. Il est
'donc impossible de continuer.

If Not (appOutlook Is Nothing) Then

Set oMail = appOutlook.CreateItem(olMailItem)

oMail.HTMLBody = ReadFile(sFileName)

oMail.Display

Set oMail = Nothing
Set appOutlook = Nothing

End If

End Sub

'-----------------------------------------------------------------------
'
' La routine SendRangeByMail va proposer à
' l'utilisateur de sélectionner une plage de cellules
' en Excel et va ensuite envoyer cette plage par
' mail, dans le corps du mail.
'
'-----------------------------------------------------------------------

Sub SendRangeByMail()

Dim rngeSend As Range

With Application

On Error Resume Next

' Demande à l'utilisateur de sélectionner la
' plage de cellule

Set rngeSend = Range("A116", Range("A116").End(xlDown).End(xlToRight))

'.InputBox(Prompt:="Please select range you wish to send.", Type:=8, Default:=.Selection.Address)

' rngeSend Is Nothing lorsque l'utilisateur ne fait
' aucun choix

If rngeSend Is Nothing Then Exit Sub

On Error GoTo 0

' Exporte la plage vers un fichier de type HTML;
' ceci afin de respecter la mise en page de la
' plage

.ActiveWorkbook.PublishObjects.Add(4, "C:\Temp\XLRange.htm", rngeSend.Parent.Name, rngeSend.Address, 0, "", "").Publish True

' Appelle la routine qui va se charger de créer
' un mail

Call PrepareOutlookMail("C:\Temp\XLRange.htm")

' Le fichier HTML n'est plus nécessaire

Kill "C:\Temp\XLRange.htm"

End With ' With Application

End Sub

'-----------------------------------------------------------------------
'
' Lit le contenu d'un fichier texte et retourne son
' contenu
'
'-----------------------------------------------------------------------

Public Function ReadFile(sFileName) As String

Dim fso As Object, fFile As Object
Dim sTemp As String

Set fso = CreateObject("Scripting.FileSystemObject")

Set fFile = fso_OpenTextFile(sFileName, 1, False)

sTemp = fFile.ReadAll

fFile.Close

Set fFile = Nothing

ReadFile = sTemp

End Function

Sub OrderTicket()

'

Dim sFileName As String
Dim currentSheet As Worksheet
Set currentSheet = ActiveSheet
'le corps du texte du message
Dim strHTML As String
Dim k As Byte, l As Byte
Dim Tableau1 As Range
Dim Tableau2 As Range


Dim OutApp As Object 'Email application
Dim OutMail As Object 'Email
Dim sEmailAdresses As String 'Semicolon separated list of recipients
Dim sEmailCCAdresses As String 'Semicolon separated list of CC recipients
Dim sEmailBCCAdresses As String 'Semicolon separated list of BCC recipients
Dim sEmailSubject As String 'Subject of email
Dim ConditionAV As Variant

sEmailAdresses = Cells(20, 87).Value
sEmailCCAdresses = Cells(21, 87).Value
sEmailBCCAdresses = Cells(22, 87).Value
sEmailSubject = Cells(23, 87).Value













'Copie et coller le tableau

With Application

On Error Resume Next

'tableau Acaht/Vente





Set Tableau1 = Range("C4:I22")
'.InputBox(Prompt:="Please select range you wish to send.", Type:=8, Default:=.Selection.Address)

' rngeSend Is Nothing lorsque l'utilisateur ne fait
' aucun choix

If Tableau1 Is Nothing Then Exit Sub

On Error GoTo 0

' Exporte la plage vers un fichier de type HTML;
' ceci afin de respecter la mise en page de la
' plage

.ActiveWorkbook.PublishObjects.Add(4, "C:\Temp\XLRange.htm", Tableau1.Parent.Name, Tableau1.Address, 0, "", "").Publish True

sFileName = "C:\Temp\XLRange.htm"
' Appelle la routine qui va se charger de créer
' un mail



'Call PrepareOutlookMail("C:\Temp\XLRange.htm")

' Le fichier HTML n'est plus nécessaire



End With ' With Application


'Creation of email
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next
With OutMail
.To = sEmailAdresses
.CC = sEmailCCAdresses
.BCC = sEmailBCCAdresses
.Subject = sEmailSubject
.HTMLBody = ReadFile(sFileName)
.Display

End With
Set OutMail = Nothing
Set OutApp = Nothing


Kill "C:\Temp\XLRange.htm"
Range("c4").Select



End Sub


Mon problème se situe dans la mise en page de l'email.
En effet, le tableau est centré et si je clique sur "aperçu avant impression" on ne voit pas la moitié du texte.

Ma question est donc de savoir comment peut on mettre en page cet email?

Merci à tous et excellente semaine,
J.
 

julien0112

XLDnaute Nouveau
Re : Mise en page d'un email envoyé depuis Excel

Bonjours à tous,

Je n'avais pas vu ce fil, MERCI!

J'ai rajouté cela au code:
.MimeFormatted = True
.GetStream.Charset = cdoISO_8859_15
.BodyPart.Charset = cdoISO_8859_15
.BodyPart.ContentTransferEncoding = "base64"

et c'est vrai que c'est mieux mais j'ai encore le corps du texte qui vient au milieu de la page et je n'arrive pas à le décaler sur la gauche.

C'est un détail, je pinaille. :)

Encore merci pour le lien et excellente semaine à tous!
J.
 

julien0112

XLDnaute Nouveau
Re : Mise en page d'un email envoyé depuis Excel

Bonjour,

Quelqu'un saurait me dire comment enlever la marge du tableau copié?
En effet lorsqu'il se met en HTML dans outlook, il se retrouve au milieu avec une grosse marge.

Merci pour votre aide,
Excellente fin se semaine,
J.
 

julien0112

XLDnaute Nouveau
Re : Mise en page d'un email envoyé depuis Excel

Bonjour,

Quelqu'un saurait me dire comment enlever la marge du tableau copié?
En effet lorsqu'il se met en HTML dans outlook, il se retrouve au milieu avec une grosse marge.

Merci pour votre aide,
Excellente fin se semaine,
J.
 

Discussions similaires

Statistiques des forums

Discussions
312 299
Messages
2 086 992
Membres
103 422
dernier inscrit
victus5