Envoi mail avec corps et Pièce jointe via Excel

Bonjour

je travaille sur une macro (source internet) me permettant d'envoyer un mail grace à une feuille excel en html (jusque la tout va bien, le mail par bien) avec les bonnes informations

par contre je bloque sur l'ajout d'une autre feuille ("nommé GCR") que je voudrais mettre en pièce jointe mais en PDF cette fois

je pense que je pars un peu dans tous les sens, je ne souhaite pas enregistrer ce fichier pdf mais juste l'incorporer à mon mail initial

Sub mail_outlook_GCR()
'copier un tableau Excel formaté dans un mail Outlook avec HTML
'la fonction Mail_outlook_expert_rangetoHTML doit être dans le même module

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Dim rng As Range
Dim modop As String
Dim fichier As String

With Application
    .ScreenUpdating = False       'Ces lignes désactivent le rafraîchissement de l'écran
    .DisplayAlerts = False           ' et le recalcul des formules du classeur avant d'exécuter la macro. Accélère grandement la vitesse d'exécution
    .Calculation = xlCalculationManual 'à ajouter juste après la déclaration de variables (Dim)
End With

fichier = Worksheets("mail").Range("B4") & ".pdf"

Set rng = Sheets("mail").Range("A6:B37") 'Autre méthode : Assigne les cellules pleines comprises autour de H1 (et H1) à la variable rng
'Set modop = Worksheets("GCR_Mode operatoire_VDR")
Worksheets("GCR_Mode operatoire_VDR").Activate
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=fichier, Quality:=xlQualityStandard, IncludeDocProperties _
:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

With OutMail
    .To = Worksheets("mail").Range("B2")
    .CC = Worksheets("mail").Range("B3")
    .BCC = ""
    .Display
    '.Subject = "[Demande de GCR] - " & Worksheets("DATA_Mail").Range("E2") & " - " & Worksheets("DATA_Mail").Range("F2") & " / " & " Nuit " & Worksheets("DATA_Mail").Range("AB2")
    .Subject = Worksheets("mail").Range("B4")
    .HTMLBody = "" & "<br>" & _
                mail_outlook_GCR_RangetoHTML(rng) & _
                "<br>" & _
                .HTMLBody

    .Attachments.Add fichier 'Ajoute en pièce-jointe le classeur actif

    .Display 'affiche le mail en brouillon dans Outlook, pratique
             'pour vérifier avant d'envoyer
    '.Send 'envoie directement le mail
    '.Save 'sauvegarde le mail

End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing

With Application
    .ScreenUpdating = True            'réactive le rafraichissement de l'écran et le recalcul du classeur
    .DisplayAlerts = True                   'à placer juste avant la fin de la macro (end sub)
    .Calculation = xlCalculationAutomatic
End With

'Call GCR_RDV

End Sub

auriez vous des corrections à apporter sur ce code pour que je puisse en venir à bout :D

Merci beaucoup

J'ai pas mal chercher avant de retomber sur ce superbe site ou évidemment dans téléchargements il y a la solution (export 1 feuille vers un pdf)

et ca marche

Sub mail_outlook_GCR()
'copier un tableau Excel formaté dans un mail Outlook avec HTML
'la fonction Mail_outlook_expert_rangetoHTML doit être dans le même module

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Dim rng As Range
  ' Déclaration des variables utilisées dans le code
  Dim sPath As String, sFileName As String, ShtName As String
  Dim OutObj As Object, Email As Object
  '
  ' Initialisation des variables
  ' Chemin d'accès du dossier TEMP
  sPath = Environ("TEMP") & "\"
  ' Nom du fichier à envoyer par mail
  sFileName = "Modop_GCR.pdf"
  ' Vérifier l'extension du fichier à enregistrer
  If Right(sFileName, 4) <> ".pdf" Then sFileName = sFileName & ".pdf"
  ' Nom de la feuille à exporter en PDF
  ShtName = "GCR_Modop_VDR"
  '
  '
  ' 1) Générer le PDF dans le répertoir temporaire de l'utilisateur
  Sheets(ShtName).ExportAsFixedFormat Type:=xlTypePDF, Filename:=sPath & sFileName, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

