J'écris une macro qui crée des tickets sur une base de données basée sur les alertes reçues d'un serveur Nagios sous forme d'e-mail. Cependant, je ne peux pas laisser la macro s'exécuter dans une boucle infinie lors de la vérification des e-mails car elle est tout simplement trop lourde en ressources et fait bloquer mon bureau. Je dois trouver un moyen de déclencher la macro uniquement lorsqu'un nouveau courrier est reçu.
J'ai cherché quelque chose dans le sens des événements NewMail sur le site Web MSDN, mais je ne trouve rien de cohérent. Quelqu'un peut-il me montrer juste un exemple de code pour montrer comment déclencher des macros à partir de nouveaux événements de messagerie?
Ce code ajoutera un écouteur d'événements à la boîte de réception locale par défaut, puis effectuera une action sur les e-mails entrants. Vous devez ajouter cette action dans le code ci-dessous.
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Dim olApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")
' default local Inbox
Set Items = objNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Private Sub Items_ItemAdd(ByVal item As Object)
On Error Goto ErrorHandler
Dim Msg As Outlook.MailItem
If TypeName(item) = "MailItem" Then
Set Msg = item
' ******************
' do something here
' ******************
End If
ProgramExit:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ProgramExit
End Sub
Après avoir collé le code dans le module ThisOutlookSession
, vous devez redémarrer Outlook.
Essayez quelque chose comme ça dans ThisOutlookSession
:
Private Sub Application_NewMail()
Call Your_main_macro
End Sub
Mon Outlook vba vient de se déclencher lorsque j'ai reçu un e-mail et que cet événement d'application a été ouvert.
Edit: je viens de tester une boîte msg Hello World et elle a fonctionné après avoir été appelée dans le application_newmail
événement lors de la réception d'un e-mail.