Si l’on souhaite traiter directement un e-mail dans Outlook avec VBA, par exemple le déplacer après qu’il soit arrivé dans la boîte de réception, on peut dans de nombreux cas utiliser les règles d’Outlook pour cela.
Pour des exigences spéciales, comme par exemple l’enregistrement automatique de pièces jointes, on atteint cependant rapidement les limites des règles d’Outlook. En effet, pour de telles fonctionnalités, on utilise généralement une macro VBA.
Dans les versions précédentes d’Outlook, il était encore possible de définir Exécuter un script dans les règles d’Outlook après réception d’un message de . Mais cela a été supprimé pour des raisons de sécurité. Selon certains forums, il est possible de le réactiver en appelant l’éditeur de registre et en définissant la clé EnableUnsafeClientMailRules sur 1.
HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security
DWORD : EnableUnsafeClientMailRules
Value : 1
Mais avec mon Outlook365, cette solution n’existait déjà plus non plus.
- Widl, Markus (Auteur)
Exécuter la macro après l’arrivée du courriel dans la boîte de réception
Microsoft recommande à ce stade de miser sur le NewMail Event ou mieux encore sur NewMailEx Event. Cela permet de créer Traitement automatique des e-mails par VBA lorsqu’ils sont reçus dans la boîte de réception. Ainsi, il est par exemple possible d’imprimer automatiquement une pièce jointe à un e-mail, si celle-ci provient d’un expéditeur déterminé, immédiatement au moment où l’e-mail arrive.
Cela permet de résoudre de nombreuses tâches d’automatisation sans devoir effectuer des dizaines de clics.
Utiliser le VBA Application_NewMailEx()
Dans le code VBA ci-dessous se trouve la structure de base pour exécuter une macro à la réception d’un e-mail. Il faut veiller à ce que la méthode Application_NewMailEx soit implémentée au sein de ThisOutlookSession.
![Screenshort Visual Basic Editor Outlook](https://ekiwi-blog.de/wp-content/uploads/2020/08/vba-application-newmail.jpg)
Les deux méthodes Application_NewMail et Application_NewMailEx sont encore exécutées avant les règles Outlook définies.
Dans l’exemple, une vérification de l’adresse de l’expéditeur a lieu avec la propriété Item.SenderEmailAddress. De nombreuses autres vérifications, comme par exemple sur le sujet (Item.Subject), sont envisageables. A l’intérieur de cette instruction If, il est ensuite possible d’exécuter d’autres codes ou d’exécuter des macros provenant d’autres modules.
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim Item As Object
Dim Email As String
Set Item = Session.GetItemFromID(EntryIDCollection)
Item.Save
'Trouver l'adresse e-mail de l'expéditeur
Email = Item.SenderEmailAddress
'Vérifier si le courriel provient d'un expéditeur particulier
If Email = "vorname.nachname@ekiwi.de" Then
'exécuter d'autres codes et macros ici
Module1.MaMacro
Debug.Print "Le bon mail est : " + Email
Else
Debug.Print "L'email incorrect est : " + Email
End If
End Sub
Si l’on veut exécuter des méthodes d’autres modules à cet endroit, il faut veiller à ce que celles-ci soient déclarées comme public.
Remarque: Celui qui utilise Debug.Print pour tester doit afficher la fenêtre de sortie via Affichage => Fenêtre directe (Ctrl+G) dans l’éditeur VBA. Pour les programmeurs d’autres langages de programmation, il s’agit certainement d’un wording inhabituel.