Créer un mail via une macro

jjfox2000

XLDnaute Nouveau
Bonjour,

Tout d'abords, je remercie les personnes qui consacreront un peu de leur temps pour répondre à ma problématique.

Pour info, je travaille avec la version 2003.

J'ai un fichier Excel avec plusieurs onglets. Je souhaiterais mettre en place une macro qui aurait pour but de créer un mail, que le contenu de la page Excel constitue le corps du mail, que le sujet du mail serait le texte repris en celulle A9 et que le destinataire soit l'email repris en cellule F5.

Malgré 36 tentatives, je n'y parviens pas. Merci pour de bien vouloir m'indiquer si c'est techniquement possible et si oui m'indiquer de quelle manière.

Merci d'avance.

jjfox
 

Pièces jointes

  • août 2009.xls
    44.5 KB · Affichages: 124

Guiv

XLDnaute Occasionnel
Re : Créer un mail via une macro

Bonjour jjfox,
Une petite recherche sur le forum t'aurais donné des solutions...
En voici une par Ron DeBruin (pour OutLook):

Code:
Option Explicit


Sub Mail_Sheet_Outlook_Body()

    Dim rng As Range
    Dim OutApp As Object
    Dim OutMail As Object
    Dim destinataire As String
    Dim sujet As String

    destinataire = ActiveSheet.Range("F5")
    sujet = ActiveSheet.Range("A9")

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Set rng = Nothing
    Set rng = ActiveSheet.UsedRange

    With ActiveWindow
        .DisplayGridlines = False
        .DisplayHeadings = False
    End With

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

    On Error Resume Next
    With OutMail
        .To = destinataire
        .CC = ""
        .BCC = ""
        .Subject = sujet
        .HTMLBody = RangetoHTML(rng)
        .send   'or use .Display
    End With
    On Error GoTo 0

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

    Set OutMail = Nothing
    Set OutApp = Nothing

    With ActiveWindow
        .DisplayGridlines = True
        .DisplayHeadings = True
    End With

End Sub

et la fonction qui va avec:

Code:
Function RangetoHTML(rng As Range)
' Changed by Ron de Bruin 28-Oct-2006
' Working in Office 2000-2010
    Dim fso As Object
    Dim ts As Object
    Dim TempFile As String
    Dim TempWB As Workbook
 
    TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
 
    'Copy the range and create a new workbook to past the data in
    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 a 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
 
    'Read all data from the htm file into RangetoHTML
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.ReadAll
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")
 
    'Close TempWB
    TempWB.Close savechanges:=False
 
    'Delete the htm file we used in this function
    Kill TempFile
 
    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function

Testé chez moi, ça marche.
Cordialement,
Guiv
 

Discussions similaires

Statistiques des forums

Discussions
312 345
Messages
2 087 494
Membres
103 559
dernier inscrit
pascalbill