Exigences pour les sorties
Tous les fichiers Excel
Police professionnelle
- Utilisez une police cohérente et professionnelle (par exemple, Arial, Times New Roman) pour tous les livrables, sauf indication contraire de l'utilisateur.
Zéro erreur de formule
- Chaque modèle Excel DOIT être livré avec ZÉRO erreur de formule (#REF!, #DIV/0!, #VALEUR!, #N/A, #NOM?)
Préserver les modèles existants (lors de la mise à jour de modèles)
- Étudiez et respectez EXACTEMENT le format, le style et les conventions existants lors de la modification des fichiers.
- N'imposez jamais un formatage standardisé à des fichiers ayant des modèles établis.
- Les conventions des modèles existants OUTREPASSENT TOUJOURS ces directives.
Modèles financiers
Normes de codage couleur
Sauf indication contraire de l'utilisateur ou du modèle existant
Conventions de couleurs standard du secteur
- Texte bleu (RVB: 0,0,255) : Saisies codées en dur et nombres que les utilisateurs modifieront pour les scénarios.
- Texte noir (RVB: 0,0,0) : TOUTES les formules et tous les calculs.
- Texte vert (RVB: 0,128,0) : Liens provenant d'autres feuilles de calcul du même classeur.
- Texte rouge (RVB: 255,0,0) : Liens externes vers d'autres fichiers.
- Arrière-plan jaune (RVB: 255,255,0) : Hypothèses clés nécessitant une attention particulière ou cellules à mettre à jour.
Normes de formatage des nombres
Règles de format requises
- Années : Formater comme des chaînes de texte (par exemple, "2024" et non "2 024").
- Devise : Utiliser le format $# ##0 ; TOUJOURS spécifier les unités dans les en-têtes ("Revenu ($ M)").
- Zéros : Utiliser le format numérique pour afficher tous les zéros sous forme de "-", y compris les pourcentages (par exemple, "$# ##0 ;($# ##0);-").
- Pourcentages : Par défaut, format 0,0 % (une décimale).
- Multiples : Formater comme 0,0x pour les multiples d'évaluation (VE/EBITDA, C/B).
- Nombres négatifs : Utiliser des parenthèses (123) et non le signe moins -123.
Règles de construction des formules
Emplacement des hypothèses
- Placez TOUTES les hypothèses (taux de croissance, marges, multiples, etc.) dans des cellules d'hypothèses distinctes.
- Utilisez des références de cellule au lieu de valeurs codées en dur dans les formules.
- Exemple : Utilisez =B5*(1+$B$6) au lieu de =B5*1,05
Prévention des erreurs de formule
- Vérifiez que toutes les références de cellule sont correctes.
- Recherchez les erreurs de décalage dans les plages.
- Assurez la cohérence des formules sur toutes les périodes de projection.
- Testez avec des cas limites (valeurs nulles, nombres négatifs).
- Vérifiez l'absence de références circulaires involontaires.
Exigences de documentation pour les valeurs codées en dur
- Commentez ou inscrivez dans les cellules adjacentes (si en fin de tableau). Format : "Source : [Système/Document], [Date], [Référence spécifique], [URL si applicable]"
- Exemples :
- "Source : 10-K de la société, AF2024, Page 45, Note sur les revenus, [URL SEC EDGAR]"
- "Source : 10-Q de la société, T2 2025, Pièce 99.1, [URL SEC EDGAR]"
- "Source : Terminal Bloomberg, 15/08/2025, AAPL US Equity"
- "Source : FactSet, 20/08/2025, Écran des estimations consensuelles"
Création, édition et analyse de fichiers XLSX
Aperçu
Un utilisateur peut vous demander de créer, éditer ou analyser le contenu d'un fichier .xlsx. Vous disposez de différents outils et workflows pour différentes tâches.
Exigences importantes
LibreOffice requis pour le recalcul des formules : Vous pouvez supposer que LibreOffice est installé pour recalculer les valeurs des formules à l'aide du script scripts/recalc.py. Le script configure automatiquement LibreOffice lors de la première exécution, y compris dans les environnements sandboxés où les sockets Unix sont restreints (géré par scripts/office/soffice.py)
Lecture et analyse des données
Analyse de données avec pandas
Pour l'analyse de données, la visualisation et les opérations de base, utilisez pandas qui offre des capacités de manipulation de données puissantes :
import pandas as pd
# Lire Excel
df = pd.read_excel('fichier.xlsx') # Par défaut : première feuille
toutes_les_feuilles = pd.read_excel('fichier.xlsx', sheet_name=None) # Toutes les feuilles sous forme de dictionnaire
# Analyser
df.head() # Aperçu des données
df.info() # Infos sur les colonnes
df.describe() # Statistiques
# Écrire Excel
df.to_excel('sortie.xlsx', index=False)
Workflows pour fichiers Excel
CRITIQUE : Utiliser des formules, pas des valeurs codées en dur
Utilisez toujours des formules Excel au lieu de calculer des valeurs en Python et de les coder en dur. Cela garantit que le tableur reste dynamique et modifiable.
❌ INCORRECT - Codage en dur de valeurs calculées
# Mauvais : Calcul en Python et codage en dur du résultat
total = df['Ventes'].sum()
sheet['B10'] = total # Code en dur 5000
# Mauvais : Calcul du taux de croissance en Python
croissance = (df.iloc[-1]['Revenu'] - df.iloc[0]['Revenu']) / df.iloc[0]['Revenu']
sheet['C5'] = croissance # Code en dur 0,15
# Mauvais : Calcul Python pour la moyenne
moy = sum(valeurs) / len(valeurs)
sheet['D20'] = moy # Code en dur 42,5
✅ CORRECT - Utilisation de formules Excel
# Bon : Laissez Excel calculer la somme
sheet['B10'] = '=SUM(B2:B9)'
# Bon : Taux de croissance sous forme de formule Excel
sheet['C5'] = '=(C4-C2)/C2'
# Bon : Moyenne utilisant la fonction Excel
sheet['D20'] = '=AVERAGE(D2:D19)'
Ceci s'applique à TOUS les calculs - totaux, pourcentages, ratios, différences, etc. Le tableur doit pouvoir recalculer lorsque les données sources changent.
Workflow courant
- Choisir l'outil : pandas pour les données, openpyxl pour les formules/formatage
- Créer/Charger : Créer un nouveau classeur ou charger un fichier existant
- Modifier : Ajouter/modifier des données, des formules et du formatage
- Enregistrer : Écrire dans un fichier
- Recalculer les formules (OBLIGATOIRE SI UTILISATION DE FORMULES) : Utiliser le script scripts/recalc.py
python scripts/recalc.py sortie.xlsx - Vérifier et corriger les erreurs :
- Le script renvoie un JSON avec les détails des erreurs
- Si le
statutesterrors_found, vérifiez leerror_summarypour les types et emplacements d'erreurs spécifiques - Corrigez les erreurs identifiées et recalculez à nouveau
- Erreurs courantes à corriger :
#REF!: Références de cellule invalides#DIV/0!: Division par zéro#VALEUR!: Type de données incorrect dans la formule#NOM?: Nom de formule non reconnu
Créer de nouveaux fichiers Excel
# Utilisation d'openpyxl pour les formules et le formatage
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment
wb = Workbook()
sheet = wb.active
# Ajouter des données
sheet['A1'] = 'Bonjour'
sheet['B1'] = 'Monde'
sheet.append(['Ligne', 'de', 'données'])
# Ajouter une formule
sheet['B2'] = '=SUM(A1:A10)'
# Mise en forme
sheet['A1'].font = Font(bold=True, color='FF0000')
sheet['A1'].fill = PatternFill('solid', start_color='FFFF00')
sheet['A1'].alignment = Alignment(horizontal='center')
# Largeur de colonne
sheet.column_dimensions['A'].width = 20
wb.save('sortie.xlsx')
Modifier des fichiers Excel existants
# Utilisation d'openpyxl pour préserver les formules et le formatage
from openpyxl import load_workbook
# Charger un fichier existant
wb = load_workbook('existant.xlsx')
sheet = wb.active # ou wb['NomFeuille'] pour une feuille spécifique
# Travailler avec plusieurs feuilles
for nom_feuille in wb.sheetnames:
sheet = wb[nom_feuille]
print(f"Feuille : {nom_feuille}")
# Modifier des cellules
sheet['A1'] = 'Nouvelle Valeur'
sheet.insert_rows(2) # Insérer une ligne à la position 2
sheet.delete_cols(3) # Supprimer la colonne 3
# Ajouter une nouvelle feuille
nouvelle_feuille = wb.create_sheet('NouvelleFeuille')
nouvelle_feuille['A1'] = 'Données'
wb.save('modifié.xlsx')
Recalculer les formules
Les fichiers Excel créés ou modifiés par openpyxl contiennent des formules sous forme de chaînes mais pas de valeurs calculées. Utilisez le script fourni scripts/recalc.py pour recalculer les formules :
python scripts/recalc.py <fichier_excel> [secondes_timeout]
Exemple :
python scripts/recalc.py sortie.xlsx 30
Le script :
- Configure automatiquement la macro LibreOffice lors de la première exécution
- Recalcule toutes les formules dans toutes les feuilles
- Scanne TOUTES les cellules pour détecter les erreurs Excel (#REF!, #DIV/0!, etc.)
- Renvoie un JSON avec les emplacements détaillés des erreurs et leurs décomptes
- Fonctionne à la fois sur Linux et macOS
Liste de vérification des formules
Vérifications rapides pour s'assurer que les formules fonctionnent correctement :
Vérification essentielle
- Tester 2-3 références échantillons : Vérifier qu'elles extraient les valeurs correctes avant de construire le modèle complet
- Correspondance des colonnes : Confirmer que les colonnes Excel correspondent (par exemple, colonne 64 = BL, pas BK)
- Décalage de ligne : Se rappeler que les lignes Excel sont indexées à partir de 1 (ligne DataFrame 5 = ligne Excel 6)
Pièges courants
- Gestion des NaN : Vérifier les valeurs nulles avec
pd.notna() - Colonnes à l'extrême droite : Les données d'exercice sont souvent dans les colonnes 50+
- Correspondances multiples : Rechercher toutes les occurrences, pas seulement la première
- Division par zéro : Vérifier les dénominateurs avant d'utiliser
/dans les formules (#DIV/0!) - Mauvaises références : Vérifier que toutes les références de cellule pointent vers les cellules prévues (#REF!)
- Références entre feuilles : Utiliser le format correct (Feuille1!A1) pour lier les feuilles
Stratégie de test des formules
- Commencer petit : Tester les formules sur 2-3 cellules avant de les appliquer largement
- Vérifier les dépendances : Vérifier que toutes les cellules référencées dans les formules existent
- Tester les cas limites : Inclure des valeurs nulles, négatives et très grandes
Interprétation de la sortie de scripts/recalc.py
Le script renvoie un JSON avec les détails des erreurs :
{
"status": "success", // ou "errors_found"
"total_errors": 0, // Nombre total d'erreurs
"total_formulas": 42, // Nombre de formules dans le fichier
"error_summary": { // Présent uniquement si des erreurs sont trouvées
"#REF!": {
"count": 2,
"locations": ["Feuille1!B5", "Feuille1!C10"]
}
}
}
Bonnes pratiques
Sélection de bibliothèque
- pandas : Meilleur pour l'analyse de données, les opérations en bloc et l'exportation simple de données
- openpyxl : Meilleur pour le formatage complexe, les formules et les fonctionnalités spécifiques à Excel
Travailler avec openpyxl
- Les indices de cellule sont basés sur 1 (ligne=1, colonne=1 fait référence à la cellule A1)
- Utiliser
data_only=Truepour lire les valeurs calculées :load_workbook('fichier.xlsx', data_only=True) - Avertissement : Si ouvert avec
data_only=Trueet enregistré, les formules sont remplacées par des valeurs et perdues définitivement - Pour les fichiers volumineux : Utiliser
read_only=Truepour la lecture ouwrite_only=Truepour l'écriture - Les formules sont préservées mais pas évaluées - utiliser scripts/recalc.py pour mettre à jour les valeurs
Travailler avec pandas
- Spécifier les types de données pour éviter les problèmes d'inférence :
pd.read_excel('fichier.xlsx', dtype={'id': str}) - Pour les fichiers volumineux, lire des colonnes spécifiques :
pd.read_excel('fichier.xlsx', usecols=['A', 'C', 'E']) - Gérer les dates correctement :
pd.read_excel('fichier.xlsx', parse_dates=['colonne_date'])
Directives de style de code
IMPORTANT : Lors de la génération de code Python pour les opérations Excel :
- Écrire du code Python minimal et concis sans commentaires inutiles
- Éviter les noms de variables verbeux et les opérations redondantes
- Éviter les instructions print inutiles
Pour les fichiers Excel eux-mêmes :
- Ajouter des commentaires dans les cellules contenant des formules complexes ou des hypothèses importantes
- Documenter les sources de données pour les valeurs codées en dur
- Inclure des notes pour les calculs clés et les sections du modèle