Paramètres Généraux

Investissements

DésignationQtéPU HTTotal HTTVA %Total TTCAmort (ans)Action
1 000,001 200,00

Total HT : 0,00 EUR

Total TTC : 0,00 EUR

Chiffre d’Affaires Sportif

ActivitéPrix HTVentes A1Ventes A2Ventes A3CA A1 HTAction
5 000,00

Autres Activités

ActivitéTicket HTClients/MoisMarge %Annuel A1 HTAction
0,00

Masse Salariale

PosteNet MensuelEffectifBrut + Charges A1Action
0,00

Charges d’Exploitation

DésignationMensuel HTAnnuel A1 HTAction
12 000,00

Tableau d’Amortissements

DésignationBase HTA1A2A3

Fiscalité

PosteAnnée 1Année 2Année 3
Résultat Imposable0,000,000,00
IS Estimé0,000,000,00
Résultat Net0,000,000,00

Financement

Mensualité : 0,00 EUR

Besoin théorique : 0,00 EUR

Compte de Résultat

IndicateurAnnée 1Année 2Année 3
Chiffre d’Affaires0,000,000,00
Charges Exploitation0,000,000,00
EBITDA (EBE)0,000,000,00
Résultat Net0,000,000,00
Cash-Flow Net0,000,000,00

Seuil de Rentabilité

