C'est l'une des questions qu'on me pose le plus souvent : pour automatiser des fichiers Excel, faut-il choisir VBA ou Python ? La réponse honnête est qu'aucun des deux n'est meilleur dans l'absolu. VBA est le langage intégré à Excel : il excelle quand tout se passe dans un classeur. Python est un langage généraliste : il prend l'avantage dès que les volumes grossissent, que les sources se multiplient ou que le traitement doit tourner tout seul.
Dans cet article, je compare les deux critère par critère, je vous montre la même tâche codée dans chaque langage, puis je vous donne ma recommandation selon votre situation. Je développe dans les deux au quotidien : je n'ai aucun intérêt à vous pousser vers l'un plutôt que l'autre.
La réponse courte. Choisissez VBA si vos données tiennent dans Excel, si vos équipes doivent garder leurs fichiers habituels et si l'outil se lance depuis un bouton. Choisissez Python pour les gros volumes, les dizaines de fichiers à fusionner, les traitements planifiés, les API et les bases de données. Et n'hésitez pas à combiner les deux.
VBA et Python en deux mots
VBA, le langage intégré à Excel
VBA (Visual Basic for Applications) est livré avec Excel, Word, Outlook et Access depuis les années 1990. Le code est enregistré dans le classeur lui-même, au format .xlsm, et s'écrit dans l'éditeur qui s'ouvre avec Alt+F11. Il pilote tout ce que vous faites à la souris : cellules, onglets, mises en forme, graphiques, impressions, et même d'autres logiciels Office comme Outlook. Son grand avantage : il est déjà là, sur chaque poste équipé d'Excel pour Windows.
Python, le couteau suisse de la donnée
Python est un langage de programmation gratuit et libre, utilisé partout, de l'analyse de données au développement web. Il ne vit pas dans un classeur : c'est un programme à part, qui lit et écrit les fichiers Excel grâce à des bibliothèques spécialisées. Les deux plus utiles ici sont pandas, qui manipule des tableaux de données de plusieurs millions de lignes, et openpyxl, qui lit et écrit les fichiers .xlsx, mise en forme comprise. Python sait aussi lire des PDF, envoyer des e-mails, interroger une API ou une base de données SQL.
Le comparatif, critère par critère
Environnement et installation
VBA ne demande rien : il est inclus dans Excel pour Windows, y compris avec Microsoft 365, et le fichier .xlsm se partage comme n'importe quel classeur. Python doit être installé, avec ses bibliothèques, sur le poste qui exécute le script. Ce n'est pas forcément un obstacle pour l'utilisateur final : un script peut être livré sous forme de programme Windows (.exe) qui se lance d'un double-clic, sans rien installer. Mais c'est un élément de plus à prévoir, surtout si votre service informatique contrôle les logiciels autorisés.
Volumes de données et rapidité
Une feuille Excel est limitée à 1 048 576 lignes, et un classeur devient lent bien avant. VBA reste rapide sur quelques dizaines de milliers de lignes, à condition de travailler en mémoire plutôt que cellule par cellule. Python, avec pandas, traite des fichiers de plusieurs millions de lignes (dans la limite de la mémoire du poste), lit des centaines de fichiers CSV d'un coup et n'a pas besoin d'ouvrir Excel pour le faire. Sur les gros volumes, l'écart est net.
Planification et exécution automatique
Une macro VBA s'exécute dans Excel : il faut qu'Excel soit ouvert, dans une session Windows ouverte, et le plus souvent qu'une personne clique sur le bouton. Il existe des montages pour lancer une macro à heure fixe, mais ils restent fragiles : une boîte de dialogue inattendue suffit à tout bloquer. Un script Python, lui, se lance sans interface. Le Planificateur de tâches de Windows, ou un serveur, l'exécute chaque nuit ou chaque lundi à 7 h ; il écrit un journal et peut vous prévenir par e-mail en cas d'anomalie. Personne n'a besoin d'y penser.
Interface et prise en main
C'est le grand atout de VBA : l'outil vit dans le classeur que vos équipes connaissent. Un bouton, un formulaire de saisie (UserForm), des listes déroulantes, des messages d'alerte : personne n'a à changer ses habitudes. Python n'a pas d'interface par défaut ; on le lance d'un double-clic, depuis une petite fenêtre ou depuis un bouton dans Excel. Pour un outil de saisie quotidienne, VBA est souvent plus naturel.
Travail à plusieurs et partage
Le code VBA est enfermé dans chaque copie du classeur. Quand le fichier circule par e-mail et se duplique sur dix postes, une correction doit être reportée dans dix fichiers, et les versions divergent vite (« Suivi_v3_final_OK.xlsm »). Un script Python est un fichier unique, rangé à un seul endroit, dont l'historique se suit facilement avec un outil de gestion de versions comme Git. En revanche, ni l'un ni l'autre ne remplace une vraie base de données quand plusieurs personnes saisissent en même temps : dans ce cas, une base de données SQL reliée à Excel est la bonne réponse.
Maintenance et évolutions
L'éditeur VBA a peu changé depuis plus de vingt ans : peu d'outils pour tester le code ou comparer des versions, peu de bibliothèques externes. Mais le langage est stable, et un code VBA bien écrit tourne pendant des années sans retouche. Python offre un écosystème immense, des outils modernes et un code souvent plus court ; en contrepartie, ses bibliothèques évoluent et une mise à jour doit parfois être vérifiée. Dans les deux cas, ce qui rend un outil maintenable, c'est la qualité du code : des noms clairs, des commentaires, des paramètres sortis du code.
Sécurité
Les macros sont une cible classique des virus : Excel les désactive par défaut, bloque celles des fichiers venus d'Internet, et certaines entreprises les interdisent purement et simplement. Un outil VBA interne s'utilise sans difficulté avec les bons réglages (emplacement approuvé, signature du code), mais il faut les prévoir. Python n'est pas concerné par ces blocages, mais l'installation d'un programme ou l'exécution d'un .exe peut elle aussi être encadrée par votre service informatique. Dans les deux cas, vos données restent sur vos postes, sauf si l'outil est conçu pour les envoyer (API, e-mail).
Coût
Les deux langages sont gratuits : VBA est compris dans votre licence Excel, Python est un logiciel libre. Le coût réel, c'est le temps de développement et de maintenance. Pour une macro simple ou un script court, l'écart est faible : mes prix de départ sont de 40 € pour une automatisation VBA et de 50 € pour un script Python. Ce qui fait varier un devis, c'est la complexité de la tâche et le nombre de cas particuliers, bien plus que le langage. Le détail figure sur la page tarifs et formules, et l'article combien coûte l'automatisation d'un fichier Excel explique ce qui fait varier un prix.
Tableau comparatif VBA vs Python
| Critère | VBA | Python |
|---|---|---|
| Installation | Aucune, inclus dans Excel pour Windows | Python et ses bibliothèques, ou programme .exe prêt à lancer |
| Emplacement du code | Dans le classeur (.xlsm) | Dans un fichier séparé (.py) |
| Volumes | Confortable jusqu'à quelques dizaines de milliers de lignes | Millions de lignes, centaines de fichiers |
| Exécution planifiée | Possible mais fragile (Excel doit être ouvert) | Simple et fiable (Planificateur de tâches, serveur) |
| Interface utilisateur | Boutons et formulaires, tout dans Excel | Double-clic, petite fenêtre ou bouton dans Excel |
| Travail à plusieurs | Code copié dans chaque classeur | Script unique, versions suivies |
| API, PDF, bases SQL | Faisable, souvent laborieux | Point fort, bibliothèques dédiées |
| Pilotage d'Excel et d'Outlook | Natif : mise en forme, impression, e-mails | Possible, mais moins direct |
| Mac et Excel pour le web | Mac avec restrictions, rien dans Excel pour le web | Indépendant d'Excel (Windows, Mac, Linux) |
| Sécurité | Macros bloquées par défaut, à autoriser | Installation ou .exe parfois encadrés |
| Coût de l'outil | Gratuit (compris dans Excel) | Gratuit (logiciel libre) |
| Idéal pour | Outils de saisie, rapports mis en forme, PDF, e-mails | Gros volumes, consolidation, traitements planifiés, API |
La même tâche codée en VBA et en Python
Pour rendre la comparaison concrète, prenons une tâche courante. Un onglet « Ventes » contient une ligne par vente, avec la région en colonne A et le montant en colonne B (données fictives). On veut le total des ventes par région dans un tableau de synthèse.
La version VBA
Option Explicit
' Total des ventes par région : lit l'onglet "Ventes"
' (A = région, B = montant) et écrit le résultat dans "Synthese"
Sub TotalParRegion()
Dim donnees As Variant, totaux As Object, cle As Variant
Dim i As Long, lig As Long, wsS As Worksheet
' 1. Lire toutes les données en mémoire, en une seule fois
donnees = ThisWorkbook.Worksheets("Ventes") _
.Range("A1").CurrentRegion.Value
Set totaux = CreateObject("Scripting.Dictionary")
' 2. Cumuler les montants par région (ligne 1 = en-têtes)
For i = 2 To UBound(donnees, 1)
totaux(donnees(i, 1)) = totaux(donnees(i, 1)) + donnees(i, 2)
Next i
' 3. Écrire la synthèse
Set wsS = ThisWorkbook.Worksheets("Synthese")
wsS.Cells.ClearContents
wsS.Range("A1:B1").Value = Array("Région", "Total")
lig = 2
For Each cle In totaux.Keys
wsS.Cells(lig, 1).Value = cle
wsS.Cells(lig, 2).Value = totaux(cle)
lig = lig + 1
Next cle
End Sub
La macro lit toutes les données en mémoire d'un seul coup (bien plus rapide qu'une lecture cellule par cellule), cumule les montants dans un dictionnaire, c'est-à-dire une liste de paires « région, total », puis écrit le résultat. Elle se lance depuis un bouton, dans le classeur ouvert, sans rien installer.
La version Python
import pandas as pd
# 1. Lire l'onglet "Ventes" (colonnes Région et Montant)
ventes = pd.read_excel("ventes.xlsx", sheet_name="Ventes")
# 2. Cumuler les montants par région
synthese = ventes.groupby("Région", as_index=False)["Montant"].sum()
synthese = synthese.rename(columns={"Montant": "Total"})
# 3. Écrire la synthèse dans un classeur séparé
synthese.to_excel("synthese_ventes.xlsx", sheet_name="Synthese",
index=False)
print(f"{len(ventes)} ventes lues, {len(synthese)} régions")
Le script est plus court, car pandas sait regrouper et additionner nativement (groupby). Il nécessite Python et deux bibliothèques, installées une fois pour toutes avec la commande pip install pandas openpyxl. J'écris volontairement la synthèse dans un fichier séparé : réécrire un classeur existant depuis Python est possible, mais l'opération échoue si le fichier est ouvert dans Excel, et elle peut faire disparaître certains éléments (formes, boutons, macros).
Ce que montre la comparaison
La version Python tient en deux fois moins de lignes, mais la longueur ne dit pas tout. La macro VBA s'utilise immédiatement, par n'importe qui, depuis le classeur. Le script Python demande un environnement installé, mais il traiterait de la même façon un fichier de deux millions de lignes ou cinquante fichiers d'un dossier, en ne changeant que l'étape de lecture. Le bon choix dépend donc moins du code que du contexte : qui lance le traitement, à quelle fréquence, sur quels volumes.
Pour aller plus loin en VBA. Les trois macros commentées de mon guide pour automatiser Excel avec VBA (consolider un dossier de fichiers, exporter en PDF, envoyer un e-mail Outlook) complètent bien cet exemple.
Cas d'usage typiques de VBA et de Python
Quand VBA est le meilleur choix
- Un formulaire de saisie pour enregistrer des commandes, des interventions ou des mouvements de stock.
- Un rapport mensuel mis en forme et exporté en PDF à partir d'un classeur existant.
- L'envoi d'e-mails personnalisés depuis Outlook, avec pièce jointe.
- La génération de documents : devis, bons de livraison, étiquettes.
- Le contrôle des saisies et la mise en évidence des anomalies dans un fichier partagé.
- La consolidation de quelques dizaines de classeurs de même structure.
Un exemple tiré de mon expérience : en entreprise industrielle, j'ai automatisé en VBA des traitements de données qui ont permis de gagner 3 heures chaque semaine, et développé la génération automatique d'étiquettes produits à partir d'une base d'images et d'une configuration par produit, avec enregistrement des données en base. Les équipes travaillaient déjà dans Excel : VBA était le choix évident.
Quand Python est le meilleur choix
- Fusionner chaque jour des centaines d'exports CSV ou de fichiers Excel.
- Traiter des fichiers trop lourds pour Excel : journaux de machines, historiques de ventes sur plusieurs années.
- Produire un rapport chaque matin à 7 h et l'envoyer par e-mail, sans intervention.
- Récupérer des données par API : commandes d'une boutique en ligne, données d'un ERP ou d'un logiciel métier.
- Alimenter une base de données SQL ou en extraire des indicateurs.
- Extraire des informations de dizaines de PDF.
Autre exemple vécu : en entreprise industrielle, j'ai conçu en Python des tableaux de bord de suivi de la production (rendement, cadences, arrêts) qui ont contribué à +10 % de capacité de production. Le calcul régulier d'indicateurs à partir de nombreux relevés est typiquement un terrain où Python est à l'aise. Si c'est votre besoin, voyez mon offre de tableaux de bord KPI.
Combiner les deux : Python prépare, Excel présente
Dans beaucoup de projets, la meilleure réponse n'est pas « l'un ou l'autre » mais « les deux, chacun à sa place ». Le schéma classique : un script Python fait le travail lourd (lire les exports, nettoyer, fusionner, calculer, alimenter une base), et Excel reste l'interface que vos équipes connaissent, avec un bouton pour actualiser, des formulaires et des rapports mis en forme par VBA.
Concrètement, un bouton dans Excel peut lancer le script Python, attendre qu'il ait terminé, puis actualiser le classeur :
Option Explicit
' Lance le script Python (livré en .exe), attend la fin, puis actualise
Sub ActualiserDonnees()
Dim wsh As Object, retour As Long
Set wsh = CreateObject("WScript.Shell")
' Run(commande, 0 = fenêtre masquée, True = attendre la fin)
retour = wsh.Run("""C:\Outils\preparer_donnees.exe""", 0, True)
If retour <> 0 Then
MsgBox "Le script a échoué (code " & retour & ").", vbExclamation
Exit Sub
End If
ThisWorkbook.RefreshAll ' recharge les requêtes du classeur
MsgBox "Données à jour.", vbInformation
End Sub
Le script peut aussi tourner seul chaque nuit et déposer un fichier propre que le classeur relit le matin, par exemple avec une requête Power Query. Des bibliothèques comme xlwings permettent même d'appeler des fonctions Python directement depuis Excel. C'est l'approche que je privilégie quand un outil Excel existant atteint ses limites : on garde ce qui fonctionne et on ne déplace que le traitement lourd.
Et Power Query, Office Scripts ?
VBA et Python ne sont pas les seules options. Deux outils de Microsoft méritent d'être cités, car ils répondent parfois mieux à certains besoins.
- Power Query, intégré à Excel (onglet Données, Obtenir des données), importe, nettoie et fusionne des données sans écrire de code. Il peut par exemple combiner tous les fichiers d'un dossier, puis tout recalculer d'un clic sur « Actualiser ». C'est une excellente solution pour une préparation de données répétitive. En revanche, il ne sait pas agir : envoyer un e-mail, créer un PDF par client ou enregistrer une saisie.
- Office Scripts sont des scripts écrits en TypeScript, disponibles avec les abonnements Microsoft 365 professionnels, d'abord dans Excel pour le web. Associés à Power Automate, ils automatisent des classeurs stockés sur OneDrive ou SharePoint, y compris de façon planifiée. Ils conviennent aux entreprises qui travaillent dans le cloud de Microsoft, mais n'accèdent pas aux fichiers de votre poste et ne pilotent pas directement d'autres logiciels : l'envoi d'e-mails, par exemple, passe par Power Automate.
Vous entendrez aussi parler de Python dans Excel (la fonction PY), proposé dans certaines offres Microsoft 365. Le code s'exécute dans le cloud de Microsoft et sert à analyser les données du classeur. Il ne remplace ni VBA ni un script Python classique pour automatiser des fichiers, des e-mails ou des traitements planifiés.
Ma recommandation : VBA ou Python selon votre profil
- TPE ou service administratif, tout se passe dans Excel sur des postes Windows : commencez par VBA. Rien à installer, vos collègues gardent leurs fichiers, et une première macro peut être livrée en quelques jours. Voyez mon offre d'automatisation Excel VBA.
- Responsable de production ou de logistique, avec des relevés volumineux ou des exports de plusieurs logiciels : choisissez Python, éventuellement complété par un tableau de bord mis à jour automatiquement. Voyez mes scripts Python d'automatisation.
- Cabinet comptable ou réseau d'agences qui consolide des dizaines de fichiers chaque mois : Python pour la consolidation et les contrôles, Excel (et au besoin VBA) pour la restitution aux clients ou à la direction.
- Équipes sur Mac ou dans Excel pour le web : écartez VBA. Selon le besoin, Power Query, Office Scripts ou un script Python exécuté sur un poste ou un serveur.
- Plusieurs personnes saisissent les mêmes données en même temps : la question n'est plus le langage mais la structure. Une base de données SQL avec une interface Excel ou Access sera plus solide.
- Un classeur VBA existant devient lent : avant de tout réécrire, une optimisation (traitement en mémoire, suppression des Select) suffit souvent. Sinon, déplacez seulement le traitement lourd vers Python.
Quand j'étudie un projet, je propose toujours la solution la plus simple qui tiendra dans le temps, et le langage ne change rien au principe du devis. Le diagnostic de 30 minutes est gratuit : vous me montrez votre fichier, je vous dis ce que je ferais et avec quel outil, puis vous recevez un devis à prix fixe. Vous pouvez consulter mes tarifs à prix fixe, relire mon guide pratique pour automatiser Excel avec VBA ou me décrire votre besoin : je vous réponds sous 24 h.
Questions fréquentes
Python va-t-il remplacer VBA dans Excel ?
À ce jour, Microsoft n'a pas annoncé la fin de VBA dans Excel pour Windows, et d'innombrables classeurs d'entreprise en dépendent. Les nouveautés vont plutôt vers Office Scripts et Python dans Excel, pensés pour le cloud. Un outil VBA bien écrit aujourd'hui restera utilisable pendant des années ; pour un outil qui doit fonctionner dans Excel pour le web, il faut en revanche choisir une autre technologie.
Peut-on lancer un script Python depuis un bouton Excel ?
Oui. Une courte macro VBA peut lancer le script, ou sa version .exe, attendre la fin du traitement puis actualiser le classeur. Des bibliothèques comme xlwings vont plus loin et permettent d'appeler des fonctions Python depuis Excel. Vos équipes gardent leur classeur habituel, avec la puissance de Python derrière le bouton.
Lequel est le plus rapide, VBA ou Python ?
Sur de gros volumes, Python avec pandas est nettement plus rapide, surtout pour lire de nombreux fichiers ou regrouper des centaines de milliers de lignes. Sur un classeur de quelques milliers de lignes, une macro VBA bien écrite, qui travaille en mémoire, s'exécute en quelques secondes et la différence ne se voit pas. Une macro lente est d'ailleurs souvent une macro à optimiser plutôt qu'à réécrire.
Mon service informatique bloque les macros : que faire ?
Votre service informatique peut autoriser un outil précis en le plaçant dans un emplacement approuvé ou en signant son code. Si les macros restent interdites, un script Python ou Power Query permettent d'automatiser sans macro, à condition que ces outils soient eux aussi autorisés. Je vérifie ces contraintes dès le diagnostic pour proposer une solution compatible avec vos règles de sécurité.
