Ajouter une pièce jointe à un mail sur Access

Résolu
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   -  
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Sur Access 2013/16

Je souhaite, dans un formulaire, à partir d'une liste déroulante, après avoir sélectionné la date charger un état (en PDF) en fonction de la date
et le joindre à un mail, le hic c'est que je passe par du code DAO pour préparer le mail (en fonction d'une requête ou se trouvent les contacts) et je n'arrive pas à y ajouter ma pièce jointe, (l'état chargé précédemment au format PDF).

Si quelqu'un pouvait me renseigner, grand merci.
Ci-joint le code du module et le code de lancement de la macro.


Code du Module =>

Option Compare Database

Sub LaTotale()
' #######################
' # 1. Access via DAO : #
' #######################



' Initialisation :
Dim ListeEMail As DAO.Recordset
Set ListeEMail = CurrentDb.OpenRecordset("R_EMAIL_LD")
ListeEMail.MoveFirst
ListeComplete = ""

' Parcourt de la requête :
While Not ListeEMail.EOF
ListeComplete = ListeComplete & ListeEMail("EMail") & ";"
ListeEMail.MoveNext
Wend

' On enlève le dernier point virgule :
' ListeComplete nous sera évidemment utile tout à l'heure :
ListeComplete = Left(ListeComplete, Len(ListeComplete) - 1)

' Stop DAO :
ListeEMail.Close
Set ListeEMail = Nothing

' #######################################
' # 2. Envoi de l'E-Mail avec Outlook : #
' #######################################


' Initialisation :

Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)

' Préparation du message :
MonMessage.To = "xxxxxx@free.fr"


' Récupération de la chaîne d'E-Mails Access :
MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de production Lettre Départ"
Corps = "Bonsoir,"
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Ci-joint le Bilan de production Lettre Départ."
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Villeneuve-La-Garenne PIC - 92"
MonMessage.body = Corps
MonMessage.display

End Sub


Code d'appel de la macro =>

Private Sub LaTotale___Click()
'MsgBox Oui + Non + icône Question
Select Case MsgBox("Vous allez charger le bilan de la journée de production du :" & Chr(13) & Chr(13) & " " & Format(Me.LaTotale__, "Long Date") & Chr(13) & Chr(13) & "Merci de patientez jusqu'à la fin du chargement.", vbYesNo + vbQuestion + vbSystemModal, "Apperçu Bilan Lettre Départ")
Case vbYes

Call LaTotale
Case vbNo
'procédure si click sur Non
End Select
End Sub
A voir également:

9 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
je pense qu'il suffit de faire
MonMessage.Attachments.Add "nom complet du fichier"

il me semble que tu ne donnes aucune information à propos de ce fichier à joindre.
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour yg_be, merci pour ta réponse,

effectivement dans le code il n'y a aucune info car justement je ne trouve pas quoi et ou insérer le code pour charger un état dans ce mail.

le code Attachement.add permet de joindre un fichier physiquement avec son chemin mais ne permet pas de joindre un état chargé situé dans la base Access.

En complément, ce que je cherche à faire,

Dans une base Access, à partir d'un formulaire, depuis une liste déroulante je choisie une date pour générer un état en PDF puis je souhaite l'envoyer par mail mais en fonction d'une requête ou sont situés les contacts.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
as-tu généré un fichier pdf à partir de l'état?
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Non,

Dans ma procédure j'arrive à ouvrir en mode aperçu l'état au début de la macro mais il ne se charge pas en pièce jointe pour le mail.

Je pense que c'est dans la partie d'initialisation du mail que je dois donner l'information d'y ajouter l'état en pièce jointe PDF mais étant un état à charger à partir d'une date choisie dans une liste déroulante ça coince


J'ai modifié le code avec l'état qui s'ouvre avant la préparation du mail


Option Compare Database

Sub LaTotale()
' #######################
' # 1. Access via DAO : #
' #######################

