← Guides

Automatiser un rapport Excel hebdomadaire avec Python (Pandas + openpyxl)

Fusionner plusieurs fichiers Excel, construire un tableau de synthèse, le mettre en forme et l'enregistrer : 40 lignes qui remplacent une heure de copier-coller.

Python · 9 min de lecture

Le processus manuel remplacé

Chaque lundi, une assistante commerciale ouvre un fichier par région, copie les lignes dans un classeur maître, construit un tableau croisé et ajuste la mise en forme. Une heure de travail et des erreurs dès qu'un fichier a une colonne de plus.

Étape 1 : combiner les fichiers

glob trouve tous les fichiers ; chaque ligne garde son fichier d'origine pour la traçabilité.

from pathlib import Path
import pandas as pd

frames = []
for f in Path("regions").glob("*.xlsx"):
    d = pd.read_excel(f)
    d["source"] = f.stem
    frames.append(d)
data = pd.concat(frames, ignore_index=True)

Étape 2 : la synthèse

pivot_table reproduit le tableau croisé dynamique, totaux compris.

synthese = data.pivot_table(
    index="commercial", columns="source", values="montant",
    aggfunc="sum", fill_value=0, margins=True, margins_name="Total",
)

Étape 3 : écrire et mettre en forme

On écrit les deux feuilles puis openpyxl met l'en-tête en gras, applique le format monétaire et fige la première ligne.

from openpyxl import load_workbook
from openpyxl.styles import Font

out = "rapport_hebdo.xlsx"
with pd.ExcelWriter(out) as w:
    synthese.to_excel(w, sheet_name="Synthese")
    data.to_excel(w, sheet_name="Detail", index=False)

wb = load_workbook(out)
ws = wb["Synthese"]
for cell in ws[1]:
    cell.font = Font(bold=True)
for row in ws.iter_rows(min_row=2, min_col=2):
    for cell in row:
        cell.number_format = '#,##0.00 €'
ws.freeze_panes = "B2"
wb.save(out)

Étape 4 : planifier

Sous Windows, le Planificateur de tâches lance python rapport.py chaque lundi à 8 h ; sous macOS/Linux, une ligne cron 0 8 * * 1. Ajoutez un try/except qui journalise les erreurs.

Aller plus loin

Vérifiez les colonnes avant la concaténation et envoyez le rapport par e-mail avec smtplib. Décrivez votre propre structure de fichiers à FormulAI pour obtenir le script adapté.