Excel VBA code pour envoyer e-mail avec PDF (un bug dans le code)

bouclesdor

XLDnaute Occasionnel
Bonjour cher membre du forum,

J'ai trouvé un code VBA et je tente de l'adapter à mon fichier (j'y ai passé plusieurs heures à comprendre et adapter le code) et j'ai beaucoup de difficulté mais selon moi il y a surement un pro de VBA qui pourra trouver rapidement mon erreur.

voici mes 3 codes:

Option Explicit
-----------------------------------------------------------------

Sub RDB_Selection_Range_To_PDF_And_Create_Mail()
Dim FileName As String

If ActiveWindow.SelectedSheets.Count > 1 Then
MsgBox "There is more then one sheet selected," & vbNewLine & _
"ungroup the sheets and try the macro again"
Else
'Call the function with the correct arguments

'For a fixed range use this line
FileName = RDB_Create_PDF(Range("A1:eek:60"), "", True, False)

If FileName <> "" Then
RDB_Mail_PDF_Outlook FileName, "info@test.com", "Nouveau PO à signer", _
"Bonjour ," _
& vbNewLine & vbNewLine & "voici en pièce jointe le fichier PDF d'un nouveau PO à signer." _
& vbNewLine & vbNewLine & "Merci," _
& vbNewLine & vbNewLine & " bouclesdor", False
Else
MsgBox "Not possible to create the PDF, possible reasons:" & vbNewLine & _
"Microsoft Add-in is not installed" & vbNewLine & _
"You Canceled the GetSaveAsFilename dialog" & vbNewLine & _
"The path to Save the file in arg 2 is not correct" & vbNewLine & _
"You didn't want to overwrite the existing PDF if it exist"
End If
End If
End Sub

'-----------------------------------------------------------------

Function RDB_Create_PDF(Myvar As Object, FixedFilePathName As String, _
OverwriteIfFileExist As Boolean, OpenPDFAfterPublish As Boolean) As String
Dim FileFormatstr As String
Dim Fname As Variant

'Test If the Microsoft Add-in is installed
If Dir(Environ("commonprogramfiles") & "\Microsoft Shared\OFFICE" _
& Format(Val(Application.Version), "00") & "\EXP_PDF.DLL") <> "" Then

If FixedFilePathName = "" Then

Fname = "C:\Documents and Settings\secretariat\Desktop\PO Copie à envoyer fournisseur\" & Range("K8") & " " & Range("a8")
FileFormatstr = "PDF Files (*.pdf), *.pdf"

'If you cancel this dialog Exit the function
If Fname = False Then Exit Function
Else
Fname = FixedFilePathName
End If

'If OverwriteIfFileExist = False we test if the PDF
'already exist in the folder and Exit the function if that is True
If OverwriteIfFileExist = False Then
If Dir(Fname) <> "" Then Exit Function
End If

'Now the file name is correct we Publish to PDF
On Error Resume Next
Myvar.ExportAsFixedFormat _
Type:=xlTypePDF, _
FileName:=Fname, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=OpenPDFAfterPublish
On Error GoTo 0

'If Publish is Ok the function will return the file name
If Dir(Fname) <> "" Then RDB_Create_PDF = Fname
End If
End Function
'-----------------------------------------------------------------

Function RDB_Mail_PDF_Outlook(FileNamePDF As String, StrTo As String, _
StrSubject As String, StrBody As String, Send As Boolean)
Dim OutApp As Object
Dim OutMail As Object

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

On Error Resume Next
With OutMail
.To = StrTo
.CC = ""
.BCC = ""
.Subject = StrSubject
.Body = StrBody
.Attachments.Add FileNamePDF
If Send = True Then
.Send
Else
.Display
End If
End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
End Function
'-----------------------------------------------------------------

mon code à pour but de créer un fichier PDF et de joindre ce fichier à un courriel mais je veux aussi que le fichier PDF soit copier sur mon desktop. le code roule bien et mon fichier PDF s'enregistre bien sur mon desktop mais le courriel n'est pas créé avec la pièce jointe mais je vois plutot le code d'erreur. je pense que le problème est dans mon code nommé RDB_Selection_Range_To_PDF_And_Create_Mail car au lieu de voir le e-mail ce créer c'est le else avec le code msgbox d'erreur que je vois...

If FileName <> "" Then
RDB_Mail_PDF_Outlook FileName, "info@test.com", "Nouveau PO à signer", _
"Bonjour ," _
& vbNewLine & vbNewLine & "voici en pièce jointe le fichier PDF d'un nouveau PO à signer." _
& vbNewLine & vbNewLine & "Merci," _
& vbNewLine & vbNewLine & " bouclesdor", False
Else
MsgBox "Not possible to create the PDF, possible reasons:" & vbNewLine & _
"Microsoft Add-in is not installed" & vbNewLine & _
"You Canceled the GetSaveAsFilename dialog" & vbNewLine & _
"The path to Save the file in arg 2 is not correct" & vbNewLine & _
"You didn't want to overwrite the existing PDF if it exist"

Merci de votre aide et je vous souhaite bonne journée,

Bouclesdor
 
Dernière édition:

Matheop

XLDnaute Occasionnel
Re : Excel VBA code pour envoyer e-mail avec PDF (un bug dans le code)

Hello bouclesdor.

Si tu as le MsgBox qui apparait lorsque tu exécutes ta macro RDB_Selection_Range_To_PDF_And_Create_Mail, cela signifie que ta condition n'est pas vérifiée (donc tu passes dans le Else). Si elle n'est pas vérifiée, cela signifie que ta variable FileName est vide, ne se remplit pas. Donc le problème se passe avant cette macro, il a lieu au moment où tu renvoies une valeur de type String dans FileName justement (environ à cette ligne : " FileName = RDB_Create_PDF(Range("A1: *D60"), "", True, False) ") ; pour une raison ou une autre la fonction ne te renvoie rien visiblement.

*il n'y a pas d'espace dans le Range, je l'ai juste mis pour éviter le smiley...
 

bouclesdor

XLDnaute Occasionnel
Re : Excel VBA code pour envoyer e-mail avec PDF (un bug dans le code)

Super merci Matichoux pour les explications ça m'aide à comprendre le code! (je suis débutante en VBA et il m'en reste beaucoup à apprendre)