'MsgBox Oui + Non + icône Question
Select Case MsgBox("Vous allez charger le bilan de la journée de production du :" & " " & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date"), vbYesNo + vbQuestion, "Aperçu Bilan Lettre Départ")
Case vbYes

DoCmd.OpenReport "E42_BILAN_LD_Rech", acViewPreview

' Initialisation :
Dim ListeEMail As DAO.Recordset
Set ListeEMail = CurrentDb.OpenRecordset("R_EMAIL_LD")
ListeEMail.MoveFirst
ListeComplete = ""

' Parcourt de la requête :
While Not ListeEMail.EOF
ListeComplete = ListeComplete & ListeEMail("EMail") & ";"
ListeEMail.MoveNext
Wend

' On enlève le dernier point virgule :
' ListeComplete nous sera évidemment utile tout à l'heure :
ListeComplete = Left(ListeComplete, Len(ListeComplete) - 1)

' Stop DAO :
ListeEMail.Close
Set ListeEMail = Nothing

' #######################################
' # 2. Envoi de l'E-Mail avec Outlook : #
' #######################################


' Initialisation :

Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)


' Préparation du message :
MonMessage.To = "xxxx@free.fr"





' Récupération de la chaîne d'E-Mails Access :

MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de production xxxx"
Corps = "Bonsoir,"
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Ci-joint le Bilan de production xxxx"
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Villeneuve-La-Garenne xxxx"
MonMessage.body = Corps
MonMessage.display

Case vbNo
'procédure si click sur Non
End Select

End Sub
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai essayé ça dans la partie prépa du mail mais ça plante


' Préparation du message :
MonMessage.To = "xxxx@free.fr"
DoCmd.OpenReport "E42_BILAN_LD_Rech", acViewPreview, acFormatPDF
MonMessage.acSendReport , "E42_BILAN_LD_Rech", acFormatPDF
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
je suggère ceci:
'nom du fichier pdf temporaire
nomfichier="%temp%\BILAN"&Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date") & ".pdf"

'création du fichier pdf
DoCmd.OutputTo acOutputReport, "42_BILAN_LD_Rech", acFormatPDF, strPathAndFile = nomfichier

'attacher le fichier pdf au message
MonMessage.Attachments.Add nomfichier

'supprimer le fichier pdf après envoi du message
kill(nomfichier)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour yg_be

j'ai incorporé ton morceau de code,

ça plante à cette ligne : MonMessage.Attachments.Add nomfichier

Erreur d'execution, fichier introuvable, verifiez que le chemin et le nom
sont corrects.

Cela me génère un fichier nommé 0 dans mes documents qui fait la même taille que le PDF que je souhaite mais il n'est pas au format PDF, je l'ai ouvert avec PDF Creator et les bonnes données sont bien dans se fichier nommé 0.


Je n'ai peut être pas mis le morceau de code au bon endroit,


Je te remet le code modifié

Option Compare Database

Sub LaTotale()
' #######################
' # 1. Access via DAO : #
' #######################

'MsgBox Oui + Non + icône Question
Select Case MsgBox("Vous allez charger le bilan de la journée de production du :" & Chr(13) & Chr(13) & " " & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date"), vbYesNo + vbQuestion, "Aperçu Bilan Lettre Départ")
Case vbYes


' Initialisation :
Dim ListeEMail As DAO.Recordset
Set ListeEMail = CurrentDb.OpenRecordset("R_EMAIL_LD")
ListeEMail.MoveFirst
ListeComplete = ""

' Parcourt de la requête :
While Not ListeEMail.EOF
ListeComplete = ListeComplete & ListeEMail("EMail") & ";"
ListeEMail.MoveNext
Wend

' On enlève le dernier point virgule :
' ListeComplete nous sera évidemment utile tout à l'heure :
ListeComplete = Left(ListeComplete, Len(ListeComplete) - 1)

' Stop DAO :
ListeEMail.Close
Set ListeEMail = Nothing

' #######################################
' # 2. Envoi de l'E-Mail avec Outlook : #
' #######################################


' Initialisation :

Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)


' Préparation du message :
MonMessage.To = "xxxx@free.fr"
'nom du fichier pdf temporaire
nomfichier = "%temp%\BILAN" & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date") & ".pdf"

'création du fichier pdf
DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF, strPathAndFile = nomfichier

'attacher le fichier pdf au message
MonMessage.Attachments.Add nomfichier

'supprimer le fichier pdf après envoi du message
Kill (nomfichier)



' Récupération de la chaîne d'E-Mails Access :

MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de production Lettre Départ"
Corps = "Bonsoir,"
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Ci-joint le Bilan de production Lettre Départ."
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Villeneuve-La-Garenne PIC - 92"
MonMessage.body = Corps
MonMessage.display

Case vbNo
'procédure si click sur Non
End Select

End Sub
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
et ainsi?
nomfichier = "%temp%\BILAN_" & Format(now(), "yyyymmdd_hhnnss") & ".pdf"
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
pareil, cela me génère, dans mes documents, un fichier nommé 0 au format inconnu mais que je peut quand même ouvrir avec PDF créator pour visualiser le contenu.

