Article principal : Maîtriser Excel pour PME : le guide complet 2026
Ce tutoriel s’inscrit dans la série Excel pour PME. Pour la vue d’ensemble du sujet, lire d’abord le guide principal.
Pourquoi écrire du Python directement dans Excel change l’analyse de données
Pendant des années, l’analyste qui voulait sortir Excel de son cadre devait jongler entre deux univers : nettoyer dans Excel, exporter en CSV, ouvrir Jupyter, charger avec pandas, calculer, exporter, et recoller les résultats dans le classeur. Cette friction tuait l’élan exploratoire et limitait le recours à Python aux cas vraiment difficiles. Depuis septembre 2024, Python dans Excel est passé en disponibilité générale chez Microsoft : on tape =PY( dans une cellule, on écrit du code pandas, numpy ou matplotlib, et le résultat tombe dans la feuille comme une formule normale. Ce tutoriel construit pas-à-pas une analyse complète sur un classeur de ventes, depuis l’activation jusqu’à la production d’un graphique matplotlib lié dynamiquement aux données.
L’objectif est concret. À la fin, vous saurez activer Python dans Excel, lire des plages avec xl(), manipuler un DataFrame pandas, basculer entre objet Python et valeurs Excel, produire un graphique matplotlib intégré et chaîner plusieurs cellules Python. Le tutoriel suppose Excel pour Microsoft 365 sur Windows (Mac depuis avril 2025, Web non encore supporté pour l’exécution) avec un abonnement Business, Enterprise ou Famille/Personnel selon les phases de déploiement.
Étape 1 — Vérifier l’éligibilité de votre abonnement
Python dans Excel est livré gratuitement avec les abonnements Microsoft 365 Business et Enterprise sur le canal Current pour Windows. Pour les abonnements Famille et Personnel, l’accès est passé en disponibilité générale courant 2025. La page officielle de disponibilité récapitule les canaux supportés. Avant de toucher à la moindre cellule, il faut donc vérifier deux choses : la version d’Excel installée et le canal de mise à jour.
Pour vérifier la version, ouvrir Excel, cliquer sur Fichier → Compte → À propos d’Excel. La fenêtre affiche le numéro de build complet. Pour Windows, viser la version 2407 (Build 17830.20128) ou ultérieure. Pour Mac, viser la version 16.96 (Build 25041326) ou ultérieure. Si la version est antérieure, lancer une mise à jour manuelle via Fichier → Compte → Options de mise à jour → Mettre à jour maintenant.
La fonctionnalité ne s’affiche pas immédiatement après mise à jour : Microsoft déploie progressivement par vagues. Si la commande Python n’apparaît pas dans le ruban Formules, attendre quelques jours puis réessayer, ou rejoindre le programme Microsoft 365 Insider sur le canal Bêta pour y accéder en avance.
Étape 2 — Activer Python dans une cellule
Une fois la fonctionnalité disponible, trois moyens d’écrire du Python coexistent. Le premier passe par le ruban : sélectionner une cellule, ouvrir l’onglet Formules, cliquer sur Insérer Python. La cellule bascule en mode Python — un petit logo PY s’affiche à gauche de la cellule et la barre de formule passe en fond vert clair. Le second est plus rapide : taper directement =PY( dans une cellule, valider la parenthèse, et la cellule bascule automatiquement. Le troisième passe par le raccourci clavier officiel Ctrl+Alt+Maj+P qui active le mode Python sur la cellule courante sans aucun clic.
=PY("bonjour " + "Excel")
En appuyant sur Ctrl+Entrée (et non pas Entrée seul, qui passe à la ligne dans le code Python), Excel envoie le code à Microsoft Cloud, exécute, et affiche le résultat. Pour ce premier exemple, la cellule renvoie bonjour Excel. La latence est de l’ordre de la seconde la première fois, puis quasi-immédiate sur les exécutions suivantes du même classeur. La connexion internet est obligatoire — Python ne tourne pas en local, il tourne dans le cloud Microsoft.
Étape 3 — Lire des données Excel avec la fonction xl()
Pour qu’un calcul Python ait du sens, il doit pouvoir consommer les données du classeur. La fonction native xl() sert à cela. Elle accepte une plage de cellules ou une référence de tableau structuré et renvoie un DataFrame pandas (pour les plages 2D) ou une Series (pour les plages 1D). Imaginons une feuille Ventes avec un tableau structuré nommé tblVentes qui contient les colonnes Date, Produit, Quantité, Montant.
=PY(
df = xl("tblVentes[#Tout]", headers=True)
df.head()
)
L’argument headers=True est crucial : sans lui, la première ligne est traitée comme une donnée et les noms de colonnes deviennent 0, 1, 2, 3. Avec headers=True, pandas reconnaît les en-têtes et les utilise comme noms de colonnes. La sortie de df.head() est par défaut un objet Python — la cellule affiche un petit cartouche DataFrame qu’on déplie en aperçu. Pour obtenir les valeurs étalées dans les cellules voisines comme un tableau Excel classique, il faut basculer en mode Valeur Excel via le menu contextuel à gauche de la cellule, ou via le raccourci Ctrl+Alt+Maj+M.
Étape 4 — Manipuler le DataFrame avec pandas
Une fois les données chargées, on enchaîne avec les opérations pandas habituelles. Pandas est livré par défaut dans le runtime Python d’Excel — pas besoin de l’installer. Imaginons qu’on veut le chiffre d’affaires total par produit, trié par ordre décroissant. Le code tient en trois lignes.
=PY(
df = xl("tblVentes[#Tout]", headers=True)
ca_produit = df.groupby("Produit")["Montant"].sum().sort_values(ascending=False)
ca_produit
)
La sortie ca_produit est une Series pandas indexée par produit, avec les montants en valeurs. En basculant en mode Valeur Excel, la Series s’étale en deux colonnes : noms de produits et montants. C’est un tableau dynamique au sens Excel, qu’on peut référencer dans d’autres formules par la cellule racine suivie du caractère # (déversement). Si la cellule Python est en D2, la formule =D2# dans une autre cellule renvoie l’intégralité du tableau déversé.
Les opérations pandas typiques sont toutes disponibles : filter, merge, pivot_table, resample pour les séries temporelles, describe pour les statistiques descriptives. Pour une jointure entre deux tableaux structurés du classeur, on charge chacun avec xl(), on fusionne avec pd.merge(), et on retourne le résultat. Le pattern est exactement celui qu’on aurait dans un notebook Jupyter, sauf qu’il vit dans la cellule.
Étape 5 — Produire un graphique matplotlib intégré
La vraie valeur se révèle avec les graphiques. Matplotlib est aussi pré-installé, importé par convention sous l’alias plt. Un graphique généré par matplotlib s’affiche dans la cellule Python comme une image flottante qu’on peut redimensionner, exactement comme une image collée. Reprenons les ventes par produit et faisons-en un graphique en barres horizontal.
=PY(
import matplotlib.pyplot as plt
df = xl("tblVentes[#Tout]", headers=True)
ca_produit = df.groupby("Produit")["Montant"].sum().sort_values()
fig, ax = plt.subplots(figsize=(8, 5))
ca_produit.plot(kind="barh", ax=ax, color="#0078d4")
ax.set_xlabel("Chiffre d'affaires (XOF)")
ax.set_title("Ventes par produit")
plt.tight_layout()
fig
)
Important : la dernière ligne fig seule (sans plt.show()) est ce qui force Excel à capturer la figure et à l’afficher. Sans cette ligne, la cellule renvoie None. Le graphique apparaît dans la cellule, à côté du logo PY ; un clic sur le graphique permet de l’agrandir, ou de le déplacer dans la feuille en cliquant-droit puis Convertir en image. Le rendu est dynamique : modifier une valeur dans le tableau structuré déclenche un recalcul Python et un nouveau rendu du graphique en quelques secondes.
Étape 6 — Chaîner plusieurs cellules Python
Pour les analyses qui dépassent quinze lignes de code, écrire tout dans une cellule devient illisible. Excel applique un ordre d’exécution Python documenté comme row-major : la calculation parcourt chaque ligne de gauche à droite (de la colonne A jusqu’à XFD), puis descend ligne par ligne — ce qui veut dire qu’une cellule Python plus à droite ou plus bas dans la feuille peut référencer les variables d’une cellule Python située avant elle dans cet ordre. Cette chaîne implicite est ce qui rend Python dans Excel utilisable pour des analyses sérieuses.
# Cellule A1 — Chargement
=PY(
df = xl("tblVentes[#Tout]", headers=True)
df["Date"] = pd.to_datetime(df["Date"])
df.shape
)
# Cellule A3 — Agrégation mensuelle (utilise df defini en A1)
=PY(
mensuel = df.set_index("Date").resample("M")["Montant"].sum()
mensuel
)
# Cellule A5 — Graphique (utilise mensuel defini en A3)
=PY(
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10, 4))
mensuel.plot(ax=ax, marker="o", color="#0078d4")
ax.set_title("CA mensuel")
plt.tight_layout()
fig
)
Cette structure en pipeline est lisible et chaque cellule peut être ajustée indépendamment. La règle à retenir est qu’on n’utilise pas import dans toutes les cellules — pandas est déjà importé sous l’alias pd par défaut, et matplotlib n’a besoin d’être importé qu’une fois par feuille. Si on bascule entre feuilles, l’état est isolé : les variables d’une feuille ne sont pas accessibles depuis une autre.
Étape 7 — Basculer entre Objet Python et Valeur Excel
Le mode de sortie d’une cellule Python détermine ce que les autres formules Excel peuvent en faire. Le mode Objet Python est le défaut — la cellule contient un objet pandas ou un DataFrame, qu’on peut passer à une autre cellule Python via une variable, mais que les formules Excel classiques ne peuvent pas exploiter. Le mode Valeur Excel sérialise l’objet en cellules normales : un DataFrame se déverse sur plusieurs lignes et colonnes, une Series sur deux colonnes, un scalaire sur une cellule.
Pour basculer entre les deux modes, plusieurs voies. La plus rapide : sélectionner la cellule Python, presser Ctrl+Alt+Maj+M qui alterne entre les deux modes. Voie graphique : cliquer sur le petit logo PY à gauche de la cellule, le menu déroulant offre Sortir comme Objet Python et Sortir comme Valeur Excel. Le choix dépend de l’usage : pour terminer un pipeline et exposer le résultat dans une feuille consommable par une équipe métier, basculer en Valeur Excel. Pour passer une variable à la cellule Python suivante dans la chaîne d’analyse, garder Objet Python.
Étape 8 — Bibliothèques Python disponibles
Le runtime Python dans Excel est fourni par Anaconda et inclut un ensemble curated de bibliothèques pré-installées qu’il n’est pas possible d’étendre dans la version de base. La liste officielle couvre l’essentiel de l’analyse de données : pandas (manipulation tabulaire), numpy (calcul numérique), matplotlib (graphiques), seaborn (graphiques statistiques), scipy (statistiques et optimisation), scikit-learn (machine learning), statsmodels (modélisation économétrique).
=PY(
from sklearn.linear_model import LinearRegression
import numpy as np
df = xl("tblVentes[#Tout]", headers=True)
df["Date"] = pd.to_datetime(df["Date"])
df["jour"] = (df["Date"] - df["Date"].min()).dt.days
X = df[["jour"]].values
y = df["Montant"].values
modele = LinearRegression().fit(X, y)
f"Pente: {modele.coef_[0]:.2f} XOF/jour, R2: {modele.score(X, y):.3f}"
)
Cet exemple ajuste une régression linéaire sur le montant en fonction du nombre de jours depuis le début. La cellule renvoie une chaîne de caractères avec la pente quotidienne et le coefficient R². Pour des modèles plus complexes (forêts aléatoires, gradient boosting via XGBoost), il faudra basculer sur la version Premium de Python dans Excel, qui débloque plus de bibliothèques et de la puissance de calcul accrue moyennant un add-on payant.
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
| #PYTHON! affiché dans la cellule | Erreur de syntaxe Python ou variable inexistante | Survoler le triangle d’erreur pour le message complet |
| Excel ne reconnaît pas =PY | Build trop ancien ou abonnement non éligible | Mettre à jour Excel et vérifier l’abonnement Microsoft 365 |
| Le DataFrame s’affiche en cartouche au lieu de cellules | Mode Objet Python actif | Ctrl+Alt+Maj+M pour basculer en Valeur Excel |
| Les en-têtes deviennent 0, 1, 2 au lieu des noms | Argument headers=True oublié |
Ajouter headers=True à xl() |
| Le graphique matplotlib n’apparaît pas | Manque la ligne fig seule à la fin |
Terminer la cellule par fig sans plt.show() |
| Pas d’accès à internet, calcul échoue | Python dans Excel exige le cloud Microsoft | Vérifier la connexion ; aucun mode hors-ligne |
| Bibliothèque non disponible | Bibliothèque hors de la liste Anaconda fournie | Vérifier la liste officielle ; envisager Premium pour plus de paquets |
Tutoriels associés
- Copilot dans Excel : générer formules et analyses en langage naturel
- GROUPER.PAR et PIVOTER.PAR dans Excel : alternative aux tableaux croisés dynamiques
- Power Query : transformer et nettoyer ses données dans Excel
Pour aller plus loin
Retour au guide principal : Maîtriser Excel pour PME : le guide complet 2026.
- Microsoft — Introduction à Python dans Excel (documentation officielle)
- Microsoft — Disponibilité de Python dans Excel (canaux et plateformes)
- Microsoft — Bibliothèques open-source disponibles (liste Anaconda)
- microsoft/python-in-excel (dépôt GitHub officiel)
- pandas — Documentation officielle
- matplotlib — Documentation officielle
FAQ
Python dans Excel fonctionne-t-il sans connexion internet ?
Non. Le code Python est exécuté dans le cloud Microsoft, pas sur le poste de l’utilisateur. Sans connexion, les cellules =PY affichent une erreur. C’est une contrainte structurelle qui distingue Python dans Excel des solutions historiques comme PyXLL ou xlwings qui exécutent localement.
Faut-il payer un add-on pour utiliser Python dans Excel ?
Non pour les fonctionnalités de base avec les abonnements Business et Enterprise sur Windows et Mac. Oui pour le mode Premium qui débloque davantage de bibliothèques, des temps d’exécution plus longs, et plus de mémoire. Pour la plupart des cas PME, la version standard suffit largement.
Peut-on appeler une API REST externe depuis Python dans Excel ?
Non. Le runtime Python dans Excel s’exécute dans un environnement réseau restreint qui interdit les appels HTTP sortants vers des domaines arbitraires. Pour récupérer des données externes, utiliser Power Query qui sait interroger les API, puis charger le résultat dans un tableau structuré et le consommer depuis Python via xl().
VBA et Python dans Excel sont-ils interopérables ?
Pas directement. Python dans Excel ne peut pas appeler une macro VBA et vice-versa. Pour combiner les deux, le pattern recommandé est : VBA orchestre les opérations interactives (ouvrir un classeur, copier une plage, mettre à jour des feuilles) ; Python fait le calcul ; les résultats Python tombent dans une plage que VBA peut ensuite manipuler.
Que se passe-t-il quand on partage un classeur avec des cellules Python à un collègue qui n’a pas accès à Python dans Excel ?
Le classeur s’ouvre normalement, les valeurs déjà calculées restent affichées, mais les cellules Python ne se recalculent pas et le collègue ne peut pas modifier le code Python. Les valeurs en mode Valeur Excel sont conservées comme des données figées, ce qui rend le partage robuste à condition de basculer les sorties critiques en valeurs avant l’envoi.
Le runtime Python est-il vraiment isolé entre utilisateurs ?
Oui. Chaque session Python dans Excel s’exécute dans un container Azure éphémère qui ne persiste pas entre exécutions et n’est pas accessible aux autres utilisateurs. Aucun fichier n’est conservé côté serveur Microsoft au-delà de la session, ce qui répond aux contraintes de confidentialité de la plupart des entreprises.
Comment déboguer un script Python qui plante ?
Excel affiche le code d’erreur dans la cellule (#PYTHON!) et survoler le triangle d’avertissement à gauche révèle le message complet, y compris le traceback Python. La pratique recommandée pour les analyses longues est de découper en plusieurs cellules — quand une cellule plante, on identifie tout de suite la couche en cause sans avoir à reconstruire mentalement le pipeline.