Signaler

Ajouter une pièce jointe à un mail sur Access [Résolu]

Posez votre question AstraLife 24Messages postés lundi 2 octobre 2017Date d'inscription 17 octobre 2017 Dernière intervention - Dernière réponse le 9 oct. 2017 à 19:40 par AstraLife
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
Utile
+0
plus moins
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.
Donnez votre avis
Utile
+0
plus moins
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.
yg_be 3569Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 octobre 2017 Dernière intervention - 3 oct. 2017 à 13:07
as-tu généré un fichier pdf à partir de l'état?
Répondre
AstraLife 24Messages postés lundi 2 octobre 2017Date d'inscription 17 octobre 2017 Dernière intervention - 3 oct. 2017 à 18:49
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
Répondre
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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)
Donnez votre avis
Utile
+0
plus moins
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
yg_be 3569Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 octobre 2017 Dernière intervention - 4 oct. 2017 à 12:08
et ainsi?
nomfichier = "%temp%\BILAN_" & Format(now(), "yyyymmdd_hhnnss") & ".pdf"
Répondre
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
ç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
yg_be 3569Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 octobre 2017 Dernière intervention - 4 oct. 2017 à 19:51
et ainsi?
DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF, nomfichier
Répondre
AstraLife 24Messages postés lundi 2 octobre 2017Date d'inscription 17 octobre 2017 Dernière intervention - 5 oct. 2017 à 08:48
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
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

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


No ??
yg_be 3569Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 octobre 2017 Dernière intervention - 8 oct. 2017 à 22:24
pourquoi as-tu mis de nouveau
strPathAndFile = 
?
Répondre
AstraLife 24Messages postés lundi 2 octobre 2017Date d'inscription 17 octobre 2017 Dernière intervention - 9 oct. 2017 à 08:26
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.
Répondre
yg_be 3569Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 octobre 2017 Dernière intervention - 9 oct. 2017 à 08:51
ceci ne fonctionne pas?
DoCmd.OutputTo acOutputReport, "E42_BILAN_LD_Rech", acFormatPDF,  nomfichier 
Répondre
AstraLife 24Messages postés lundi 2 octobre 2017Date d'inscription 17 octobre 2017 Dernière intervention - 9 oct. 2017 à 09:51
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
Répondre
yg_be 3569Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 octobre 2017 Dernière intervention - 9 oct. 2017 à 10:08
avec
nomfichier = "c:\data\temp\BILAN_" & Format(Now(), "yyyymmdd_hhnnss") & ".pdf"
?
Répondre
Donnez votre avis
Utile
+0
plus moins
suggestion:
nomfichier = "c:\data\temp\BILAN_" & Format(Now(), "yyyymmdd_hhnnss") & ".pdf"

c:\data\temp doit être un dossier existant et accessible.
AstraLife 24Messages postés lundi 2 octobre 2017Date d'inscription 17 octobre 2017 Dernière intervention - 9 oct. 2017 à 13:25
RE, un grand merci à tous ceux qui ont partagés ma problématique, et un merci spécialement pour yg_be.

Dernière petite question, j'ai trouvés 2 ou 3 fonctions pour intégrer la signature mais aucune ne fonctionne, si quelqu'un a une idée, merci à tous.


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"
cheminfichier2 = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\B42_RETARD_BILAN_LD_Rech.pdf"
cheminfichier3 = "U:\Public\3.Production\commun\organisation\Export_GPF_(ne pas modifier)\Tempo_EMAIL\B42_MACHINE_BILAN_LD_Rech.pdf"

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

' 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 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.Attachments.Add cheminfichier2
MonMessage.Attachments.Add cheminfichier3
MonMessage.display vbSystemModal


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

Case vbNo

' procédure si click sur Non
End Select
End Sub
Répondre
yg_be 3569Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 octobre 2017 Dernière intervention - 9 oct. 2017 à 14:46
pourrais-tu préciser ce que tu entends par signature, où tu veux la récupérer?
Répondre
AstraLife 24Messages postés lundi 2 octobre 2017Date d'inscription 17 octobre 2017 Dernière intervention - 9 oct. 2017 à 15:32
Je cherche à récupérer la signature de l’utilisateur, quand je teste la macro elle détecte bien mon adresse e-mail donc j’en déduit que, exécuté sur d’autres postes au sein de la boîte se sera de même, donc je cherche à récupérer la signature de la personne qui envoie le mail.

A noter, nous ouvrons nos postes avec un identifiant et je ne sais pas si les signatures sont sous c:/user/ID/
la mienne est dans Outlook donc je sais pas trop.
Répondre
yg_be 3569Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 17 octobre 2017 Dernière intervention - 9 oct. 2017 à 15:55
il est sans doute préférable d'ouvrir une nouvelle discussion pour la signature.
Répondre
AstraLife 24Messages postés lundi 2 octobre 2017Date d'inscription 17 octobre 2017 Dernière intervention - 9 oct. 2017 à 19:40
Je pense aussi, encore merci.
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !