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é :

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
Comme présenté dans le code ci-dessus, j'utilise ensuite une procédure "save_emailsent" pour enregistrer le MAILEXCEL.
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é :

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
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.
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