With Application
    .ScreenUpdating = False       'Ces lignes désactivent le rafraîchissement de l'écran
    .DisplayAlerts = False           ' et le recalcul des formules du classeur avant d'exécuter la macro. Accélère grandement la vitesse d'exécution
    .Calculation = xlCalculationManual 'à ajouter juste après la déclaration de variables (Dim)
End With

'fichier = Worksheets("GCR_Mode operatoire_VDR").Range("B12") & ".pdf"

Set rng = Sheets("mail").Range("A6:B37") 'Autre méthode : Assigne les cellules pleines comprises autour de H1 (et H1) à la variable rng

With OutMail
    .To = Worksheets("mail").Range("B2")
    .CC = Worksheets("mail").Range("B3")
    .BCC = ""
    .Display
    '.Subject = "[Demande de GCR] - " & Worksheets("DATA_Mail").Range("E2") & " - " & Worksheets("DATA_Mail").Range("F2") & " / " & " Nuit " & Worksheets("DATA_Mail").Range("AB2")
    .Subject = Worksheets("mail").Range("B4")
    .HTMLBody = "" & "<br>" & _
                mail_outlook_GCR_RangetoHTML(rng) & _
                "<br>" & _
                .HTMLBody

    .Attachments.Add sPath & sFileName
    ' Envoyer l'email
    '.Send
  ' Effacer les variable objet
  Set Email = Nothing: Set OutObj = Nothing
  ' Supprimer le fichier du répertoire temporaire

    .Display 'affiche le mail en brouillon dans Outlook, pratique
             'pour vérifier avant d'envoyer
    '.Send 'envoie directement le mail
    '.Save 'sauvegarde le mail

End With

Set OutMail = Nothing: Set OutApp = Nothing

With Application
    .ScreenUpdating = True            'réactive le rafraichissement de l'écran et le recalcul du classeur
    .DisplayAlerts = True                   'à placer juste avant la fin de la macro (end sub)
    .Calculation = xlCalculationAutomatic
End With
On Error GoTo 0
  Kill sPath & sFileName

'Call GCR_RDV

End Sub

on doit pouvoir faire plus court et simple mais pour le moment c'est top

mais je suis preneur d'avis et de retour

Bonsoir Cfrancky77

Dommage que tu sois passé à côté de mon outil
https://www.excel-pratique.com/fr/telechargements/utilitaires/pdf-email-vba-excel-no508

Car là le code trouvé n'est pas correcte, car RangeToHtml ce n'et pas ce que tu veux de ce que j'ai compris

A+

si si justement, je l'ai mis dans ma premiere ligne du précédent message, je me suis servi de ce lien car je bloquait sur la partie PDF et importation, mais j'avais besoin aussi d'intégrer un tableau excel dans mon corps de mail

ai je fait une erreur ?

Re,

Je ne l'ai pas lu comme ça effectivement je regarde si on peut l'optimiser ou pas

Mais tu as toujours la mauvaise habitude apparemment de ne pas mettre "Option Explicit" en entête de module et de ne pas définir tes variables

A+

Alors pour option explicit j'avoue que j'ai pas encore trop compris pourquoi on le mettait

par contre pour la déclaration, j'avais pourtant corrigé et défini mes différentes variables

un petit nettoyage de code s'impose donc

Re,

"Option Explicit" t'oblige à déclarer les variables et évite les erreurs de saisie, genre ValO ou Val0 ou sPath et sPaht

Lorsque tu vas compiler ton code, VBA Project te dira obligatoirement ce qui ne va pas.

De plus les variables se mettent en tout début de module, juste après "Sub Machin()"

Dans le code donné, il manque juste

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

A+

je viens de comprendre et en effet à force de récupérer du code à droite et à gauche tout n'était pas propre

j'ai activé l'option et j'avais pas mal de manque en compilant mon projet

désormais c'est bon

un grand merci pour votre aide BrunoM45, je dormirais moins bete ce soir

Rechercher des sujets similaires à "envoi mail corps piece jointe via"