Macro envoie via Outlook du dernier PDF généré avec texte définit
- Messages
- 3
- Excel
- Excel 365 Fr
- Inscrit
- 14/01/2022
- Emploi
- Responsable d'exploitation
Bonjour à tous,
J'ai lu beaucoup de publications sur ce sujet, mais je n'ai pas trouvé de réponse à ma question.
J'espère que l'un d'entre vous sera en mesure de m'aider! ;-)
Je vais essayer d'être clair, je ne suis pas au fait des mots techniques à utiliser.
Où j'en suis:
J'ai créé un fichier "Facture" avec plusieurs macro intégrées.
L'une d'entre-elle permet de:
- "générer un Pdf en sélectionnant une plage" (tout ne dois pas être imprimé)
- "de nommer ce PDF au nom du dernier numéro de facture+1"
- "d'enregistrer ce Pdf dans le dossier où est stocké l'Excel"
- "de copier, dans un autre onglet, les références de cette facture pour archive, en liste (en gros: nom, prénom, date, numéro de facture,...dans une table)"
En même temps que cette opération, l'adresse mail du destinataire de cette facture est copiée dans une cellule de la page active.
Mon besoin:
J'aimerais que ce Pdf généré soit envoyé au destinataire de la cellule où est noté le mail (car ce mail change pour chaque facture) en PJ avec un texte préétabli en corps de mail. (Une macro qui ferait un simple "éditer Pdf"+"envoie mail"+"saisie manuelle du mail du destinataire"+"texte du corps de mail saisi manuellement" ne répondrait pas à mon besoin)
Merci de préciser où se fait la sélection de la cellule qui sera utilisée pour copier l'adresse mail, comment la macro ira chercher le dernier fichier pdf,...
En plus d’avoir la solution j'adorerais la comprendre! ;-)
Merci d'avance pour le temps accordé!
Bonne journée
Séb
PS: je ne peux publier le fichier car il contient des données médicales confidentielles.
Bonjour Sébastien et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER] qui vous aidera dans vos demandes et réponses sur ce forum.
Vous pouvez tout à fait joindre un fichier anonymisé qui nous permettrait de connaitre le code et la structure du classeur
Sinon vous pouvez trouver du code dans le classeur ICI
https://www.excel-pratique.com/fr/telechargements/utilitaires/pdf-email-vba-excel-no508
A+
- Messages
- 3
- Excel
- Excel 365 Fr
- Inscrit
- 14/01/2022
- Emploi
- Responsable d'exploitation
Bonjour,
Je pense avoir tout lu et fait?
Malheureusement, je n'ai pas trouvé ma réponse sur le lien fourni.
Est-il possible de publier ma question?
Merci d'avance,
Cordialement
Bonjour et bienvenue
mon dernier travail sur excel avec l'aide de BrunoM45 ressemblait beaucoup à cela
j'ai bien un classeur excel avec plusieurs feuilles, 'lune d'elles me sert de texte pour mon mail (feuille mail)
et j'envoi une autre partie en pièce jointe en version PDF
Option Explicit
Function mail_outlook_GCR_RangetoHTML(rng As Range)
'cette fonction copie simplement notre plage de données dans un autre classeur vierge puis la convertit dans le format HTML
'elle peut être copiée telle quelle dans ton code même si tu ne la comprends pas
Dim fso As Object
Dim ts As Object
Dim TempFile As String 'déclaration du fichier temporaire
Dim TempWB As Workbook 'déclaration du classeur temporaire
With Application
.EnableEvents = False
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
'Création du fichier HTML (.htm et .html créent exactement le même fichier)
TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
'Copie la plage de données et crée un nouveau classeur pour coller les données dedans
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
'Publier la feuille dans un fichier htm
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
'Lire toutes les données du fichier htm dans RangetoHTML
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
mail_outlook_GCR_RangetoHTML = ts.ReadAll
' mail_outlook_expert_RangetoHTML = ts.ReadAll
ts.Close
mail_outlook_GCR_RangetoHTML = Replace(mail_outlook_GCR_RangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
'Ferme le classeur temporaire TempWB
TempWB.Close savechanges:=False
'Tue le fichier .htm utilisé dans cette fonction
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Function
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
Dim OutApp As Object, OutMail As Object
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
End Sub
- Messages
- 3
- Excel
- Excel 365 Fr
- Inscrit
- 14/01/2022
- Emploi
- Responsable d'exploitation
Bonjour,
Et merci pour ce retour!
Je teste tout ceci et vous dis!
A très vite