Outlook 365 : télécharger automatiquement les pièces jointes (nouvel Outlook vs classique, Power Automate et VBA)

Besoin d’enregistrer automatiquement les pièces jointes reçues dans Outlook 365 ? Voici des méthodes fiables pour y parvenir selon votre environnement : nouvel Outlook, Outlook classique pour Windows, Power Automate (cloud) ou scénarios avancés avec Microsoft Graph. Pas de bla‑bla : du concret, sécurisé et maintenable.

Sommaire

Vue d’ensemble de la question

Peut‑on télécharger automatiquement les pièces jointes à la réception d’e‑mails dans Outlook 365 ? Oui, mais la méthode dépend du client Outlook et de vos contraintes (poste Windows ouvert, stockage local vs cloud, politiques M365, etc.).

Constat clé (au 12 septembre 2025).
Dans le nouvel Outlook (Windows et Mac), il n’y a pas de macros VBA, pas de compléments COM, pas d’Object Model Outlook et donc pas d’action « Exécuter un script » dans l’Assistant Règles. Résultat : aucune automatisation locale « à l’ancienne » n’est possible depuis cette application.
Outlook classique pour Windows conserve ces capacités (VBA, COM, modèle objet, action « Exécuter un script »).

Trois stratégies éprouvées :

  • Basculer sur Outlook classique (Windows) pour utiliser une règle « Exécuter un script » (VBA) qui enregistre les pièces jointes en local.
  • Automatiser côté cloud avec Microsoft Power Automate pour déposer les pièces dans OneDrive Entreprise ou SharePoint (recommandé en entreprise, fonctionne 24/7 sans Outlook ouvert).
  • Approches avancées pour administrateurs : Microsoft Graph via Logic Apps/Azure Functions/PowerShell, ou Web Add‑in (Office.js) si le besoin s’y prête.

Pourquoi Outlook a‑t‑il changé ?

Le nouvel Outlook unifie l’expérience autour d’un client Web (Office.js/Web Add‑ins), avec un bac à sable plus restrictif : pas d’accès direct au système de fichiers, pas d’API COM locale, pas de VBA. Cette architecture simplifie le déploiement et la sécurité, mais interdit les automatisations locales de type « macro ». D’où l’intérêt de Power Automate (cloud) ou le maintien d’Outlook classique si vous dépendez encore des règles « Exécuter un script ».

Solution A — Basculer sur Outlook classique (Windows) pour utiliser une règle « Exécuter un script »

Pour qui ?

  • Utilisateurs Windows pouvant garder Outlook ouvert en permanence.
  • Besoin d’enregistrer en local sur un disque/partage réseau.
  • Contexte contrôlé (poste géré, antivirus à jour, politiques macro maîtrisées).

Prérequis

  • Outlook classique installé (coexistence possible avec le nouvel Outlook).
  • Droits pour modifier le Registre si nécessaire afin d’activer « Exécuter un script » dans les règles.
  • Dossier cible existant et accessibles (ex. C:\Inbox\Attachments).

Étapes détaillées

  1. Ouvrez Outlook classique (icône bleue traditionnelle). Vérifiez que vous n’êtes pas dans le nouvel Outlook.
  2. Appuyez sur ALT+F11 pour ouvrir l’éditeur VBA. Dans Projet – Microsoft Outlook Objets, insérez un Module et collez la macro ci‑dessous.
  3. Enregistrez et fermez l’éditeur VBA.
  4. Dans Outlook : Accueil → Règles → Gérer les règles et alertes → Nouvelle règle…
    Choisissez « Appliquer la règle aux messages reçus », définissez vos conditions (expéditeur, objet, a des pièces jointes, mots‑clés…), puis dans Actions cochez « Exécuter un script » et sélectionnez la macro.
  5. Testez en vous envoyant un e‑mail avec pièce jointe ; Outlook doit être ouvert au moment de la réception pour déclencher la règle.

Exemple de macro VBA robuste

Cette macro : (1) crée le dossier de destination si besoin ; (2) nettoie les noms de fichiers ; (3) préfixe par la date/heure de réception ; (4) filtre les extensions autorisées.

' Module standard (Outlook classique pour Windows)
Option Explicit

Public Sub SaveAttachmentsToDisk(Item As Outlook.MailItem)
On Error GoTo SafeExit
Dim SaveRoot As String, SubFolder As String
Dim Atmt As Attachment, FilePath As String
Dim AllowedExt As Variant, Ext As String, Dt As String

