Exigences pour les sorties
Tous les fichiers Excel
Police professionnelle
- Utiliser une police cohérente et professionnelle (par ex. Arial, Times New Roman) pour tous les livrables, sauf instruction 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!, #VALUE!, #N/A, #NAME?)
Préserver les modèles existants (lors de la mise à jour de modèles)
- Étudier et correspondre EXACTEMENT au format, style et conventions existants lors de la modification de fichiers
- Ne jamais imposer une mise en forme standardisée sur des fichiers avec des modèles établis
- Les conventions des modèles existants remplacent TOUJOURS ces directives
Modèles financiers
Normes de codage couleur
Sauf indication contraire de l'utilisateur ou modèle existant
Conventions de couleur standard de l'industrie
- Texte bleu (RVB : 0,0,255) : entrées codées en dur et nombres que les utilisateurs changeront pour les scénarios
- Texte noir (RVB : 0,0,0) : TOUTES les formules et calculs
- Texte vert (RVB : 0,128,0) : liens tirant d'autres feuilles de calcul dans le même classeur
- Texte rouge (RVB : 255,0,0) : liens externes vers d'autres fichiers
- Fond jaune (RVB : 255,255,0) : hypothèses clés nécessitant une attention ou cellules à mettre à jour
Normes de formatage des nombres
Règles de format requises
- Années : formatter en tant que chaînes de texte (par ex. « 2024 » et non « 2 024 »)
- Devise : utiliser le format $#,##0 ; TOUJOURS spécifier les unités dans les en-têtes (« Revenu ($mm) »)
- Zéros : utiliser le formatage des nombres pour afficher tous les zéros sous forme de « - », y compris les pourcentages (par ex. « $#,##0;($#,##0);- »)
- Pourcentages : utiliser par défaut le format 0,0% (une décimale)
- Multiples : formatter en 0,0x pour les multiples de valorisation (EV/EBITDA, P/E)
- Nombres négatifs : utiliser des parenthèses (123) et non le signe moins -123
Règles de construction de formule
Placement des hypothèses
- Placer TOUTES les hypothèses (taux de croissance, marges, multiples, etc.) dans des cellules d'hypothèses séparées
- Utiliser des références de cellules au lieu de valeurs codées en dur dans les formules
- Exemple : utiliser =B5(1+$B$6) au lieu de =B51,05
Prévention des erreurs de formule
- Vérifier que toutes les références de cellules sont correctes
- Vérifier les erreurs de décalage d'une unité dans les plages
- Garantir la cohérence des formules sur toutes les périodes de projection
- Tester avec des cas limites (valeurs zéro, nombres négatifs)
- Vérifier l'absence de références circulaires involontaires
Exigences de documentation pour les valeurs codées en dur
- Commenter ou placer dans les cellules adjacentes (si à la fin du tableau). Format : « Source : [Système/Document], [Date], [Référence spécifique], [URL le cas échéant] »
- Exemples :
- « Source : Company 10-K, FY2024, Page 45, Revenue Note, [SEC EDGAR URL] »
- « Source : Company 10-Q, Q2 2025, Exhibit 99.1, [SEC EDGAR URL] »
- « Source : Bloomberg Terminal, 8/15/2025, AAPL US Equity »
- « Source : FactSet, 8/20/2025, Consensus Estimates Screen »
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 avez différents outils et flux de travail disponibles 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 de formule à l'aide du script scripts/recalc.py. Le script configure automatiquement LibreOffice au premier lancement, y compris dans les environnements isolés où les sockets Unix sont restreintes (gérées 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 basiques, utiliser pandas qui offre de puissantes capacités de manipulation de données :
import pandas as pd
# Lire Excel
df = pd.read_excel('file.xlsx') # Par défaut : première feuille
all_sheets = pd.read_excel('file.xlsx', sheet_name=None) # Toutes les feuilles en dict
# Analyser
df.head() # Aperçu des données
df.info() # Infos colonnes
df.describe() # Statistiques
# Écrire Excel
df.to_excel('output.xlsx', index=False)
Flux de travail des fichiers Excel
CRITIQUE : utiliser les formules, pas les valeurs codées en dur
Toujours utiliser les formules Excel au lieu de calculer les valeurs en Python et de les coder en dur. Cela garantit que la feuille de calcul reste dynamique et modifiable.
❌ MAUVAIS - Codage en dur des valeurs calculées
# Mauvais : calculer en Python et coder en dur le résultat
total = df['Sales'].sum()
sheet['B10'] = total # Code en dur 5000
# Mauvais : calcul du taux de croissance en Python
growth = (df.iloc[-1]['Revenue'] - df.iloc[0]['Revenue']) / df.iloc[0]['Revenue']
sheet['C5'] = growth # Code en dur 0,15
# Mauvais : calcul Python pour la moyenne
avg = sum(values) / len(values)
sheet['D20'] = avg # Code en dur 42,5
✅ CORRECT - utilisation de formules Excel
# Bon : laisser Excel calculer la somme
sheet['B10'] = '=SUM(B2:B9)'
# Bon : taux de croissance comme formule Excel
sheet['C5'] = '=(C4-C2)/C2'
# Bon : moyenne utilisant la fonction Excel
sheet['D20'] = '=AVERAGE(D2:D19)'
Cela s'applique à TOUS les calculs - totaux, pourcentages, ratios, différences, etc. La feuille de calcul doit pouvoir se recalculer lorsque les données source changent.
Flux de travail commun
- 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/éditer des données, formules et formatage
- Enregistrer : écrire dans le fichier
- Recalculer les formules (OBLIGATOIRE SI UTILISATION DE FORMULES) : utiliser le script scripts/recalc.py
python scripts/recalc.py output.xlsx - Vérifier et corriger les erreurs :
- Le script retourne du JSON avec les détails des erreurs
- Si le
statusesterrors_found, vérifiererror_summarypour les types d'erreur spécifiques et les emplacements - Corriger les erreurs identifiées et recalculer à nouveau
- Erreurs courantes à corriger :
#REF!: références de cellules invalides#DIV/0!: division par zéro#VALUE!: type de données incorrect dans la formule#NAME?: nom de formule non reconnu
Création de nouveaux fichiers Excel
# Utiliser 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'] = 'Hello'
sheet['B1'] = 'World'
sheet.append(['Row', 'of', 'data'])
# Ajouter une formule
sheet['B2'] = '=SUM(A1:A10)'
# Formatage
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('output.xlsx')
Édition de fichiers Excel existants
# Utiliser openpyxl pour préserver les formules et le formatage
from openpyxl import load_workbook
# Charger un fichier existant
wb = load_workbook('existing.xlsx')
sheet = wb.active # ou wb['SheetName'] pour une feuille spécifique
# Travailler avec plusieurs feuilles
for sheet_name in wb.sheetnames:
sheet = wb[sheet_name]
print(f"Sheet: {sheet_name}")
# Modifier les cellules
sheet['A1'] = 'New Value'
sheet.insert_rows(2) # Insérer une ligne à la position 2
sheet.delete_cols(3) # Supprimer la colonne 3
# Ajouter une nouvelle feuille
new_sheet = wb.create_sheet('NewSheet')
new_sheet['A1'] = 'Data'
wb.save('modified.xlsx')
Recalcul des formules
Les fichiers Excel créés ou modifiés par openpyxl contiennent les formules en tant que chaînes mais pas les valeurs calculées. Utiliser le script fourni scripts/recalc.py pour recalculer les formules :
python scripts/recalc.py <excel_file> [timeout_seconds]
Exemple :
python scripts/recalc.py output.xlsx 30
Le script :
- Configure automatiquement la macro LibreOffice au premier lancement
- Recalcule toutes les formules dans toutes les feuilles
- Analyse TOUTES les cellules pour détecter les erreurs Excel (#REF!, #DIV/0!, etc.)
- Retourne du JSON avec les emplacements des erreurs et les comptages détaillés
- Fonctionne sur Linux et macOS
Liste de vérification 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 d'exemple : vérifier qu'elles tirent les valeurs correctes avant de créer le modèle complet
- [ ] Mappage des colonnes : vérifier que les colonnes Excel correspondent (par ex. colonne 64 = BL, pas BK)
- [ ] Décalage de ligne : se rappeler que les lignes Excel sont indexées à partir de 1 (ligne 5 de DataFrame = ligne 6 d'Excel)
Pièges courants
- [ ] Gestion de NaN : vérifier les valeurs nulles avec
pd.notna() - [ ] Colonnes à l'extrême droite : les données FY 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!) - [ ] Références erronées : vérifier que toutes les références de cellules pointent vers les cellules prévues (#REF!)
- [ ] Références entre feuilles : utiliser le format correct (Sheet1!A1) pour les liens entre feuilles
Stratégie de test des formules
- [ ] Commencer petit : tester les formules sur 2-3 cellules avant d'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 les valeurs zéro, négatives et très grandes
Interprétation de la sortie scripts/recalc.py
Le script retourne du 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 seulement si erreurs trouvées
"#REF!": {
"count": 2,
"locations": ["Sheet1!B5", "Sheet1!C10"]
}
}
}
Bonnes pratiques
Sélection de la bibliothèque
- pandas : idéal pour l'analyse de données, les opérations en masse et l'export de données simple
- openpyxl : idéal pour le formatage complexe, les formules et les fonctionnalités spécifiques à Excel
Travailler avec openpyxl
- Les indices de cellules sont basés sur 1 (row=1, column=1 se rapporte à la cellule A1)
- Utiliser
data_only=Truepour lire les valeurs calculées :load_workbook('file.xlsx', data_only=True) - Avertissement : si ouvert avec
data_only=Trueet enregistré, les formules sont remplacées par les valeurs et définitivement perdues - Pour les fichiers volumineux : utiliser
read_only=Truepour la lecture ouwrite_only=Truepour l'écriture - Les formules sont préservées mais non é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('file.xlsx', dtype={'id': str}) - Pour les fichiers volumineux, lire des colonnes spécifiques :
pd.read_excel('file.xlsx', usecols=['A', 'C', 'E']) - Gérer correctement les dates :
pd.read_excel('file.xlsx', parse_dates=['date_column'])
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 aux cellules avec 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