Macro envoie via Outlook du dernier PDF généré avec texte définit

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+

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

Bonjour,

Et merci pour ce retour!

Je teste tout ceci et vous dis!

A très vite

Rechercher des sujets similaires à "macro envoie via outlook dernier pdf genere texte definit"