Ca plante toujours à la ligne ci-dessous :
MonMessage.Attachments.Add nomfichier

fichier introuvable
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
ça coince ici

strPathAndFile = nomfichier

ça me donne dans mes documents un fichier nommé 0 de 450 ko (Taille correcte et données présentes) mais ce fichier n'est pas de type PDF
donc il plante après quand il cherche le PDF avec MonMessage.Attachments.Add nomfichier
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
et ainsi?
DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF, nomfichier
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Cela plante à la ligne :

DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF, nomfichier


Erreur 2501
L'action outputto a été annulée

' #######################################
' # 2. Envoi de l'E-Mail avec Outlook : #
' #######################################


' Initialisation :

Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)


' Préparation du message :
MonMessage.To = "XXXX@free.fr"

' nom du fichier pdf temporaire
nomfichier = "%temp%\BILAN" & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date") & ".pdf"

' création du fichier pdf
DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF, nomfichier

' attacher le fichier pdf au message
MonMessage.Attachments.Add nomfichier

' supprimer le fichier pdf après envoi du message
Kill (nomfichier)


' Récupération de la chaîne d'E-Mails Access :

MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de production Lettre Départ"
Corps = "Bonsoir,"
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Ci-joint le Bilan de production Lettre Départ."
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Villeneuve-La-Garenne PIC - 92"
MonMessage.body = Corps
MonMessage.display

Case vbNo
'procédure si click sur Non
End Select

End Sub
0
Utilisateur anonyme
 
Bonjour,

en mettant :
' nom du fichier pdf temporaire 
nomfichier = %temp% &"\BILAN\" & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date") & ".pdf"


No ??
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Le problème est que cette commande " nom du fichier pdf temporaire" me génère un fichier nommé 0 dans mes documents mais pas de type pdf et donc ensuite ça plante à la ligne "MonMessage.Attachments.Add nomfichier" Ce chemin d'accès n'existe pas.



Je remet mon code complet



1. Le Module appelé "Email_LD"

Option Compare Database

Sub LaTotale()
' #######################
' # 1. Access via DAO : #
' #######################

'MsgBox Oui + Non + icône Question
Select Case MsgBox("Vous allez charger le bilan de la journée de production du :" & Chr(13) & Chr(13) & " " & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date") & Chr(13) & Chr(13) & "Merci de patientez jusqu'à la fin du chargement.", vbYesNo + vbQuestion + vbSystemModal, "Aperçu Bilan Lettre Départ")
Case vbYes


' Initialisation :
Dim ListeEMail As DAO.Recordset
Set ListeEMail = CurrentDb.OpenRecordset("R_EMAIL_LD")
ListeEMail.MoveFirst
ListeComplete = ""

' Parcourt de la requête :
While Not ListeEMail.EOF
ListeComplete = ListeComplete & ListeEMail("EMail") & ";"
ListeEMail.MoveNext
Wend

' On enlève le dernier point virgule :
' ListeComplete nous sera évidemment utile tout à l'heure :
ListeComplete = Left(ListeComplete, Len(ListeComplete) - 1)

' Stop DAO :
ListeEMail.Close
Set ListeEMail = Nothing

' #######################################
' # 2. Envoi de l'E-Mail avec Outlook : #
' #######################################


' Initialisation :

Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)


' nom du fichier pdf temporaire
nomfichier = "%temp% &\BILAN\" & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date") & ".pdf"

' création du fichier pdf
DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF, strPathAndFile = nomfichier

' Préparation du message :
MonMessage.To = "xxxx@free.fr"


' Récupération de la chaîne d'E-Mails Access :

MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de production Lettre Départ"
Corps = "Bonsoir,"
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Ci-joint le Bilan de production Lettre Départ."
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Villeneuve-La-Garenne PIC - 92"
MonMessage.body = Corps
MonMessage.Attachments.Add nomfichier
MonMessage.display


' supprimer le fichier pdf après envoi du message
Kill (nomfichier)

Case vbNo
'procédure si click sur Non
End Select

End Sub




2. Le lancement de la macro

