XL 2010 Macro envoi mail automatique sur Outlook avec doc dans le corps du mail

nicoevents

XLDnaute Nouveau
Bonjour à tous,

existe il la possibilité d'automatiser l'envoi d'un mail (en ayant défini au préalable une liste de destinataire dans une feuille) avec dans le corps du mail une selection de la feuille mais également en complément que cette zone de la feuille génère un PDF. Petit fichier en pj

merci beaucoup
 

Pièces jointes

  • Classeur1.xlsx
    10 KB · Affichages: 25

gothc

XLDnaute Occasionnel
re
Bonjour @gothc ,@BrunoM45
peut être par ce que j'ai (un peu/ beaucoup /énormément) oublié de faire un ".quit' de l'object oapp
🤪 ;)

par contre j'aimerais bien savoir si ça fonctionne chez vous et quelle version vous utilisez pour orienter mes recherches pour @nicoevents bien que je pense qu'il a un peu /beaucoup/énormément baissé les bras ;)
en fin de sub
VB:
  'oEmail.Display
    oEmail.Send
oApp.Quit
    ' vide les variable
    Set oEmail = Nothing
    Set colAttach = Nothing
    Set oAttach = Nothing
    Set oApp = Nothing
Jai une erreur oEmail.Send
 

Pièces jointes

  • patrick.jpg
    patrick.jpg
    79.8 KB · Affichages: 15

patricktoulon

XLDnaute Barbatruc
bizarre votre truc

question1: c'est quoi ta version office ?
question2:
avez vous déjà configuré une boite mail dans votre outlook (hors excel!!!!)

si c'est pas le cas il va falloir le faire sinon ça ne fonctionnera jamais

il faudrait que je regarde aussi si comme pour CDO on pourrait forcer un SMTP et donc voir si on peut se servir d'outlook quand il n'est pas configuré

mais bon avec les retours succins que j'ai, je vais pas bien loin :rolleyes:
 

gothc

XLDnaute Occasionnel
j'ai la version 365 office version payante avec Windows 10 pour ma boite Outlook j'ai un compte Outlook avec mon adresse Gmail en configuration mon compte Outlook fonctionne très bien
j'ai une macro autre qui fonctionne sur un autre fichier (pour éviter le problème de blocage Outlook je ferme pas Outlook en vba je ferme Outlook manuellement à la fin de l'envoi je laisse en Example en fichier joint je laisse aussi ta macro sur un module
Merci bonne journée Patrick
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
oui j'ai déjà vu ça
"être obligé d'ouvrir une instance outlook vide "
pour pouvoir créer l'object
perso je trouve pas ça viable
mais bon déjà quand vous faite une modif sur un copier coller appliquer la modif sur toute la sub
chez moi le mailItem(0) c'est oemail et chez toi c'est xOutMail
alors tu veux bien me dire ce que tu essaie de faire avec oemail.send surtout apres deja l'avoir envoyé dans le bloc with
1622887989404.png


faut faire un peu plus d'effort sinon vous allez vite me faire tourner en bourrique ;)
 

patricktoulon

XLDnaute Barbatruc
re
et y compris oApp.Quit qui chez toi doit etre xOutApp .Quit
fait moi plaisir
teste ça sans ouvrir outlook

VB:
Sub sendMail()
    Dim NomImage$, NomPdf, xOutApp As Object, xOutMail As Object, xHTMLBody As String, plage As Range
    Dim Destinataire$, CC$, Titre$, paragraph1$, paragraph2$
    'nom des fichiers necessaires
    NomImage = ThisWorkbook.Path & "\imgTemp.gif": If Dir(NomImage) <> "" Then Kill (NomImage)    ' ne pas toucher ça
    NomPdf = ThisWorkbook.Path & "\pdfTemp.pdf": If Dir(NomPdf) <> "" Then Kill (NomPdf)   ' adapter le chemin du fichier pdf

    Set plage = Feuil3.[A1:B11]    ' plage à envoyer dans le corps du mail

    '------------------------------
    'exportation des fichiers temporaires
    'création du pdf avec la plage
    plage.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NomPdf, Quality:=xlQualityStandard, _
                              IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    'creation de la capture de la plage en image
    img = ExportRangeInImage(plage, NomImage)
    If img = "" Then MsgBox "la copie de la plage en image n'a pas pu etre effectué": Exit Sub
    '----------------------------
    'élements du mail
    Titre = "test de mail outlook VBA"    'titre du message

    Destinataire = "leeeee.ch@gmail.com"    'destinataire(s) du message( si plusieurs séparer  les par une virgule)

    CC = ""    ' accusé reception

    'texte que tu veux avantla plage dans le mail
    paragraph1 = "Bonjour Mr le directeur " & vbCrLf & "veuillez trouver ci joint  le tableau des ventes de concombres"
    paragraph1 = paragraph1 & vbCrLf & " il resume les ventes du mois "

    'texte que tu veux apres la plage dans le mail
    paragraph2 = " vous souhaitant bonne réception" & vbCrLf & "restant a votre disposition pour tout renseignement"
    paragraph2 = paragraph2 & vbCrLf & " votre dévoué serviteur  <font face=algerian color=red>le Concombre masqué</font>"

    '-----------------------------
    ' creation du mail outlook
    Set xOutApp = CreateObject("outlook.application")
    Set xOutMail = xOutApp.CreateItem(olMailItem)
    'création du code en html avec les éléments
    xHTMLBody = Replace(paragraph1, vbCrLf, "<br>") & "<br><br>" & _
                "<center><img src='imgTemp.gif'></center><br><br>" & _
                Replace(paragraph2, vbCrLf, "<br>")

    'application dans outlook
    With xOutMail
        .Subject = Titre    'titre du message
        .HTMLBody = xHTMLBody    'corps du mail avec insertion de la plage en image entre les deux paragraph
        .Attachments.Add NomPdf    ' on attache le pdf
        .Attachments.Add NomImage    ', olByValue, 0   ' on attache l'image de la plage
        .To = Destinataire    'destinataire
        .CC = CC   ' accusé
        '.display    ' soit on affiche l'application outlook
        .Send      ' soit on envoie direct
    End With
    'on peut supprimer le pdf temporaire et l'image temporaire de la plage
    ' If Dir(NomImage) <> "" Then Kill NomImage' à débloquer si mode ".send"
    'If Dir(NomPdf) <> "" Then Kill NomPdf' à débloquer si mode ".send"
    xOutApp.Quit
    ' vide les variable
    Set oEmail = Nothing
    Set colAttach = Nothing
    Set oAttach = Nothing
    Set xOutApp = Nothing
End Sub
Function ExportRangeInImage(plage As Range, CheminX As String)
'export plage en gif patricktoulon sur exceldownloads
    Dim chart1 As Object
    If Dir(CheminX) <> "" Then Kill CheminX
    With CreateObject("htmlfile").parentwindow.clipboardData.clearData("Text"): End With    'on vide le clipboard entre chaque copie pour tester vraiment le available
    plage.CopyPicture
    Set chart1 = plage.Parent.ChartObjects.Add(0, 0, 0, 0).Chart
    With chart1
        With .Parent
            .Width = plage.Width: .Height = plage.Height: .Left = plage.Width + 20:
            Do: .Chart.Paste: DoEvents: Loop While .Chart.Pictures.Count = 0
            .Chart.Export CheminX, "gif"
        End With
    End With
    chart1.Parent.Delete
    ExportRangeInImage = Dir(CheminX)

End Function
 

Discussions similaires

Réponses
16
Affichages
537
Réponses
2
Affichages
266
Réponses
15
Affichages
2 K

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal