Créer une macro pour faire un pdf et l'envoyer avec Outlook

loiselma

XLDnaute Nouveau
Bonjour à tous,

Après au moins 3 ans que je ne suis pas revenu sur ce site du fait que je ne travaillait que très peu avec excel, faute des applicatifs entreprises... je cherche désormais un moyen de créer une macro pour me simplifier la vie.
Cette macro doit prendre une feuille excel, la transformer en pdf puis l'envoyer par outlook.
J'ai trouvé plein de "morceaux" de codes mais étant très débutant, je vois toujours le message : "erreur de compilation... type non défini par l'utilisateur". Je sais que c'est un sujet déjà évoqué mais je ne trouve pas la source du problème :( Je suis sur Excel 2007.
Je suis perdu après trois jours de tentatives infructueuses.

Voici le code sur lequel je travaille:

Sub PDF_Mail2()

Dim nom As String, ol As New Outlook.Application, derlg As Integer
Dim olMail As MailItem, admail As String, messmail As String, i As Integer
'ci-dessous, on prend les mails dans une feuille
'derlg = Sheets("mails").Range("a" & Sheets("mails").Rows.Count).End(xlUp).Row
With Sheets("factures clients")
.Select
'si le dossier ou tu veux garder le PDF est dans un sou-repertoire de ce fichier xlsm, admettons "ARCHIVES"
nom = ThisWorkbook.Path & "\" & "factures clients" & "\" & .Range("a1") & .Range("h42") & ".pdf"
MsgBox nom
.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
nom, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=True, _
OpenAfterPublish:=False
End With

'Set ol = New Outlook.Application
'ol As New Outlook.Application

messmail = "ci-joint votre commande qui commence à sérieusement me les briser..."
'ci-dessous envoyé à tout le monde
'For i = 2 To derlg 'boucle du début à la fin de ta colonne des adresses mail
'admail = admail & Sheets("mails").Range("a" & i)
'If i = derlg Then Exit For
'admail = admail & "; "
'Next i
'si tu mets le mail en B20
admail = .Range("B20")
Set ol = New Outlook.Application
Set olMail = ol.CreateItem(olMailItem)
With olMail
.To = admail
.Subject = "exemple : commande effectuée" 'Sujet
.Body = messmail 'Corps du mail
.Attachments.Add nom
.Display '.Send 'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
End With


Est-ce que quelqu'un a une idée d'où vient le bugg?

Merci d'avance de votre aide.
Marc
 

loiselma

XLDnaute Nouveau
Re : Créer une macro pour faire un pdf et l'envoyer avec Outlook

Bonsoir vous deux,

J'ai donc installé acrobat reader et vérifier qu'il fonctionne bien. Tout est ok mais j'ai toujours le même incident sur les 4 lignes évoquées ci-dessus. Est-ce que celà vient du fait que dans les compléments je n'ai pas la version Microsoft outlook 14.0 object library mais la 12.0?
Sinon quelle ligne pointe sur le logiciel? je comprend pas l'astuce!
 

loiselma

XLDnaute Nouveau
Re : Créer une macro pour faire un pdf et l'envoyer avec Outlook

Bonjour Grisan29

Bien le bonjour à ma Bretagne qui me manque tant!
Concernant le code fournit, j'ai également un plantage mais apparemment pour Bougla ça marche!!! Je suis dans une impasse dont on cherche la solution mais à l'évidence c'est coton.
C'est ces 4 fameuses lignes qui posent problème.

kenavo
Marc
 

grisan29

XLDnaute Accro
Re : Créer une macro pour faire un pdf et l'envoyer avec Outlook

bonjour loiselma
de la Bretagne où il y a grand soleil ce jour:cool:

est ce que la 1ère partie du code est bien remis au chemin exact, ce qui peut etre source du problème
Code:
'si le dossier ou tu veux garder le PDF est dans un sou-repertoire de ce fichier xlsm, admettons "ARCHIVES"
nom = ThisWorkbook.Path & "\" & "factures clients" & "\" & .Range("a1") & ".pdf"
MsgBox nom
.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
nom, Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=True, _
OpenAfterPublish:=False
End With

voici un autre lien si tu les regarde au moins
 
Dernière édition:

loiselma

XLDnaute Nouveau
Re : Créer une macro pour faire un pdf et l'envoyer avec Outlook

Salut Grisan,

Merci pour ton retour. Et oui, je regarde bien les liens que tu envoies car ils me sont utiles et j'essaie de les mettre en place ou de regarder d'où peuvent venir mes erreurs de novice.
A l'instant "t", à priori l'export en pdf fonctionne mais je ne vois pas d'enregistrement physique dans le répertoire et ma macro butte sur " .Attachments.Add nom " qui est surligné en jaune.
voici l'ensemble du code:

Sub PDF_Mail2()

Dim nom As String, ol As New Outlook.Application, derlg As Integer
Dim olmail As MailItem, admail As String, messmail As String, i As Integer
With Sheets("factures clients")
.Select
nom = ThisWorkbook.Path & "\" & "factures clients" & "\" & .Range("c11") & "\" & .Range("b18") & ".pdf"

'With Application.FileDialog(msoFileDialogFolderPicker)
'If .Show = -1 Then ' Clic sur Ok
'Chemin = .SelectedItems(1)
'Else
' Clic sur Annuler
' Exit Sub
' End If
'End With
'MsgBox Fichier

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strCheminComplet _
, Quality:=xlQualityStandard, includeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False

End With
messmail = "ci-joint votre facture pour le mois de " '[e25].value
y = Sheets("factures clients").Range("b20").Value
'myItem.To = y
'MsgBox myItem.To

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = y 'admail
.Subject = "exemple : commande effectuée" 'Sujet
.Body = messmail 'Corps du mail
.Attachments.Add nom
.Display '.Send 'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
End With

