Pour automatiser un reporting de contrôle de gestion, Python prend l'avantage sur VBA dès qu'il s'agit de traiter des volumes importants, de croiser plusieurs fichiers (y compris de formats différents), ou de disposer d'un script lisible et maintenable dans la durée. VBA reste un choix parfaitement défendable pour une macro simple et ponctuelle sur un fichier isolé, mais mieux vaut y réfléchir à deux fois avant d'en faire un réflexe automatique dès qu'un besoin est amené à durer.
Ni idéologie ni y'a-qu'à : voici un comparatif concret entre les deux outils, avec un exemple de traitement de plusieurs fichiers, pour trancher selon votre situation réelle.
Le scénario type d'un contrôleur de gestion
Un export de l'ERP par centre de coûts. Un export de la paie. Un fichier budget maintenu à la main depuis trois ans. Chaque mois, il faut ouvrir chacun de ces fichiers, filtrer, recopier les bonnes colonnes, croiser les montants, et produire un tableau consolidé pour la clôture. Fait à la main, ce cycle prend facilement plusieurs heures, chaque mois, pour un traitement identique d'un mois sur l'autre.
C'est exactement le type de tâche que VBA a permis d'automatiser en premier, pour toute une génération d'équipes finance et contrôle de gestion. Il est intégré à Excel, ne demande aucune installation, et permet de produire un premier script qui fait le travail, que ce soit à la main ou via l'enregistreur de macros pour les besoins les plus simples. C'est ce qui en a fait le réflexe d'automatisation par défaut côté métier pendant des années.
Là où VBA montre ses limites
Le problème n'est pas que VBA "ne marche pas". Il fonctionne, et continuera de fonctionner. Le problème, c'est ce qui se passe quand l'automatisation grandit :
- Des opérations avancées qui n'existent pas nativement. Regrouper des données par catégorie, fusionner deux tableaux selon une clé commune, gérer proprement les valeurs manquantes : ce sont des opérations qui s'écrivent en une ligne avec pandas, et qui demandent souvent d'écrire soi-même toute la logique en VBA, faute d'équivalent direct.
- Une performance qui se dégrade avec le volume. Les boucles ligne par ligne, qui fonctionnent très bien sur quelques centaines de lignes, deviennent nettement plus lentes dès que le fichier dépasse quelques dizaines de milliers de lignes. Il existe des contournements, mais ils restent plafonnés et demandent une maîtrise avancée de VBA, en décalage avec la fréquence de ces besoins.
- Un croisement de sources hétérogènes plus limité. Combiner un CSV, un fichier Excel et une extraction de base de données dans le même traitement demande, en VBA, de gérer chaque format avec sa propre logique d'ouverture et de lecture. Python le fait avec une syntaxe quasi identique quel que soit le format source.
- Un code prisonnier du classeur qui l'héberge. Une macro VBA est intimement liée au fichier Excel qui la contient. La partager, la versionner proprement (avec un historique clair des modifications), ou la faire tourner ailleurs que sur un poste Excel en local, n'a rien de naturel.
- Des politiques de sécurité qui bloquent l'exécution. De nombreuses directions IT désactivent les macros par défaut, ce qui ajoute une friction que Python n'a pas.
Rien de tout ça ne veut dire qu'il faille bannir VBA. Mais ça vaut le coup d'y réfléchir à deux fois avant d'en faire le choix par défaut pour un besoin voué à durer, et sans doute, à évoluer.
Comment Python traite le même besoin
Voici, à titre d'exemple schématique, comment on traiterait la consolidation puis l'agrégation de plusieurs fichiers Excel mensuels avec Python et la librairie pandas (la référence pour manipuler des données) : on parcourt un dossier, on concatène chaque fichier trouvé, puis on regroupe les montants par centre de coûts.
import pandas as pd
from pathlib import Path
# --- Paramètres ---
dossier_source = Path("exports_mensuels")
# --- Traitement ---
fichiers = dossier_source.glob("*.xlsx")
tableaux = [pd.read_excel(f) for f in fichiers]
donnees = pd.concat(tableaux, ignore_index=True)
rapport = (
donnees
.groupby("centre_de_cout", as_index = False)
.agg({"montant":"sum"})
)
rapport.to_excel("rapport_mensuel.xlsx", index=False)
Une quinzaine de lignes, une logique lisible de haut en bas (on lit, on regroupe, on exporte), et ce script traite trois fichiers ou trois cents fichiers exactement de la même façon : il suffit de déposer les nouveaux exports dans le dossier, sans rien changer au code.
Voici, à titre de comparaison, une version VBA qui répond au même besoin :
Sub Rapport_Consolide()
Dim dossier As String, fichier As String
Dim classeurSource As Workbook
Dim derniereLigne As Long, i As Long
Dim centreCout As String, montant As Double
Dim totaux As Object
Set totaux = CreateObject("Scripting.Dictionary")
dossier = "C:\Users\Utilisateur\Desktop\exports_mensuels\"
fichier = Dir(dossier & "*.xlsx")
Do While fichier <> ""
Set classeurSource = Workbooks.Open(dossier & fichier)
derniereLigne = classeurSource.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To derniereLigne
centreCout = classeurSource.Sheets(1).Cells(i, 1).Value
montant = classeurSource.Sheets(1).Cells(i, 6).Value
If totaux.Exists(centreCout) Then
totaux(centreCout) = totaux(centreCout) + montant
Else
totaux.Add centreCout, montant
End If
Next i
classeurSource.Close False
fichier = Dir()
Loop
Dim cle As Variant, ligneCible As Long
ligneCible = 2
For Each cle In totaux.Keys
ThisWorkbook.Sheets(1).Cells(ligneCible, 1).Value = cle
ThisWorkbook.Sheets(1).Cells(ligneCible, 2).Value = totaux(cle)
ligneCible = ligneCible + 1
Next cle
End Sub
L'agrégation par centre de coût s'ajoute ici directement dans la boucle de lecture, à l'aide d'un objet Dictionary : la structure la plus proche de ce que fait nativement groupby en pandas. Elle demande une quinzaine de lignes supplémentaires (déclaration de l'objet, vérification de l'existence de la clé, boucle finale d'écriture des résultats), quand pandas condense la même opération en un seul .groupby(...).agg(...).
Le comparatif, critère par critère
| Critère | VBA | Python |
|---|---|---|
| Installation | Intégré à Excel | Gratuit, quelques minutes à installer |
| Opérations avancées (regroupement, fusion, valeurs manquantes) | Nécessite d'écrire la logique soi-même, faute d'équivalent direct | Disponibles nativement avec pandas |
| Gros volumes (100 000+ lignes) | Ralentit fortement sans optimisation avancée | Traite confortablement plusieurs millions de lignes |
| Croisement de sources hétérogènes | Chaque format (CSV, Excel, base de données) demande sa propre logique | Même syntaxe quel que soit le format source |
| Lisibilité et maintenabilité | Délicat à documenter et à versionner | Script modulaire, commentable, versionnable |
| Portabilité | Lié à Excel desktop | Indépendant d'Excel, exécutable n'importe où |
| Sécurité en entreprise | Fréquemment bloqué par les politiques de macros | Pas de restriction équivalente |
| Génération par IA | Les IA produisent plus rarement du VBA idiomatique | Les IA génèrent du Python par défaut |
Et la fonctionnalité "Python dans Excel", elle ne suffit pas ?
Bonne question, et de plus en plus fréquente : depuis 2024, Microsoft propose "Python dans Excel", qui permet d'écrire une formule Python directement dans une cellule (=PY()), avec accès aux bibliothèques Python les plus courantes dont pandas. Depuis avril 2026, Copilot peut même mobiliser Python automatiquement lors de l'édition d'un classeur.
C'est un signal fort : Microsoft lui-même valide que Python est en train de devenir la référence, y compris à l'intérieur de ses propres outils. Mais cette fonctionnalité ne remplace pas un script Python autonome pour ce que décrit cet article, pour plusieurs raisons concrètes : le calcul s'exécute sur le cloud Microsoft plutôt qu'en local, elle nécessite un abonnement Microsoft 365 Business ou Enterprise éligible (avec des quotas de calcul limités hors option payante), et elle reste pensée pour des formules ponctuelles dans une feuille, pas pour un pipeline complet qui lit un dossier entier de fichiers, applique une logique métier, et produit un livrable prêt à partager. Un script Python autonome, lui, est gratuit, s'exécute où vous voulez, et n'a pas ces limites.
VBA est-il en train de disparaître ?
Non, pas officiellement : Microsoft n'a annoncé aucune date de fin de support pour VBA, et les macros existantes continueront de fonctionner. Ce genre de pronostic n'est d'ailleurs pas nouveau : le discours sur la mort annoncée de VBA circule depuis plus d'une décennie, sans jamais s'être traduit par un arrêt réel.
Ce qui change aujourd'hui, ce n'est donc pas le discours en lui-même, mais ce qui le soutient. Ce ne sont plus des rumeurs, mais des investissements produit concrets et documentés : Office Scripts d'abord, puis l'intégration native de Python dans Excel, puis Copilot capable de mobiliser Python directement dans un classeur depuis avril 2026. VBA reste largement utilisé et le restera pendant longtemps. Mais ce n'est clairement plus l'outil dans lequel Microsoft investit pour l'avenir.
Faut-il tout migrer de VBA vers Python ?
Non, et ce n'est pas l'enjeu. Une macro ponctuelle sur un fichier isolé peut très bien rester en VBA : le jeu n'en vaut pas la chandelle. La bascule vers Python a du sens dès qu'une des conditions suivantes est réunie : l'automatisation est récurrente, elle touche des volumes conséquents, elle opère des transformations de données avancées, elle croise plusieurs fichiers ou formats, ou elle a vocation à évoluer dans le temps.
Et l'argument qui, à terme, pèse le plus lourd : la compétence Python ne s'arrête pas à Excel. Une fois acquise, elle sert aussi bien à croiser des fichiers, qu'à envoyer des mails automatiquement, lire des PDF, ou interroger une API, quand VBA reste cantonné à l'écosystème Office.
En résumé
- VBA reste adapté à une automatisation simple et ponctuelle sur un fichier isolé.
- Python prend l'avantage dès que les volumes augmentent, que plusieurs fichiers ou formats doivent être croisés, ou que des opérations de traitement plus avancées sont nécessaires.
- Microsoft n'annonce pas la fin de VBA, mais ses investissements produit (Office Scripts, Python dans Excel) vont clairement ailleurs.
- La fonctionnalité "Python dans Excel" est un complément, en aucun cas un substitut, à un script Python autonome pour l'automatisation de processus complets.
Si votre besoin ressemble davantage à un croisement de fichiers hétérogènes qu'à une base de données déjà en place, notre comparatif Python vs Power Query et notre article sur les doublons de clé dans une RECHERCHEV creusent deux angles complémentaires à celui-ci. Retrouvez aussi l'ensemble de nos articles sur Python pour les métiers.