Créer un rapport mensuel structuré ne devrait pas rimer avec copier-coller manuel. Grâce à Python, on peut automatiser la création d’un document Word propre et professionnel à partir d’un fichier de données (comme un export de la Search Console).

Dans cet article, je vous montre comment produire un rapport complet, prêt à être diffusé, en utilisant uniquement Python et un template Word.
🎯 Objectif
Générer un fichier .docx
contenant automatiquement :
- ✅ Les 10 requêtes les plus vues (impressions)
- ✅ Le mot-clé principal à surveiller
- ✅ Une liste de recommandations à suivre
- ✅ Un graphique en camembert des impressions
À partir de deux fichiers :
- Un template Word professionnel avec des balises de remplacement
- Un fichier Excel source avec les données de performance
Prérequis techniques
pip install python-docx pandas matplotlib openpyxl
Le script utilise :
pandas
pour lire et trier les données,matplotlib
pour générer un graphique,python-docx
pour créer et remplir le fichier Word.
Le template Word
Le template utilise des balises faciles à identifier :{mois}
, {tableau_requetes}
, {mot_cle}
, {actions}
, {graphique}
🧩 Exemple de structure :
Rapport mensuel - {mois}
1. Requêtes principales
{tableau_requetes}
2. Mot-clé à surveiller
{mot_cle}
3. Propositions d’actions
{actions}
4. Graphique – Répartition des impressions
{graphique}
Le script Python
Voici un aperçu du code :
pythonCopierModifierimport pandas as pd
from docx import Document
from docx.shared import Inches
from datetime import datetime
import matplotlib.pyplot as plt
# Chemins
EXCEL_PATH = "donnees_search_console.xlsx"
TEMPLATE_PATH = "template_rapport_professionnel.docx"
OUTPUT_PATH = f"rapport_mensuel_{datetime.today().strftime('%Y-%m')}.docx"
GRAPH_IMAGE_PATH = "graphique_impressions_pie.png"
# Charger les données
df = pd.read_excel(EXCEL_PATH, sheet_name="Requêtes")
df.columns = ["Requête", "Clics", "Impressions", "CTR", "Position"]
top10 = df.sort_values(by="Impressions", ascending=False).head(10)
# Générer le graphique
fig, ax = plt.subplots()
ax.pie(top10["Impressions"], labels=top10["Requête"], autopct="%1.1f%%", startangle=90)
plt.tight_layout()
plt.savefig(GRAPH_IMAGE_PATH)
# Infos dynamiques
mois = datetime.today().strftime("%B %Y")
mot_cle = top10.iloc[0]["Requête"]
actions = [
"Analyser la concurrence sur ce mot-clé",
"Optimiser la balise title des pages concernées",
"Améliorer la vitesse de chargement mobile",
"Ajouter du contenu multimédia enrichi",
"Développer une FAQ liée à ce sujet"
]
# Remplir le document Word
doc = Document(TEMPLATE_PATH)
for p in doc.paragraphs:
if "{mois}" in p.text:
p.text = p.text.replace("{mois}", mois)
if "{mot_cle}" in p.text:
p.text = p.text.replace("{mot_cle}", mot_cle)
if "{actions}" in p.text:
p.text = p.text.replace("{actions}", "\\n".join(f"- {a}" for a in actions))
if "{graphique}" in p.text:
p.text = ""
doc.add_picture(GRAPH_IMAGE_PATH, width=Inches(5.5))
# Insertion tableau
for p in doc.paragraphs:
if "{tableau_requetes}" in p.text:
p.text = ""
table = doc.add_table(rows=1, cols=len(top10.columns))
table.style = "Light List"
hdr = table.rows[0].cells
for idx, col in enumerate(top10.columns):
hdr[idx].text = col
for _, row in top10.iterrows():
cells = table.add_row().cells
for idx, val in enumerate(row):
cells[idx].text = str(val)
break
doc.save(OUTPUT_PATH)
Résultat
Le script produit un fichier Word contenant :
- Le mois en cours
- Un tableau clair des requêtes principales
- Un mot-clé à surveiller
- Des actions concrètes
- Et un graphique directement intégré
Parfait pour un usage en entreprise, une newsletter mensuelle ou un reporting automatique.
Une réflexion sur « Générer un rapport Word mensuel automatiquement avec Python (données, tableau et graphique inclus) »
Les commentaires sont fermés.