Private Sub LaTotale___Click()
Call LaTotale
End Sub
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
pourquoi as-tu mis de nouveau
strPathAndFile = 
?
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
pour tester car sans la mention "strPathandfile" cela me demande ou enregistrer mon pdf
Je l'ai enlevé et donc ca me demande ou enregistrer mon pdf et si je le met dans un répertoire qui correspond à celui spécifié pour la pièce jointe ca fonctionne super.
Le seul problème est d'automatiser cette commande pour que l'utilisateur n'ai pas a renseigner le chemin ou l'on doit retrouver le pdf.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
ceci ne fonctionne pas?
DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF,  nomfichier 
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
si ca fonctionne mais ca m'ouvre la fenetre enregistrer sous pour me demander ou enregistrer le PDF

si je place un message box "msgbox nonfichier" avant cette ligne il ne me donne rien

nonfichier = vide
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
suggestion:
nomfichier = "c:\data\temp\BILAN_" & Format(Now(), "yyyymmdd_hhnnss") & ".pdf"

c:\data\temp doit être un dossier existant et accessible.
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai fais des tests en plaçant directement un pdf nommé "BILAN_Lundi 2 Octobre 2017.pdf dans un répertoire crée sous ce nom c:\data\temp et ça fonctionne très bien il trouve la pièce jointe

Le problème vient du pdf généré à cette ligne :
DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF, strPathAndFile = nomfichier

Ce fichier nommé 0 tombe directement dans mon répertoire documents de windows.

Donc après il le trouve pas arrivée à cette ligne de code :
MonMessage.Attachments.Add nomfichier
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   > AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
strPathAndFile = nonfichier (dans le vba nomfichier est = vide)
0
Utilisateur anonyme > AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
et si tu fais un
msgbox nomfichier


après
' nom du fichier pdf temporaire 
nomfichier = %temp% &"\BILAN\" & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date") & ".pdf"


Ca affiche quoi ?
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention   > Utilisateur anonyme
 
Ca affiche la message box mais sans aucunes informations
0
AstraLife Messages postés 98 Date d'inscription   Statut Membre Dernière intervention  
 
Ca fonctionne, j'ai modifié comme suit
Me reste plus qu'à trouver comment y ajouter la signature de l'utilisateur.


Option Compare Database

Sub LaTotale()

' #######################
' # 1. Access via DAO : #
' #######################

' MsgBox Oui + Non + icône Question
Select Case MsgBox("Vous allez charger le bilan de la journée de production du :" & Chr(13) & Chr(13) & " " & Format(Form_F_MENU_RT_LD_PRIMAIRE.BILANLD, "Long Date") & Chr(13) & Chr(13) & "Merci de patientez jusqu'à la fin du chargement.", vbYesNo + vbQuestion + vbSystemModal, "Aperçu Bilan Lettre Départ")
Case vbYes




' nom du fichier pdf temporaire
cheminfichier = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\E42_BILAN_LD_Rech.pdf"



' création du fichier pdf
DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF, cheminfichier



' Initialisation :
Dim ListeEMail As DAO.Recordset
Set ListeEMail = CurrentDb.OpenRecordset("R_EMAIL_LD")
ListeEMail.MoveFirst
ListeComplete = ""

' Parcourt de la requête :
While Not ListeEMail.EOF
ListeComplete = ListeComplete & ListeEMail("EMail") & ";"
ListeEMail.MoveNext
Wend

' On enlève le dernier point virgule :
' ListeComplete nous sera évidemment utile tout à l'heure :
ListeComplete = Left(ListeComplete, Len(ListeComplete) - 1)

' Stop DAO :
ListeEMail.Close
Set ListeEMail = Nothing

' #######################################
' # 2. Envoi de l'E-Mail avec Outlook : #
' #######################################


' Initialisation :

Dim MonOutlook As Object
Dim MonMessage As Object
Set MonOutlook = CreateObject("Outlook.Application")
Set MonMessage = MonOutlook.createitem(0)


' Préparation du message :
MonMessage.To = "faby.laposte@free.fr"


' Récupération de la chaîne d'E-Mails Access :

MonMessage.To = ListeComplete
MonMessage.Subject = "Bilan de production Lettre Départ"
Corps = "Bonsoir,"
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Ci-joint le Bilan de production Lettre Départ."
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & Chr(13) & Chr(10)
Corps = Corps & "Villeneuve-La-Garenne PIC - 92"
MonMessage.body = Corps
MonMessage.Attachments.Add cheminfichier
MonMessage.display


' supprimer le fichier pdf après envoi du message
Kill (cheminfichier)

Case vbNo

' procédure si click sur Non
End Select
End Sub
0