```
SaveRoot = "C:\Inbox\Attachments" ' <-- adaptez ici
AllowedExt = Array("pdf","docx","xlsx","pptx","jpg","png","zip","txt")

SubFolder = SaveRoot & "\" & Sanitize(Item.SenderEmailAddress)
EnsureFolderExists SubFolder

If Item.Attachments.Count > 0 Then
    Dt = Format(Item.ReceivedTime, "yyyy-mm-dd_hhnnss")
    For Each Atmt In Item.Attachments
        Ext = LCase$(Mid$(Atmt.FileName, InStrRev(Atmt.FileName, ".") + 1))
        If IsInArray(Ext, AllowedExt) Then
            FilePath = SubFolder & "\" & Dt & "_" & Sanitize(Atmt.FileName)
            Atmt.SaveAsFile FilePath
        End If
    Next Atmt
End If
```

SafeExit:
Exit Sub
End Sub

Private Sub EnsureFolderExists(ByVal Path As String)
If Len(Dir(Path, vbDirectory)) = 0 Then MkDir Path
End Sub

Private Function Sanitize(ByVal s As String) As String
Dim BadChars As Variant: BadChars = Array("<", ">", ":", """", "/", "", "|", "?", "\*")
Dim i As Long
For i = LBound(BadChars) To UBound(BadChars)
s = Replace\$(s, BadChars(i), "\_")
Next
Sanitize = s
End Function

Private Function IsInArray(ByVal value As String, arr As Variant) As Boolean
Dim v As Variant
For Each v In arr
If v = value Then IsInArray = True: Exit Function
Next
End Function 

Activer l’action « Exécuter un script » si elle n’apparaît pas

Sur certaines installations, l’action est masquée pour des raisons de sécurité. Créez la valeur de Registre (sauvegardez d’abord) :

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security
Nom&nbsp;: EnableUnsafeClientMailRules (DWORD)
Valeur&nbsp;: 1

Redémarrez Outlook classique. Vérifiez aussi Fichier → Options → Centre de gestion de la confidentialité → Paramètres du Centre… → Accès programmatique (l’antivirus doit être détecté pour éviter des invites).

Avantages / limites

  • Avantages : enregistrement local instantané, logique fine dans la macro (renommage, tri par expéditeur, filtrage).
  • Limites : règle côté client : Outlook doit rester ouvert. Maintenance de macro (signer le projet VBA, mises à jour Office), sécurité à surveiller.

Solution B — Automatiser côté cloud avec Microsoft Power Automate (recommandé)

Pourquoi c’est souvent le meilleur choix

  • Fonctionne 24/7, même si aucun poste n’est allumé.
  • Stocke directement dans OneDrive Entreprise ou SharePoint avec versioning, gouvernance et recherche.
  • Compatible nouvel Outlook, Outlook Mac, Outlook Web, mobiles…

Architecture type

  1. Déclencheur : When a new email arrives (V3) (boîte personnelle) ou When a new email arrives in a shared mailbox (V3) (boîte partagée). Activez « Has Attachments = Yes » et ajoutez vos filtres (expéditeur, objet, importance…).
  2. Récupération des pièces :
    • Selon l’environnement, le tableau Attachments du déclencheur contient déjà le contenu (ContentBytes). Si ce n’est pas le cas, ajoutez l’action Get Attachment (V2) en fournissant Message Id et Attachment Id.
    • Ajoutez un Apply to each sur la collection des pièces attachées.
  3. Création du fichier : utilisez OneDrive for Business — Create file (ou SharePoint — Create file) avec :
    • Folder Path : dossier cible (ex. /Pièces jointes/Factures).
    • File Name : ex. @{formatDateTime(triggerOutputs()?['body/DateTimeReceived'],'yyyy-MM-dd_HHmmss')}-@{items('Apply_to_each')?['Name']}
    • File Content : Attachment Content (ou sortie de Get Attachment).

Variantes utiles

  • Boîte partagée : choisissez le déclencheur dédié et indiquez la boîte (Shared mailbox address).
  • Tri automatique : routez vers des sous‑dossiers selon l’expéditeur, le domaine, l’objet ou l’extension (conditionnelles).
  • Renommage intelligent : concaténez date de réception, domaine de l’expéditeur et nom d’origine.
  • Déduplication : activez « Infer Content Type » et/ou utilisez « If file exists » (SharePoint) pour Renommer/Remplacer/Échouer selon votre politique.
  • Local : synchronisez le dossier OneDrive/SharePoint avec le client OneDrive ; le fichier se retrouve automatiquement sur le disque.

Gestion des erreurs & performance

  • Attachements volumineux : les connecteurs Office 365 gèrent les usages courants (jusqu’à plusieurs dizaines de Mo selon politiques). Si besoin d’ultra‑gros fichiers, préférez SharePoint via lien de téléchargement ou un flux Graph/Logic Apps.
  • Run After : configurez « Exécuter après » sur l’action de création de fichier pour journaliser les échecs (ex. dépassement de quota).
  • Concurrence : selon vos volumes, limitez la concurrence de la boucle Apply to each pour éviter les collisions de noms.

Licences & sécurité

  • Scénarios avec Office 365 Outlook, OneDrive Entreprise, SharePoint utilisent des connecteurs standard (inclus avec Microsoft 365). Les appels Graph personnalisés (HTTP with Microsoft Entra/HTTP) requièrent souvent une licence Premium.
  • Respectez vos politiques M365 : DLP, antimalware, anti‑phishing s’appliquent avant l’enregistrement.

Solution C — Administrateurs / scénarios avancés

Pour une automatisation centralisée, sans dépendance à un poste utilisateur, avec contrôle fin et journalisation.

Approche Microsoft Graph (PowerShell/Azure)

  1. Créez une application Entra ID avec permissions déléguées ou d’application adaptées (Mail.Read/Mail.ReadWrite, Files.ReadWrite.All si écriture dans OneDrive/SharePoint au nom d’un service).
  2. Planifiez une exécution (Azure Function/Logic Apps/Runbook) qui sonde la boîte ou utilise des subscriptions Graph (webhooks) pour recevoir les nouveaux messages.
  3. Pour chaque message avec pièces jointes : récupérez les FileAttachment et déposez‑les dans un stockage cible (SharePoint/Blob/SMB) avec un nom déterministe (horodatage + InternetMessageId + AttachmentId).

Exemple PowerShell (pédagogique)

# Requiert Microsoft.Graph.* (PowerShell)
# Scopes (mode délégué) : Mail.Read, Files.ReadWrite.All
Connect-MgGraph -Scopes "Mail.Read","Files.ReadWrite.All"

# Récupère les messages récents avec pièces jointes

\$since = (Get-Date).AddDays(-7).ToString("o")
\$messages = Get-MgUserMessage -UserId me -Filter "hasAttachments eq true and receivedDateTime ge \$since" -All

foreach (\$m in \$messages) {
\$atts = Get-MgUserMessageAttachment -UserId me -MessageId \$m.Id -All
foreach (\$a in \$atts) {
if (\$a.'@odata.type' -eq "#microsoft.graph.fileAttachment") {
\$name = "{0}*{1}" -f \$m.ReceivedDateTime.ToString("yyyy-MM-dd\_HHmmss"), \$a.Name
\$safe = (\$name -replace '\[<>:"/\\|?\*]', '*')
\$bytes = \[System.Convert]::FromBase64String(\$a.ContentBytes)
\$path = "C:\Inbox\Attachments\$safe"  # ou upload vers SharePoint via PnP/Graph
\[IO.File]::WriteAllBytes(\$path, \$bytes)
}
}
} 

Remarque : adaptez les permissions/tenants, choisissez un stockage d’entreprise et soignez la journalisation (Log Analytics, Application Insights).


Comparatif rapide des approches

CritèreOutlook classique + VBAPower Automate (cloud)Graph/Logic Apps (admin)
Fonctionne sans poste ouvertNonOuiOui
Compatibilité nouvel Outlook / MacNonOuiOui
Stockage local immédiatOuiVia client OneDriveOui (si cible locale/SMB)
Gouvernance, versioning, auditBasiqueÉlevéÉlevé
Effort de mise en œuvreFaible à moyenFaibleMoyen à élevé
Coût licenceInclus Office (client)Connecteurs standard inclus (Premium si HTTP/Graph)Azure/maintien à prévoir
Résilience & supervisionLimitéeBonne (run history)Excellente (Logs/alertes)

Checklist sécurité & conformité

  • Limiter la surface d’attaque : filtrez par expéditeur/domaines de confiance, restreignez les extensions autorisées (ex. excluez .exe, .js, .bat…), imposez une taille maximale.
  • Ne contournez pas les protections M365 : laissez passer l’antimalware/l’ATP/DLP avant l’enregistrement.
  • Chiffrement & droits : les messages S/MIME ou protégés (IRM) peuvent bloquer l’accès aux pièces ; documentez le comportement attendu.
  • Traçabilité : journalisez qui a enregistré quoi, où et quand (Power Automate run history, logs Graph, SIEM).
  • Rétention & eDiscovery : si vous exportez en dehors d’Exchange, alignez les durées de rétention et conservez un lien vers le message source.

Cas particuliers & bonnes pratiques

Outlook pour Mac

  • Pas de VBA dans Outlook Mac. Préférez Power Automate.
  • Le nouvel Outlook pour Mac suit la même logique (Web Add‑ins) : pas d’accès direct au système de fichiers local.

Pièces jointes « inline » vs classiques

Les images intégrées (cid) et signatures peuvent apparaître comme pièces jointes. Filtrez par extension et taille (ex. ignorer < 30 Ko et .png/.jpg insérés) pour éviter le bruit.

Longueur de chemin Windows

Si vous enregistrez localement, tenez compte des chemins > 260 caractères. Activez le support des chemins longs dans la stratégie Windows si nécessaire et réduisez les noms.

Nom de fichier unique

Préfixez avec ReceivedTime et un identifiant stable (InternetMessageId côté Graph). En Power Automate : ajoutez un suffixe aléatoire ou laissez SharePoint renommer en cas de collision.

Boîtes partagées

Utilisez le déclencheur dédié en Power Automate et des comptes de service/permissions adéquates. Pour les flux Graph, privilégiez les permissions d’application et des dossiers de sortie d’équipe (SharePoint).


FAQ

Le nouvel Outlook finira‑t‑il par supporter les macros ?
Ce n’est pas le modèle visé. Le nouvel Outlook mise sur les Web Add‑ins (Office.js) et les automatisations cloud (Power Automate). Pour du VBA/COM, restez sur Outlook classique.

Je dois absolument déposer des fichiers sur un partage réseau local ; que choisir ?
Outlook classique + VBA si un PC reste ouvert. Sinon, Graph/Logic Apps + service local (passerelle de données ou script programmé) est plus robuste.

Les règles « Exécuter un script » ne se déclenchent pas
Vérifiez que vous êtes bien dans Outlook classique, que l’action est activée (Registre), que l’antivirus est reconnu (Accès programmatique), qu’Outlook est ouvert et que votre règle est en haut de la pile (ordre des règles).

Mon flux Power Automate enregistre parfois des mini‑images
C’est le cas des images de signature/traceurs. Ajoutez un filtre de taille et d’extension dans la boucle.

Et si j’ai besoin d’un pré‑traitement (OCR, classification, etc.) ?
Insérez des étapes Power Automate AI Builder (Premium) ou un Azure Function (OCR) avant la création du fichier.


Guide de décision express

ContexteSolution recommandéePourquoi
PC Windows fixe, besoin local immédiatOutlook classique + VBARapide, local, pas de dépendance cloud
Entreprise M365, gouvernance & mobilitéPower Automate → OneDrive/SharePoint24/7, audit, versioning, conformité
Scénario multi‑boîtes, monitoring avancéGraph / Logic AppsCentralisé, scalable, DevOps‑friendly
Mac uniquementPower AutomatePas de VBA sur Mac, compatibilité totale

En résumé

  • Nouvel Outlook : pas de macros/COM → pas d’auto‑téléchargement local via règles.
  • Deux voies fiables : (1) Outlook classique + règle « Exécuter un script » (poste ouvert, registre possible) ; (2) Power Automate pour enregistrer automatiquement dans OneDrive/SharePoint (sans poste, recommandé).
  • Scénarios avancés : Graph/Logic Apps pour de grands volumes, boîtes partagées, supervision et conformité renforcée.

Vous hésitez ? Donnez votre environnement (nouvel/classique, Windows/Mac, cible : disque local, OneDrive, SharePoint) et votre politique sécurité – je vous propose un pas‑à‑pas prêt à l’emploi.

Sommaire