Envoie d'un mail avec données Excel dans le corp du message

creal69360

XLDnaute Junior
Bonjour,

Voici mon soucis:
Je veux automatiser l'envoi de mails en récupérant du texte dans le fichier Excel et en le collant dans le corps du message (pas de pièce jointe). J'ai réussi avec le code présent dans le fichier ci-joint.


Le code fonctionne mais il y a un gros soucis, en effet la conversion de la range en fichier html me transforme les lettres avec accents en signes bizarres. Le problème vient je pense de la fonction mais je ne vois pas où arrive l'erreur, si quelq'un a une idée merci de m'éclairer. (le texte dans Excel est là uniquement pour pointer le problème).
 

Pièces jointes

  • creal.xlsm
    20.8 KB · Affichages: 41

creal69360

XLDnaute Junior
Re : Envoie d'un mail avec données Excel dans le corp du message

Re, merci de la réponse rapide.
J'ai essayé mais cela ne fonctionne pas, voici le liens où j'ai récupéré mon code:
Sub Mail_Sheet_Outlook_Body()
' You need to use this module with the RangetoHTML subroutine.
' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, and Outlook 2010.
Dim rng As Range
Dim OutApp As Object
Dim OutMail As Object
With Application
.EnableEvents = False
.ScreenUpdating = False
End With

Set rng = Nothing
Set rng = ActiveSheet.UsedRange
' You can also use a sheet name here.
'Set rng = Sheets("YourSheet").UsedRange

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next
With OutMail
.To = "ron@debruin.nl"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.HTMLBody = RangetoHTML(rng)
' In place of the following statement, you can use ".Display" to
' display the e-mail message.
.Send
End With
On Error GoTo 0

With Application
.EnableEvents = True
.ScreenUpdating = True
End With

Set OutMail = Nothing
Set OutApp = Nothing
End Sub
 

creal69360

XLDnaute Junior
Re : Envoie d'un mail avec données Excel dans le corp du message

enfin c'est le code du site que j'ai juste adapté voici le liens du site qui est d'ailleurs très connu je crois:Ce lien n'existe plus
Je pense que l'erreur survient avec la fonction RangetoHTML qu'il faut d'aillerus aussi récupérer sur le sitE;
 
G

Guest

Guest
Re : Envoie d'un mail avec données Excel dans le corp du message

Bonjour,

En changeant le codage des caractères, excel produit des encodages Windows-1252 (que tu peux voir dans une balise méta du fichier html temporaire créé) la fonction de J.W produits des caractères ASCII standard. Options éventuellement changeable dans les options avancées/Option Web/codage.

Il faut donc écrire le fichier temp dans le même encodage que nos excel Européens, soit Windows-1252 soit ISO-88-59-1 par une méthode appropriée.

L'objet Stream de ADODB le fait très bien et cela fonctionne:


Code:
Function RangetoHTML(rng As Range)
' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, and Outlook 2010.
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook
    Dim Stream As Object
    
    TempFile = ThisWorkbook.Path & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
 
    ' Copy the range and create a workbook to receive the data.
    rng.Copy
    Set TempWB = Workbooks.Add(1)
    With TempWB.Sheets(1)
        .Cells(1).PasteSpecial Paste:=8
        .Cells(1).PasteSpecial xlPasteValues, , False, False
        .Cells(1).PasteSpecial xlPasteFormats, , False, False
        .Cells(1).Select
        Application.CutCopyMode = False
        On Error Resume Next
        .DrawingObjects.Visible = True
        .DrawingObjects.Delete
        On Error GoTo 0
    End With
 
    ' Publish the sheet to an .htm file.
    With TempWB.PublishObjects.Add( _
         SourceType:=xlSourceRange, _
         Filename:=TempFile, _
         Sheet:=TempWB.Sheets(1).Name, _
         Source:=TempWB.Sheets(1).UsedRange.Address, _
         HtmlType:=xlHtmlStatic)
        .Publish (True)
    End With
    '
    Set Stream = CreateObject("ADODB.Stream")
    Stream.Open
    Stream.Type = 2 'text
    Stream.Charset = "windows-1252" '"ISO-8859-1"
    Stream.LoadFromFile TempFile
    RangetoHTML = Stream.ReadText
    Stream.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")
 
    ' Close TempWB.
    TempWB.Close savechanges:=False
 ' Delete the htm file.
    'Kill TempFile
 
    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
 End Function


A+
 
Dernière modification par un modérateur:
G

Guest

Guest
Re : Envoie d'un mail avec données Excel dans le corp du message

Re,

Oui, avec ton code original qui affichait les caractères de remplacements et avec le mien qui affiche les bons caractères (que ce soit dans internet explorer et le mail).

Essaie d'utiliser: Stream.Charset = "UTF-8"
Sait-on jamais.

Sinon, vois dans les options Excel/options Web/codage, quel est le codage prévu par excel
A+
 

creal69360

XLDnaute Junior
Re : Envoie d'un mail avec données Excel dans le corp du message

Bonjour,

oui j'ai mis la ligne en commentaire, par contre la j'ai un bug incomprehensible, j'ai fait le test une fois ça a fonctionné mais maintenant ma fonction s'arrête après cette partie du code:
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
Le message est alors directement envoyé et il est vide.
 

creal69360

XLDnaute Junior
Re : Envoie d'un mail avec données Excel dans le corp du message

Bonjour,

j'ai trouvé d'où venait l'erreur (problème de dossier d'enregistrement), mais j'ai un dernier problème certains caractères sont en couleur et je n'arrive pas à trouver de format de conversion prenant en compte la couleur. Quelqu'un aurait une solution? Merci d'avance.
 

Discussions similaires

Réponses
16
Affichages
615
Réponses
17
Affichages
1 K
Réponses
2
Affichages
312

Statistiques des forums

Discussions
312 510
Messages
2 089 148
Membres
104 051
dernier inscrit
jjouneau