Entre temps j'avais trouvé une autre voix (un autre code VBA) pour arriver à mon fichier PDF à envoyer par courriel je voulais passer par l'impression "cutePDF writer". Mon code fonctionne très bien aucun code d'erreur mais le problème est que lorsque que le courriel est envoyé directement d'excel vers outlook sans même ouvrir de fenêtre de message il n'y a pas de pièce jointe qui est envoyée mais si je remplace dans mon code le "send" par "display" (afin de voir afficher le message d'en outlook et de moi même faire send via outlook) la pièce jointe est bel et bien là et elle est envoyé. Je ne comprends pas.... pouvez-vous m'aider?

voici mon code:

Sub Make_Outlook_Mail_With_File_Link_display()
'For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm
'Working in Excel 2000-2013
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim PJ As String

Sheets("PO").CheckBox12 = True

If ActiveWorkbook.Path <> "" Then
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

strbody = "<font size=""3"" face=""Calibri"">" & _
"Bonjour,<br><br>" & _
"Voici un nouveau PO à signer : <B>" & _
ActiveWorkbook.Name & "</B>.<br>" & _
"Appuyez sur le lien hypertexte ci-après pour ouvrir le fichier : " & _
"<A HREF=""file://" & ActiveWorkbook.FullName & _
""">cliquez ici!</A>" & _
"<br><br>Merci," & _
"<br><br>bouclesdor" & _
"<br>ABC Inc.</font>"


On Error Resume Next
With OutMail
.To = "info@test.com"
.CC = ""
.BCC = ""
.Subject = ActiveWorkbook.Name
.HTMLBody = strbody
.Display 'or use .Send .display ' **** c'est ici si je change à Send la piece jointe ne sera pas envoyé, pourquoi.... ******

'Pour enregistrer la copie du PO sur le bureau avec toujours le même nom et joindre ce fichier au e-mail de FL et EP
Sheets("PO").Range("A1:eek:61").ExportAsFixedFormat xlTypePDF, "C:\Documents and Settings\secretariat\Desktop\PO FormatPDF.pdf"
PJ = "C:\Documents and Settings\secretariat\Desktop\PO FormatPDF.pdf"
.attachments.Add (PJ)

End With
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
Else
MsgBox "Ce fichier n'est pas enregistrer, vous devez enregistrer le fichier avant de pouvoir l'envoyer par e-mail."
End If

' save and close le PO en cours
ThisWorkbook.Close savechanges:=True
End Sub


Bouclesdor
 
Dernière édition:

bouclesdor

XLDnaute Occasionnel
Re : Excel VBA code pour envoyer e-mail avec PDF (un bug dans le code)

j'ai fait des tests en pensant que c'était peut-être la façon d'écrire le code que provenait l'erreur mais ça succès j'ai testé ceci:
.........
Dim myAttachments As Outlook.Attachments ' NOUVEAU TEST
Dim myItem As Outlook.MailItem ' NOUVEAU TEST
..........
.send 'or use .Send .display

'''Pour enregistrer la copie du PO sur le bureau avec toujours le même nom et joindre ce fichier au e-mail de FL et EP
Sheets("PO").Range("A1:eek:61").ExportAsFixedFormat xlTypePDF, "C:\Documents and Settings\secretariat\Desktop\PO FormatPDF.pdf"
PJ = "C:\Documents and Settings\secretariat\Desktop\PO FormatPDF.pdf"
Set myAttachments = myItem.Attachments ' NOUVEAU TEST
myAttachments.Add (PJ) ' NOUVEAU TEST
myItem.Display ' NOUVEAU TEST

End With
On Error GoTo 0

Je continue de tester... si jamais quelqu'un sait pourquoi la pièce jointe n'y ai pas lorsque je mets le code à ".Send" mais que ça fonctionne quand je mets ".Display" et que ma fenêtre outlook s'ouvre avec mon message et que je fais SEND dans outlook ma pièce jointe y est... mystère pour moi.... :(
 

bouclesdor

XLDnaute Occasionnel
Re : Excel VBA code pour envoyer e-mail avec PDF (un bug dans le code)

J'ai trouvé!! Finalement c'était une erreur banale...

J'ai remonté ma section du code pour la pièce jointe avant l'événement .send car le courriel était envoyé avant que la pièce jointe soit attachée! c'est pour ça que dans mon code avec le .display la pièce y était avant que le courriel soit joint la pièce jointe s'attachait...

Voici le code modifié (simplement la petite section qui causait problème:
_________________________________________
With OutMail
.To = "ericpelchat@omegachem.com;francoislaflamme@omegachem.com"
.CC = "info@omegachem.com"
.BCC = ""
'''Pour enregistrer la copie du PO sur le bureau avec toujours le même nom et joindre ce fichier au e-mail de FL et EP
Sheets("PO").Range("A1:eek:61").ExportAsFixedFormat xlTypePDF, "C:\Documents and Settings\secretariat\Desktop\PO FormatPDF.pdf"
PJ = "C:\Documents and Settings\secretariat\Desktop\PO FormatPDF.pdf"
.attachments.Add (PJ)

.Subject = ActiveWorkbook.Name
.HTMLBody = strbody
.send
_________________________________________

Avec de la persévérence on arrive à tout!!

Je vais laisser ma discussion sur le forum au cas où ça pourrait aider d'autre débutant comme moi! :)

Bonne journée les pros d'excel!

Bouclesdor
 

Matheop

XLDnaute Occasionnel
Re : Excel VBA code pour envoyer e-mail avec PDF (un bug dans le code)

Ah bah ravi que tu aies trouvé la solution par toi-même, j'étais en train de chercher de mon côté mais j'avais une erreur complètement différente de la tienne. :p

A+, bonne journée.
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 008
Membres
101 864
dernier inscrit
elrecruiter