R15305 [VBA] Enregistrer après envoi sur le disque
Publié par Oliv le Vendredi 04 janvier 2008 15:52
Cela ne se gère par dans l'événement ItemSend, mail il faut attendre l'événement MAPIFolder.Items.ItemAdd sur le dossier où sera classé le mail pour effectuer ce traitement "enregistrer sous" .

voici un exemple à mettre dans ThisOutlookSession en utilisant le dossier par défaut Eléments envoyés:

Code :
Private Sub Application_Startup() 
'pour evenement itemadd
Dim NS As Outlook.NameSpace
Set NS = Application.GetNamespace("MAPI")
Set colSentItems = NS.GetDefaultFolder(olFolderSentMail).Items
Set NS = Nothing 'fin section
end sub  
Code :
Private Sub colSentItems_ItemAdd(ByVal Item As Object) 
'By Oliv ' janv 2008 pour Outlook 2003 feat. Sue Mosher
'http://www.outlookcode.com/codedetail.aspx?id=456
If Item.Class = olMail Then
Repertoire = "C:\"
Strname = Repertoire & "Email " & Left(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Replace(Item.Subject, "\", ""), "/", ""), ":", ""), "*", ""), "?", ""), "<", ""), ">", ""), "|", ""), ".", ""), """", ""), vbTab, ""), Chr(7), ""), 160)
Enrg = MsgBox(Item.Subject & vbCr & "sous : " & vbCr & Strname & ".msg", vbYesNoCancel, "Enregistrer sur le disque ce mail ?")
If Enrg = vbYes Then
' 1ère façon sans boite de dialogue on connait l'endroit où enregistrer
'Repertoire = BrowseForFolder("Choisissez la destination", SDossier(5, 0)) & "\"
Item.SaveAs Strname & ".msg", OlSaveAsType.olMSG
ElseIf Enrg = vbNo Then
' 2ème méthode on ouvre une boite de dialogue
Item.Display
Dim objInsp
Dim colCB
Dim objCBB
On Error Resume Next
Set objInsp = item.GetInspector
Set colCB = objInsp.CommandBars
Set objCBB = colCB.FindControl(, 748) 'enregistrer sous
If Not objCBB Is Nothing Then
objCBB.Execute
End If
Item.Close olDiscard
End If
End If
End Sub    

L'apparition de la boîte de dialogue ne se fait qu'une fois le mail envoyé.
Voir aussi cet article : http://faq.outlook.fr/readarticle.php?article_id=80