Bonjour,
Depuis Excel, j'envoie un mail via Outlook. Nous l'appelerons le MAILEXCEL. Le MAILEXCEL est envoyé en automatique, via la commande ".send". Aucun problème, ça fonctionne. Voici le code utilisé :
Comme présenté dans le code ci-dessus, j'utilise ensuite une procédure "save_emailsent" pour enregistrer le MAILEXCEL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Private Sub CommandButton1_Click() 'initialisation lgn = [FTlgn] Dim corps, sujet As String Dim oOutlook As Outlook.Application Dim EmailMsg As Outlook.MailItem Set oOutlook = CreateObject("Outlook.Application") Set EmailMsg = oOutlook.CreateItem(olMailItem) With EmailMsg .To = Feuil1.Cells(lgn, [VALadressemail].Column) sujet = "Rendez-vous " & Feuil1.Cells(lgn, [VALdossier].Column) .Subject = sujet .BodyFormat = olFormatHTML corps = "<html><body>Bonjour,<br><br>" & _ "Je vous remercie de me confirmer ce rendez-vous.</span>" .GetInspector.CommandBars.Item("Insert").Controls("Signature").Controls(1).Execute .HTMLBody = corps & EmailMsg.HTMLBody .Send End With Call save_emailsent(sujetdumail, cheminsauvegarde, nomsouhaitédufichiermail) End Sub
Cette procédure parcoure les sujets des mails du dossier "Éléments envoyés" dans Outlook, lorsqu'elle reconnait un sujet identique au MAILEXCEL, elle enregistre alors le mail détecté. Voici le code utilisé :
La procédure "save_emailsent" s'exécute sans aucun problème. Pourtant, parfois elle ne trouve pas le MAILEXCEL, et donc ne l'enregistre pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Public Sub save_emailsent(sujetdumail As String, chemin As String, nomdumail As String) 'initialisation Dim sDate As String Dim objItem As Object Dim app As Outlook.Application Dim AppNs As Outlook.Namespace Dim AppFolder As Outlook.MAPIFolder Dim mailenvoye As Boolean mailenvoye = False 'on enregistre le mail envoyé Set app = New Outlook.Application Set AppNs = app.GetNamespace("MAPI") Set AppFolder = AppNs.GetDefaultFolder(olFolderSentMail) For Each objItem In AppFolder.Items If objItem.MessageClass = "IPM.Note" Then If objItem.Subject = sujetdumail Then sDate = Format(objItem.ReceivedTime, "yyyymmdd", vbUseSystemDayOfWeek, vbUseSystem) & Format(objItem.ReceivedTime, "-hhnnss", vbUseSystemDayOfWeek, vbUseSystem) Application.DisplayAlerts = False objItem.SaveAs chemin & sDate & " " & nomdumail & ".msg", olMSGUnicode Application.DisplayAlerts = True mailenvoye = True Exit For End If End If Next If mailenvoye = True Then MsgBox "Le mail a bien été envoyé et enregistré. Merci !" Else MsgBox "ERREUR : le mail n'a PAS été trouvé, et donc pas enregistré." End If End Sub
Après vérification, le MAILEXCEL est pourtant bien présent dans le dossier "mail envoyé" d'Outlook.
Je n'ai pas réussi à comprendre quand l'erreur se produit. Elle se produit très ponctuellement (1 mail sur 20).
Voici mes questions :
1 - Mon idée sur cette erreur : peut-être que ponctuellement la procédure "save_emailsent" s'éxécute trop rapidement et que le MAILEXCEL n'a pas encore eu le temps d'être envoyé ?
Vous en pensez quoi ?
2 - Avez-vous déjà rencontré un problème similaire ?
3 - Utilisez-vous d'autres solutions pour enregistrer un mail envoyé depuis Outlook via Excel ?
Merci de votre aide![]()
Partager