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 Subauriez 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 Subon 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
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