IndicateurA1A2A3
Point Mort (EUR)0,000,000,00
Point Mort (Mois)0,000,000,00
Mise à jour des calculs…
#bp-app { background: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 5px 15px rgba(0,0,0,0.05); font-family: inherit; }#bp-tabs-nav { display: flex; flex-wrap: wrap; gap: 5px; border-bottom: 3px solid #B3BC00; margin-bottom: 20px; }.bp-tab-btn { padding: 10px 15px; border: 1px solid #ddd; border-bottom: none; background: #f8f8f8; cursor: pointer; font-weight: 600; font-size: 13px; border-radius: 5px 5px 0 0; }.bp-tab-btn.active { background: #B3BC00; color: #fff; border-color: #B3BC00; }.bp-tab-panel { display: none; animation: fadeIn 0.3s; }.bp-tab-panel.active { display: block; }@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }.bp-section-title { color: #B3BC00; font-size: 1.5rem; margin-bottom: 1.5rem; border-left: 5px solid #B3BC00; padding-left: 15px; }.bp-table { width: 100%; margin-bottom: 1rem; border-collapse: collapse; }.bp-table th { background: #f4f4f4; text-align: left; padding: 12px; font-size: 12px; }.bp-table td { padding: 8px; border-bottom: 1px solid #eee; }.bp-input-table { width: 100%; padding: 5px; border: 1px solid #ccc; border-radius: 3px; }.bp-cell-calc { font-weight: 700; text-align: right; color: #333; }.bp-total-row { background: #f9f9f9; font-weight: bold; }.bp-btn-add { background: #B3BC00; color: #fff; border: none; padding: 8px 15px; border-radius: 4px; cursor: pointer; }.bp-btn-remove { background: #ff4444; color: #fff; border: none; width: 25px; height: 25px; border-radius: 50%; cursor: pointer; }.bp-summary-box, .bp-suggestion-box { background: #f0f3e8; padding: 15px; margin-top: 20px; border-radius: 5px; }.bp-accent { font-weight: 800; color: #B3BC00; }.bp-hidden { display: none; }#bp-loader { position: fixed; bottom: 20px; right: 20px; background: #B3BC00; color: white; padding: 10px 20px; border-radius: 30px; z-index: 9999; }(function() { ‘use strict’;// Utilitaires const val = (idOrEl) => { const el = typeof idOrEl === ‘string’ ? document.getElementById(idOrEl) : idOrEl; return el ? parseFloat(el.value) || 0 : 0; };const fmt = (n) => (n || 0).toLocaleString(‘fr-FR’, { minimumFractionDigits: 2, maximumFractionDigits: 2 });const setText = (id, value) => { const el = document.getElementById(id); if (el) el.textContent = fmt(value); };// Gestion des onglets document.querySelectorAll(‘.bp-tab-btn’).forEach(btn => { btn.addEventListener(‘click’, () => { document.querySelectorAll(‘.bp-tab-btn, .bp-tab-panel’).forEach(el => el.classList.remove(‘active’)); btn.classList.add(‘active’); document.getElementById(btn.dataset.tab).classList.add(‘active’); }); });// Suppression de ligne document.getElementById(‘bp-app’).addEventListener(‘click’, (e) => { if (e.target.classList.contains(‘bp-btn-remove’)) { const tr = e.target.closest(‘tr’); if (tr.parentNode.querySelectorAll(‘tr’).length > 1) { tr.remove(); triggerGlobalRecalc(); } } });// Ajout de lignes const bindBtn = (id, tbodyId, html) => { const btn = document.getElementById(id); if(btn) btn.addEventListener(‘click’, () => { const tbody = document.getElementById(tbodyId); const tr = document.createElement(‘tr’); tr.innerHTML = html; tbody.appendChild(tr); triggerGlobalRecalc(); }); };bindBtn(‘btn-add-invest’, ‘invest-tbody’, `0,000,00`);// … Répéter pour les autres boutons si besoin …function triggerGlobalRecalc() { const loader = document.getElementById(‘bp-loader’); if(loader) loader.classList.remove(‘bp-hidden’);// 1. Collecte & Calculs par ligne let invHT = 0, invTTC = 0, ca1 = 0, ca2 = 0, ca3 = 0, ch1 = 0, ch2 = 0, ch3 = 0, rh1 = 0, rh2 = 0, rh3 = 0; const infla = 1 + (val(‘bp-inflation’) / 100);// Investissements document.querySelectorAll(‘#invest-tbody tr’).forEach(tr => { const q = val(tr.querySelector(‘[data-field= »qty »]’)); const p = val(tr.querySelector(‘[data-field= »price_ht »]’)); const t = val(tr.querySelector(‘[data-field= »tva_rate »]’)); const tht = q * p; const tttc = tht * (1 + t/100); tr.querySelector(‘[data-field= »total_ht »]’).textContent = fmt(tht); tr.querySelector(‘[data-field= »total_ttc »]’).textContent = fmt(tttc); invHT += tht; invTTC += tttc; });// CA Sport document.querySelectorAll(‘#ca-sport-tbody tr’).forEach(tr => { const p = val(tr.querySelector(‘[data-field= »price_ht »]’)); ca1 += p * val(tr.querySelector(‘[data-field= »rate_a1″]’)); ca2 += p * val(tr.querySelector(‘[data-field= »rate_a2″]’)); ca3 += p * val(tr.querySelector(‘[data-field= »rate_a3″]’)); });// RH (Calcul simplifié Charges 42%) document.querySelectorAll(‘#rh-tbody tr’).forEach(tr => { const net = val(tr.querySelector(‘[data-field= »salaire_net »]’)); const nb = val(tr.querySelector(‘[data-field= »nb_postes »]’)); const cout = net * 1.42 * 12 * nb; tr.querySelector(‘[data-field= »cout_a1″]’).textContent = fmt(cout); rh1 += cout; rh2 += cout * infla; rh3 += cout * infla * infla; });// Charges document.querySelectorAll(‘#charges-tbody tr’).forEach(tr => { const m = val(tr.querySelector(‘[data-field= »montant_ht »]’)); tr.querySelector(‘[data-field= »annuel_a1″]’).textContent = fmt(m * 12); ch1 += m * 12; ch2 += m * 12 * infla; ch3 += m * 12 * infla * infla; });// Amortissements (Simplifié) let am1 = 0, am2 = 0, am3 = 0; const amortTbody = document.getElementById(‘amort-tbody’); amortTbody.innerHTML = «  »; document.querySelectorAll(‘#invest-tbody tr’).forEach(tr => { const base = val(tr.querySelector(‘[data-field= »qty »]’)) * val(tr.querySelector(‘[data-field= »price_ht »]’)); const dur = val(tr.querySelector(‘[data-field= »amort_years »]’)) || 1; const dot = base / dur; am1 += dot; am2 += dot; am3 += dot; amortTbody.innerHTML += `${tr.querySelector(‘[data-field= »designation »]’).value}${fmt(base)}${fmt(dot)}${fmt(dot)}${fmt(dot)}`; });// Banque const mntEmp = val(‘bp-banque-montant’); const mensualite = mntEmp > 0 ? (mntEmp * (val(‘bp-banque-taux’)/100/12)) / (1 – Math.pow(1 + (val(‘bp-banque-taux’)/100/12), -val(‘bp-banque-duree’)*12)) : 0; setText(‘banque-mensualite’, mensualite);// Synthèse & Fiscalité const ebe1 = ca1 – ch1 – rh1; const is1 = ebe1 > 42500 ? (42500 * 0.15) + (ebe1 – 42500) * 0.25 : Math.max(0, ebe1 * 0.15); setText(‘syn-total-recettes-a1’, ca1); setText(‘syn-total-charges-a1’, ch1 + rh1); setText(‘syn-ebitda-a1’, ebe1); setText(‘syn-res-net-a1’, ebe1 – am1 – is1); setText(‘syn-cf-net-a1’, (ebe1 – am1 – is1) + am1 – (mensualite * 12));// Analyse (Seuil de rentabilité simplifié) const sr1 = (ch1 + rh1 + am1); setText(‘ana-sr-a1’, sr1); setText(‘ana-pm-a1’, ca1 > 0 ? (sr1 / ca1) * 12 : 0);// Update UI setText(‘invest-summary-ht’, invHT); setText(‘invest-summary-ttc’, invTTC); setText(‘sug-besoin’, Math.max(0, invTTC – val(‘bp-capital’) – val(‘bp-cc’)));setTimeout(() => { if(loader) loader.classList.add(‘bp-hidden’); }, 300); }// Event listeners document.getElementById(‘bp-app’).addEventListener(‘input’, (e) => { if (e.target.classList.contains(‘bp-input-calc’)) triggerGlobalRecalc(); });// Init triggerGlobalRecalc();})();