🎯 Situation
Chaque lundi matin, un analyste des opérations chez un de nos clients ouvrait quatre fichiers Excel — un par région — copiait les données dans un fichier maître, nettoyait les noms de colonnes qui ne correspondaient jamais, supprimait les lignes vides en haut de chaque fichier, et formatait le résultat avant de le charger manuellement dans Power BI.
Ça prenait environ 90 minutes. Chaque semaine. Pendant deux ans.
Un script Python a tout changé.
⚠️ Challenge
Le processus manuel avait trois vrais problèmes qui s'accumulaient avec le temps.
📷 Le processus manuel
- 90 minutes chaque lundi avant toute analyse
- Les noms de colonnes variaient selon la région et la personne
- Lignes d'en-tête vides dans deux des quatre fichiers
- Le chiffre d'affaires était parfois du texte, parfois un nombre
- Si l'analyste était absent — pas de rapport
❌ Ce qui se passait mal
- 2 erreurs de copier-coller trouvées en T1 — détectées seulement parce qu'un manager a remarqué que le total ne correspondait pas
- Une région avait changé son en-tête de colonne — le fichier maître était cassé silencieusement depuis 3 semaines
- Intégration d'un nouvel analyste = 3 heures juste pour apprendre le processus de consolidation Excel
- L'actualisation Power BI était manuelle — oubliée deux fois en 6 mois
Aucun de ces problèmes n'était catastrophique individuellement. Ensemble, ils représentaient un processus fragile et dépendant d'une seule personne, posé à la fondation du reporting hebdomadaire de l'entreprise.
🔍 Le script
Voici le code réel — légèrement simplifié, mais proche de ce qu'on a déployé. Il utilise pandas, la bibliothèque standard de manipulation de données en Python, et glob pour trouver les fichiers automatiquement :
import pandas as pd
import glob
# Read all 4 Excel files from a folder
files = glob.glob('data/*.xlsx')
df = pd.concat([pd.read_excel(f) for f in files], ignore_index=True)
# Standardize column names
df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')
# Clean and filter
df['date'] = pd.to_datetime(df['date'], errors='coerce')
df['revenue'] = pd.to_numeric(df['revenue'], errors='coerce').fillna(0)
df = df[df['date'].notna()]
# Aggregate by month and region
summary = df.groupby([df['date'].dt.to_period('M'), 'region'])['revenue'].sum().reset_index()
summary.columns = ['month', 'region', 'total_revenue']
# Export clean file for Power BI
summary.to_csv('output/monthly_revenue.csv', index=False)
print(f"Done. {len(summary)} rows exported.")
C'est 28 lignes. Ce qu'il fait :
- Trouve tous les fichiers Excel automatiquement — déposer un nouveau fichier dans le dossier suffit pour qu'il soit traité au prochain lancement
- Standardise les noms de colonnes — minuscules, sans espaces, sans espaces en fin — quel que soit le créateur du fichier
- Gère les données sales — les valeurs de chiffre d'affaires non numériques deviennent 0, les dates non parsables sont supprimées proprement
- Agrège et exporte — un fichier CSV propre que Power BI lit lors d'une actualisation planifiée
✓️ Ce que ça a coûté et ce que ça a rapporté
Écrire et tester ce script a pris environ 3 heures. C'est un investissement unique.
- Temps économisé : 90 min/semaine × 52 semaines = 78 heures/an rendues à l'analyste
- Taux d'erreur : tombé à zéro pour les erreurs de consolidation — le script s'exécute correctement ou échoue bruyamment
- Résilience : l'analyste peut être en vacances. Le rapport tourne quand même.
- Intégration : un nouvel analyste doit comprendre un script, pas un processus Excel en 12 étapes
- Extensibilité : ajouter une 5e région signifie déposer un nouveau fichier dans le dossier — rien d'autre ne change
Le seul coût récurrent : si la structure du fichier source change significativement (nouvelles colonnes, feuilles renommées), le script a besoin d'une petite mise à jour. En deux ans, c'est arrivé une fois.
💡 Synthèse
Python ne nécessite pas un background en data engineering pour être utile. Pour la plupart des tâches de consolidation de données qui se produisent selon un planning, 20 à 50 lignes de pandas suffisent pour automatiser l'intégralité du processus.
Le pattern qui fonctionne :
- Identifier la tâche répétitive — tout ce qui se fait chaque semaine ou chaque mois avec les mêmes fichiers et les mêmes étapes est un candidat
- Écrire le script une fois — se concentrer sur la lecture, le nettoyage, la transformation et l'export. Ne pas sur-ingénierer.
- Le planifier — Planificateur de tâches Windows, cron macOS, ou un déclencheur cloud. Le faire tourner la nuit avant que les données soient nécessaires.
- Connecter Power BI à l'output — un CSV propre ou une table de base de données, actualisé automatiquement
- Ajouter une gestion d'erreur basique — le script doit envoyer une alerte si quelque chose se passe mal, pas produire silencieusement un fichier vide
La question n'est pas de savoir si Python vaut la peine d'être appris. C'est de savoir si 90 minutes de travail manuel chaque semaine — pendant des années — valent plus que 3 heures d'automatisation une seule fois.
👉 La meilleure automatisation est celle qu'on construit une fois et qu'on oublie.
30 lignes de Python qui tournent chaque dimanche soir, c'est exactement ça.