Ce que vous saurez faire à la fin
- Installer Python + pandas en 10 minutes
- Lire, filtrer, agréger un fichier Excel de millions de lignes
- Consolider 50 fichiers en 10 lignes de code
- Générer automatiquement un rapport Excel formaté
- Automatiser l’exécution mensuelle via Task Scheduler
Durée : 3 heures. Pré-requis : Windows/Mac/Linux, droits d’installation, connaissance basique Excel.
Étape 1 — Installer Python
- Allez sur
python.org/downloads. Téléchargez la version 3.12+. - Windows : lors de l’installation, cochez Add Python to PATH. C’est CRITIQUE.
- Terminez l’installation par défaut.
- Ouvrez une console (cmd sur Windows, Terminal sur Mac/Linux) :
python --version # doit renvoyer Python 3.12.x
pip --version # pip 24.x ou plus récent
Étape 2 — Installer les bibliothèques
pip install pandas openpyxl xlsxwriter matplotlib xlwings
pandas: manipulation de données tabulairesopenpyxl: lire/écrire .xlsx (avec pandas)xlsxwriter: écriture .xlsx avec mise en forme avancéematplotlib: graphiquesxlwings: piloter Excel ouvert
Étape 3 — Installer un éditeur
- VS Code (gratuit) :
code.visualstudio.com. - À l’ouverture, installez l’extension Python (Microsoft).
- Créez un dossier
C:\projets\analysespuis ouvrez-le dans VS Code. - Créez un fichier
test.py:
print("Hello Python!")
import pandas as pd
print(pd.__version__)
- Lancez avec le bouton ▶ en haut à droite ou
python test.pydans le terminal.
Étape 4 — Lire un fichier Excel
- Placez
ventes_2026.xlsxdans le dossier projet. - Créez
lire.py:
import pandas as pd
df = pd.read_excel("ventes_2026.xlsx", sheet_name="Data")
print(df.shape) # (145234, 8)
print(df.columns.tolist())
print(df.head(5))
print(df.dtypes)
print(df.describe())
- Exécutez. Vous voyez les 5 premières lignes, les types de chaque colonne, stats numériques.
Étape 5 — Filtrer et sélectionner
dakar = df[df["Region"] == "Dakar"]
grosses = df[df["CA"] > 500_000]
dakar_gros = df[(df["Region"] == "Dakar") & (df["CA"] > 500_000)]
colonnes = df[["Date", "Commercial", "CA"]]
plage_date = df[(df["Date"] >= "2026-01-01") & (df["Date"] < "2026-04-01")]
Étape 6 — Agréger par groupe
par_commercial = (df.groupby("Commercial")
.agg(CA_Total=("CA", "sum"),
Nb_Commandes=("CA", "count"),
Panier_Moyen=("CA", "mean"))
.sort_values("CA_Total", ascending=False))
print(par_commercial.head(10))
Étape 7 — Consolider 50 fichiers en 10 lignes
from pathlib import Path
import pandas as pd
dossier = Path("C:/Rapports/Ventes")
frames = []
for fichier in dossier.glob("Ventes_2026_*.xlsx"):
d = pd.read_excel(fichier)
d["source"] = fichier.name
frames.append(d)
global_df = pd.concat(frames, ignore_index=True)
global_df.to_excel("consolide_2026.xlsx", index=False, engine="openpyxl")
print(f"Consolidé {len(frames)} fichiers, {len(global_df):,} lignes")
Étape 8 — Tableau croisé dynamique
tcd = pd.pivot_table(
df,
values="CA",
index=["Region", "Commercial"],
columns="Mois",
aggfunc="sum",
fill_value=0,
margins=True, margins_name="Total"
)
tcd.to_excel("dashboard.xlsx", sheet_name="TCD")
Étape 9 — Graphiques
import matplotlib.pyplot as plt
top10 = par_commercial.head(10)
top10["CA_Total"].plot(kind="barh", figsize=(10, 6), color="#1E88E5")
plt.title("Top 10 commerciaux - CA 2026", fontsize=14, fontweight="bold")
plt.xlabel("CA (FCFA)")
plt.tight_layout()
plt.savefig("top10.png", dpi=150)
plt.close()
Étape 10 — Export Excel avec mise en forme
with pd.ExcelWriter("rapport.xlsx", engine="xlsxwriter") as w:
par_commercial.to_excel(w, sheet_name="Commerciaux")
wb = w.book
ws = w.sheets["Commerciaux"]
money = wb.add_format({"num_format": "#,##0 \"FCFA\""})
header = wb.add_format({"bold": True, "bg_color": "#1E88E5",
"color": "white", "border": 1})
ws.set_column("B:D", 18, money)
ws.set_row(0, 22, header)
ws.freeze_panes(1, 1)
# Ajouter un graphique natif Excel
chart = wb.add_chart({"type": "column"})
chart.add_series({
"name": "CA Total",
"categories": ["Commerciaux", 1, 0, 10, 0],
"values": ["Commerciaux", 1, 1, 10, 1],
})
ws.insert_chart("F2", chart)
Étape 11 — Automatiser l’exécution
- Transformez votre script en
.pyautonome avec une fonction main. - Windows Task Scheduler :
schtasks /Create /SC WEEKLY /D MON /TN "RapportHebdo" ^
/TR "python C:\projets\analyses\rapport.py" ^
/ST 07:00 /RU "%USERNAME%"
- macOS / Linux : cron.
crontab -e
# Ajouter la ligne:
0 7 * * 1 /usr/bin/python3 /home/user/analyses/rapport.py >> /tmp/rapport.log 2>&1
Étape 12 — Piloter Excel ouvert avec xlwings
import xlwings as xw
wb = xw.Book("dashboard.xlsx")
sht = wb.sheets["DASHBOARD"]
sht.range("B2").value = "Mise à jour: " + pd.Timestamp.now().strftime("%d/%m/%Y %H:%M")
sht.range("C4").options(transpose=True).value = df["CA"].tolist()
wb.save()
Étape 13 — Ajouter une barre de progression
pip install tqdm
from tqdm import tqdm
import time
fichiers = list(dossier.glob("*.xlsx"))
frames = []
for f in tqdm(fichiers, desc="Lecture"):
frames.append(pd.read_excel(f))
Étape 14 — Gérer les erreurs
import logging
logging.basicConfig(
filename="rapport.log",
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)
try:
df = pd.read_excel("ventes.xlsx")
logging.info(f"Lecture OK: {len(df)} lignes")
except FileNotFoundError:
logging.error("Fichier ventes.xlsx introuvable")
raise
except Exception as e:
logging.error(f"Erreur imprévue: {e}")
raise
Étape 15 — Checklist d’un script robuste
✓ Chemins paramétrables (argparse ou variables env)
✓ Logging activé (fichier + console)
✓ try/except autour des I/O fichiers
✓ Validation des données (colonnes présentes, types)
✓ Barre de progression pour jobs longs
✓ Durée totale affichée à la fin
✓ Exit code non-zéro si échec (pour monitoring)
✓ Sauvegarde des fichiers avant modification