End Sub

Tu peux voir également que je suis en train de tester le bout de code du lien que tu m'as envoyé (mis en 'commentaire') car je ne le comprend pas bien en ce moment.
Mais j'y travaille apremment depuis quelque jour :)

Pourquoi ma macro bloque à la ligne .Attachments.Add nom ? encore une énigme???

Marc
 

loiselma

XLDnaute Nouveau
Re : Créer une macro pour faire un pdf et l'envoyer avec Outlook

Pour vous tenir au courant, je vous joins les avancées du code:

Sub PDF_Mail2()

Dim nom As String, ol As New Outlook.Application, derlg As Integer
Dim olmail As MailItem, admail As String, messmail As String, i As Integer
With Sheets("factures clients")
.Select
nom = ThisWorkbook.Path & "\" & "factures clients" & "\" & .Range("c11") & "\" & .Range("b18") & ".pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="nom" _
, Quality:=xlQualityStandard, includeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False

End With

x = Sheets("factures clients").Range("e25").Value
y = Sheets("factures clients").Range("b20").Value
Z = Sheets("factures clients").Range("b40").Value

messmail = "Here is your invoice for the month of " & x
'ActiveWorkbook.SaveAs Chemin2 & Client & "\" & Fichier

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = y
.CC = Z
.Subject = "Invoice - " & x
.Body = messmail 'Corps du mail
.Attachments.Add nom
.Display '.Send 'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
End With

End Sub


Je n'arrive pas à voir comment enregistrer mon fichier qui est nommé "nom" et dont le chemin est parfait lorsque je lui demande de l'afficher avec une msgbox.
Est-ce qu'Excel créer automatiquement les répertoires tels que mentionnés dans "nom"? Car je ne vois rien dans l'explorateur comme fichier!!!
D'où le plantage lors de la dernière ligne .attachments.add nom car il ne doit pas le trouver dans le répertoire.

Au secours... je ne sais pas comment faire et toutes les idées trouvées sur le net sont épuisées sans succès.

Merci pour votre patience.
@+
Marc



Salut Grisan,

Merci pour ton retour. Et oui, je regarde bien les liens que tu envoies car ils me sont utiles et j'essaie de les mettre en place ou de regarder d'où peuvent venir mes erreurs de novice.
A l'instant "t", à priori l'export en pdf fonctionne mais je ne vois pas d'enregistrement physique dans le répertoire et ma macro butte sur " .Attachments.Add nom " qui est surligné en jaune.
voici l'ensemble du code:

Sub PDF_Mail2()

Dim nom As String, ol As New Outlook.Application, derlg As Integer
Dim olmail As MailItem, admail As String, messmail As String, i As Integer
With Sheets("factures clients")
.Select
nom = ThisWorkbook.Path & "\" & "factures clients" & "\" & .Range("c11") & "\" & .Range("b18") & ".pdf"

'With Application.FileDialog(msoFileDialogFolderPicker)
'If .Show = -1 Then ' Clic sur Ok
'Chemin = .SelectedItems(1)
'Else
' Clic sur Annuler
' Exit Sub
' End If
'End With
'MsgBox Fichier

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strCheminComplet _
, Quality:=xlQualityStandard, includeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False

End With
messmail = "ci-joint votre facture pour le mois de " '[e25].value
y = Sheets("factures clients").Range("b20").Value
'myItem.To = y
'MsgBox myItem.To

Set ol = New Outlook.Application
Set olmail = ol.CreateItem(olMailItem)
With olmail
.To = y 'admail
.Subject = "exemple : commande effectuée" 'Sujet
.Body = messmail 'Corps du mail
.Attachments.Add nom
.Display '.Send 'On peut switcher entre .send et .display selon que l'on veut envoyer le mail (send) ou seulement le préparer et le vérifier(display)
End With

End Sub

Tu peux voir également que je suis en train de tester le bout de code du lien que tu m'as envoyé (mis en 'commentaire') car je ne le comprend pas bien en ce moment.
Mais j'y travaille apremment depuis quelque jour :)

Pourquoi ma macro bloque à la ligne .Attachments.Add nom ? encore une énigme???

Marc
 

Modeste

XLDnaute Barbatruc
Re : Créer une macro pour faire un pdf et l'envoyer avec Outlook

Bonjour,

Pas tout regardé (de toute façon je suis en 2016, ici!) mais dans la ligne ActiveSheet.ExportAsFixedFormat ..., il y a des guillemets autour de "nom" .. qui est une variable!? Qu'advient-il si tu supprimes ces guillemets?
 

loiselma

XLDnaute Nouveau
Re : Créer une macro pour faire un pdf et l'envoyer avec Outlook

Bonjour,

En enlevant les "" ça marche aussi mais je n'ai pas d'enregistrement du fichier dans le répertoire. Et je pense que c'est pour ça que lorsque dans le mail il y a l'appel de ce fichier, il y a un bugg du fait que la pj n'existe pas.
Donc est-ce que VBA est capable de créer un répertoire en fonction du code présent?

@+
Marc
 

Modeste

XLDnaute Barbatruc
Re : Créer une macro pour faire un pdf et l'envoyer avec Outlook

Re,

Tu veux dire que le sous-dossier "factures clients" ou celui dont le nom figure en C11 n'existent pas?

Si c'est ça ... ben ... crée le sous-dossier "à la main", ré-exécute ton code et vois si le fichier est bien créé et au bon endroit :confused:
 

Discussions similaires

Réponses
3
Affichages
677
Réponses
6
Affichages
268

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG