XL 2013 VBA - Envoi d'un mail avec fichier excel à une liste de destinataires - corps du mail issu d'un mail modèle prédéfini

Chrystel01

XLDnaute Occasionnel
Bonjour,

Je souhaite envoyer un même fichier excel à une liste de destinataires définis dans un fichier.

Quand je passe par le code vba ci-dessous, le contenu du mail est mal présenté (format, retour lignes...)

Subject = "Demandes de créneaux"
.Attachments.Add NewWB.FullName
.Body = "Bonjour,merci de compléter vos demandes de créneaux sur le fichier joint"

Sachant que le mail à envoyer contient de nombreuses lignes, des format spéciaux...
Est il possibleà partir du VBA Excel de récupérer un modèle de mail outlook std, bien formaté, qu'on pourra copier dans le mail qui sera envoyé à tous les destinataires avec la pièce jointe Excel ?

J'espère être suffisemment claire.

Merci d'avance pour votre aide

Chrystel
 
Solution
Bonjour,
Testez le code ci-dessous après avoir modifié le ModelFile :
VB:
Dim MailItem    As Object
Dim Outlook     As Object

Sub Exemple()
    Application.Cursor = xlWait
    ModelFile = "D:\...\...\...\Mail.docx"
  ' Test si la session Outlook est encore ouverte ------------
  ' (si on n'a pas fermé le mail suite à un Display précédent)
    On Error Resume Next
        Bidon = Outlook.ActiveWindow.WindowState
    If Err = 0 Then MailItem.Close False: Outlook.Quit
  ' ----------------------------------------------------------
    Err.Clear: On Error GoTo Exit_Error
    
    Copy_Doc ModelFile
        
    Set Outlook = CreateObject("Outlook.Application")
        Set MailItem = Outlook.CreateItem(olMailItem)
        With MailItem...

Chrystel01

XLDnaute Occasionnel
Bonjour Staple 1600 et Kiki29,
Bonjour le forum,

Je vous remercie beaucoup pour vos retours.

J'avais déjà efectivement fait des recherches sur le site et j'étais allée sur le site de Ron de Bruin qui m'a beaucoup aidé car je ne savais pas faire des envois outlook . Il est effectivement très bien fait.
=> J'ai pu créer une macro qui me permet de faire un envoi à des multiples destinataires grâce à la macro de Ron "Mail a row or rows to each person in a range" .

Par contre le mail est très simple alors que le corps du message (body) devrait se présenter comme le modèle joint (exemple joint copié sur un doc word pour vous le montrer).

Je n 'ai pas su trouver comment créer un mail avec ce format à moins de partir d'un mail déjà fait mais je n'arrive pas à trouver comment faire sur le forum.

Merci pour votre aide

Chrystel
 

Pièces jointes

  • mail.docx
    14.4 KB · Affichages: 11

fanch55

XLDnaute Barbatruc
Bonjour,
Testez le code ci-dessous après avoir modifié le ModelFile :
VB:
Dim MailItem    As Object
Dim Outlook     As Object

Sub Exemple()
    Application.Cursor = xlWait
    ModelFile = "D:\...\...\...\Mail.docx"
  ' Test si la session Outlook est encore ouverte ------------
  ' (si on n'a pas fermé le mail suite à un Display précédent)
    On Error Resume Next
        Bidon = Outlook.ActiveWindow.WindowState
    If Err = 0 Then MailItem.Close False: Outlook.Quit
  ' ----------------------------------------------------------
    Err.Clear: On Error GoTo Exit_Error
    
    Copy_Doc ModelFile
        
    Set Outlook = CreateObject("Outlook.Application")
        Set MailItem = Outlook.CreateItem(olMailItem)
        With MailItem
            .to = "??????@gmail.com"
            .Subject = "Demandes de créneaux"
            .Display
            .GetInspector.wordeditor.Paragraphs(1).Range.Paste
        End With

Exit_Error:
    If Err Then
        MsgBox "Erreur " & Err.Number & " - " & Err.Description & vbLf & _
            "Recommencez ...", vbCritical + vbOKOnly
    End If
    Application.Cursor = xlDefault

End Sub
Sub Copy_Doc(Docname)

    With CreateObject("Word.Application")
        .Visible = False
        .Documents.Open Docname, ReadOnly:=True
        .ActiveDocument.Select
        .Selection.Copy
        .Quit
    End With

End Sub
 

Chrystel01

XLDnaute Occasionnel
Bonjour Fanch55,

Merci beaucoup, cela fonctionne parfaitement ! Vous m'enlevez une bonne épine du pied.

Pour que je puisse progresser dans mon apprentissage du VBA, pourriez-vous svp me dire ce que fait ce code ".GetInspector.wordeditor.Paragraphs(1)" qui semble faire le lien entre le outlook et word ?
(Je ne connais pas tous les codes utilisés mais celui-là m'a l'air important)

Merci !
 

fanch55

XLDnaute Barbatruc
Bonjour Fanch55,

Merci beaucoup, cela fonctionne parfaitement ! Vous m'enlevez une bonne épine du pied.

Pour que je puisse progresser dans mon apprentissage du VBA, pourriez-vous svp me dire ce que fait ce code ".GetInspector.wordeditor.Paragraphs(1)" qui semble faire le lien entre le outlook et word ?
(Je ne connais pas tous les codes utilisés mais celui-là m'a l'air important)

Merci !
  • .getinspector est la "fenêtre" où est le MailItem [message] ( il faut qu'un Display ait été effectué )
  • .WordEditor indique qu'on entre en édition dans le corps du message
  • .Paragraphs(1) désigne l'endroit où se positionner dans celui-ci .
    En l'occurrence, c'est au début du corps ( car une signature a pu déjà être automatiquement insérée si paramétrée dans Outlook) .
  • .range.paste y colle ce qu'on à copié via le Copy_Doc
 

Discussions similaires

Réponses
2
Affichages
236

Statistiques des forums

Discussions
312 209
Messages
2 086 259
Membres
103 167
dernier inscrit
miriame