download
raw
5.77 kB
import numpy as np
import pandas as pd
# -----------------------------
# 1. Paramètres de base
# -----------------------------
# Données de l'année de base (N = dernier exercice connu, ex: 2024)
CA_N = 500_000_000 # Chiffre d'affaires 2024 (exemple, à remplacer)
EBE_N = 40_000_000 # EBE 2024
EBIT_N = 30_000_000 # Résultat d'exploitation 2024
BFR_N = 50_000_000 # BFR 2024
Capex_N = 12_000_000 # Capex 2024 (investissements de maintien/développement)
Dette_financiere_N = 80_000_000 # Dettes financières totales
Tresorerie_N = 10_000_000 # Trésorerie
taux_IS = 0.25
taux_actualisation = 0.08 # 8%
taux_croissance_volume = 0.05
taux_inflation_prix = 0.05
taux_inflation_couts = 0.05
horizon = 5 # 5 ans de projection
# Hypothèse : marge EBE et marge EBIT constantes (à partir de l'année N)
marge_EBE = EBE_N / CA_N
marge_EBIT = EBIT_N / CA_N
# Hypothèse simple : Capex proportionnel au CA
capex_ratio = Capex_N / CA_N
# Hypothèse BFR normatif : BFR en % du CA (à partir de l'année N)
bfr_ratio = BFR_N / CA_N
# -----------------------------
# 2. Projection des flux sur 5 ans
# -----------------------------
annees = [f"N+{t}" for t in range(1, horizon + 1)]
resultats = []
CA_t = CA_N
for t in range(1, horizon + 1):
# Croissance nominale du CA : volume * prix
croissance_CA = (1 + taux_croissance_volume) * (1 + taux_inflation_prix) - 1
CA_t = CA_t * (1 + croissance_CA)
# EBE et EBIT en gardant les marges constantes
EBE_t = marge_EBE * CA_t
EBIT_t = marge_EBIT * CA_t
# Impôt sur le résultat d'exploitation
impot_t = max(0, EBIT_t) * taux_IS # pas d'impôt si EBIT négatif
# Capex proportionnel au CA
Capex_t = capex_ratio * CA_t
# BFR normatif : % du CA
BFR_t = bfr_ratio * CA_t
if t == 1:
delta_BFR_t = BFR_t - BFR_N
else:
# variation par rapport à l'année précédente
BFR_prev = resultats[-1]["BFR"]
delta_BFR_t = BFR_t - BFR_prev
# Free Cash Flow (FCF)
FCF_t = EBE_t - impot_t - delta_BFR_t - Capex_t
resultats.append({
"Annee": f"N+{t}",
"CA": CA_t,
"EBE": EBE_t,
"EBIT": EBIT_t,
"Impots": impot_t,
"Capex": Capex_t,
"BFR": BFR_t,
"Delta_BFR": delta_BFR_t,
"FCF": FCF_t
})
df = pd.DataFrame(resultats)
# -----------------------------
# 3. VAN des FCF et valeur terminale
# -----------------------------
# Actualisation des FCF
df["Facteur_actualisation"] = [(1 / (1 + taux_actualisation) ** t) for t in range(1, horizon + 1)]
df["FCF_actualise"] = df["FCF"] * df["Facteur_actualisation"]
VAN_FCF = df["FCF_actualise"].sum()
# Valeur terminale (hypothèse de croissance à long terme g_inf)
g_inf = 0.02 # 2% de croissance à long terme, à adapter
FCF_T = df.iloc[-1]["FCF"]
FCF_T_plus_1 = FCF_T * (1 + g_inf)
Valeur_terminal = FCF_T_plus_1 / (taux_actualisation - g_inf)
Valeur_terminal_actualisee = Valeur_terminal / ((1 + taux_actualisation) ** horizon)
Valeur_entreprise = VAN_FCF + Valeur_terminal_actualisee
# -----------------------------
# 4. Dette nette et valeur des titres
# -----------------------------
Dette_nette = Dette_financiere_N - Tresorerie_N
Valeur_titres = Valeur_entreprise - Dette_nette
# -----------------------------
# 5. Capacité d'endettement et apport en capital
# -----------------------------
# Règle empirique : Dette max ≈ multiple * EBE moyen prévisionnel
multiple_EBE = 3.5
EBE_moyen = df["EBE"].mean()
Dette_max = multiple_EBE * EBE_moyen
Apport_min = max(0, Valeur_titres - Dette_max)
# -----------------------------
# 6. Budget de trésorerie de la holding
# -----------------------------
taux_dette_senior = 0.05
duree_dette = horizon # 5 ans
Dette_senior = min(Dette_max, Valeur_titres) # par prudence
# Hypothèse : amortissement linéaire du principal
remboursement_principal_annuel = Dette_senior / duree_dette
treasury = []
tresorerie_debut = Apport_min # la holding commence avec l'apport en capital
for t in range(1, horizon + 1):
interets = Dette_senior * taux_dette_senior
# On suppose que la holding remonte chaque année la totalité du FCF de la cible
FCF_remonte = df.iloc[t-1]["FCF"]
tresorerie_fin = tresorerie_debut + FCF_remonte - interets - remboursement_principal_annuel
treasury.append({
"Annee": f"N+{t}",
"Tresorerie_debut": tresorerie_debut,
"FCF_remonte": FCF_remonte,
"Interets": interets,
"Remboursement_principal": remboursement_principal_annuel,
"Tresorerie_fin": tresorerie_fin
})
tresorerie_debut = tresorerie_fin
Dette_senior -= remboursement_principal_annuel
df_tresorerie = pd.DataFrame(treasury)
# -----------------------------
# 7. Affichage des résultats
# -----------------------------
pd.set_option("display.float_format", lambda x: f"{x:,.0f}")
print("=== Projection des flux (FCF) ===")
print(df[["Annee", "CA", "EBE", "EBIT", "Impots", "Capex", "Delta_BFR", "FCF"]])
print("\n=== VAN des FCF et valeur d'entreprise ===")
print(f"VAN des FCF sur {horizon} ans : {VAN_FCF:,.0f} €")
print(f"Valeur terminale actualisée : {Valeur_terminal_actualisee:,.0f} €")
print(f"Valeur d'entreprise (VE) : {Valeur_entreprise:,.0f} €")
print("\n=== Dette nette et valeur des titres ===")
print(f"Dette nette : {Dette_nette:,.0f} €")
print(f"Valeur des titres : {Valeur_titres:,.0f} €")
print("\n=== Capacité d'endettement et apport en capital ===")
print(f"EBE moyen prévisionnel : {EBE_moyen:,.0f} €")
print(f"Dette max (≈ {multiple_EBE} x EBE moyen) : {Dette_max:,.0f} €")
print(f"Apport en capital minimum : {Apport_min:,.0f} €")
print("\n=== Budget de trésorerie de la holding ===")
print(df_tresorerie)

Xet Storage Details

Size:
5.77 kB
·
Xet hash:
a7297a9270ab024fdb067efcf6ae0c943d0e8200f61b09d2aa3655f9bf935df9

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.