
Les BSPCE (Bons de Souscription de Parts de Créateur d’Entreprise) sont devenus l’un des dispositifs phares de l’actionnariat salarié dans les start-up et PME innovantes françaises. Ils permettent d’attirer, de fidéliser et de motiver les talents stratégiques en les associant directement à la création de valeur de l’entreprise.
Mais le régime juridique et fiscal des BSPCE a connu deux réformes successives majeures : la loi de finances pour 2025 (loi n° 2025-127 du 14 février 2025) et la loi de finances pour 2026 (loi n° 2026-103 du 19 février 2026). Ces textes modifient à la fois les conditions d’éligibilité des sociétés émettrices et le traitement fiscal des gains réalisés par les bénéficiaires.
Le cabinet DIGIFEC, cabinet d’avocats d’affaires basé à Paris, accompagne les dirigeants, fondateurs et investisseurs dans la structuration juridique et fiscale de leurs plans d’intéressement. Cet article fait le point sur les règles applicables en 2026, illustrées d’exemples concrets et conformes aux textes en vigueur consultés sur Légifrance et le BOFiP.
Les BSPCE sont des valeurs mobilières donnant accès au capital, prévues par l’article 163 bis G du Code général des impôts (CGI). Ils confèrent à leurs titulaires le droit de souscrire des actions de la société émettrice à un prix fixé définitivement le jour de l’attribution par l’assemblée générale extraordinaire.
L’intérêt est double :
Le cycle de vie d’un BSPCE comprend généralement cinq étapes :
Chaque étape soulève des problématiques juridiques, comptables et fiscales distinctes que les dirigeants doivent anticiper dès la rédaction du plan d’attribution.
À la différence des stock-options classiques ou des attributions gratuites d’actions (AGA), les BSPCE bénéficient d’un régime fiscal spécifique et plus favorable dans la plupart des cas. La société émettrice n’est en principe redevable d’aucune contribution patronale spécifique au titre de l’attribution, ce qui constitue un atout décisif par rapport aux actions gratuites soumises à la contribution patronale prévue à l’article L. 137-13 du Code de la sécurité sociale.
En revanche, les BSPCE sont strictement réservés à certaines sociétés, contrairement aux stock-options qui peuvent être attribuées par des sociétés cotées de toute taille.
L’article 163 bis G du CGI fixe des conditions cumulatives strictes que la société émettrice doit respecter de manière continue.
Pour émettre des BSPCE en 2026, la société doit notamment :
C’est précisément sur ce dernier point que la loi de finances pour 2026 a apporté un assouplissement notable. Pour les BSPCE attribués à compter du 1er janvier 2026, le seuil minimal de détention du capital par des personnes physiques est abaissé de 25 % à 15 % (article 25 de la loi n° 2026-103 du 19 février 2026). Cette détention peut être directe ou indirecte via une holding détenue à au moins 75 % par des personnes physiques.
L’enjeu pratique est considérable : avec l’ancien seuil, une start-up dont le capital était détenu à 80 % par des fonds d’investissement perdait son éligibilité aux BSPCE. Désormais, les sociétés détenues jusqu’à 85 % par des investisseurs institutionnels restent éligibles, ce qui sécurise les scale-up ayant réalisé plusieurs tours de table.
Les BSPCE peuvent être attribués :
Exemple concret : si la société émettrice détient 90 % d’une filiale, qui détient elle-même 85 % d’une sous-filiale, le produit est de 76,5 % (90 % × 85 %). La sous-filiale peut donc désormais bénéficier du dispositif, ce qui facilite la mise en place d’un plan d’intéressement homogène dans les groupes structurés en plusieurs niveaux.
Les consultants externes, prestataires indépendants et freelances restent en revanche exclus du dispositif.
C’est ici que la loi de finances pour 2025 a opéré un changement fondamental. Auparavant, la totalité du gain réalisé entre le prix d’exercice et le prix de cession était imposée au régime des plus-values mobilières.
Depuis le 1er janvier 2025, l’article 163 bis G du CGI distingue clairement deux gains de nature différente, qui obéissent à des règles fiscales distinctes.
Le gain d’exercice correspond à la différence entre la valeur réelle des titres au jour de l’exercice des bons et le prix d’exercice fixé lors de leur attribution. Il revêt désormais une nature salariale par détermination de la loi.
Toutefois, ce gain n’est pas imposé selon le barème classique des traitements et salaires. Il bénéficie d’un taux forfaitaire :
À ces taux s’ajoutent les prélèvements sociaux au taux global de 17,2 %.
L’option pour le barème progressif de l’impôt sur le revenu reste possible uniquement lorsque le taux de 12,8 % s’applique. Bonne nouvelle de la loi de finances 2026 : pour apprécier la durée d’activité de 3 ans, il est désormais possible de cumuler les périodes effectuées au sein de la société émettrice, d’une filiale ou d’une sous-filiale éligible. Cette mesure facilite la mobilité intragroupe sans pénaliser le bénéficiaire.
L’imposition du gain d’exercice intervient l’année de la disposition, cession, conversion au porteur ou mise en location des titres souscrits.
La plus-value de cession correspond à la différence entre le prix de cession des titres et leur valeur au jour de l’exercice des bons. Elle relève du régime de droit commun des plus-values de cession de valeurs mobilières prévu à l’article 150-0 A du CGI.
Elle est donc soumise au prélèvement forfaitaire unique (PFU) de 30 % (12,8 % d’IR + 17,2 % de prélèvements sociaux), avec option possible pour le barème progressif si cela s’avère plus favorable.
À noter qu’un nouveau régime spécifique applicable aux management packages, codifié à l’article 163 bis H du CGI par la loi de finances 2025, peut dans certaines hypothèses limiter le bénéfice du régime des plus-values pour la fraction du gain excédant un plafond calculé par référence à la performance de la société. Cette articulation reste complexe et nécessite une analyse au cas par cas.
Prenons l’hypothèse d’un développeur clé d’une start-up, salarié depuis 4 ans, qui exerce ses BSPCE puis revend immédiatement les actions :
Gain d’exercice : (50 € − 10 €) × 1 000 = 40 000 €
ComposanteTauxMontantImpôt sur le revenu (taux réduit ≥ 3 ans)12,8 %5 120 €Prélèvements sociaux17,2 %6 880 €Total imposition30 %12 000 €
Gain net après imposition : 40 000 € − 12 000 € = 28 000 €.
Si le bénéficiaire avait moins de 3 ans d’ancienneté, le taux d’impôt sur le revenu serait porté à 30 %, soit une imposition globale de 47,2 % sur le gain d’exercice (30 % IR + 17,2 % PS), sans option pour le barème.
En cas de cession différée des titres après leur exercice, la plus-value supplémentaire éventuellement constatée sera imposée distinctement au PFU de 30 % au titre du régime des plus-values mobilières.
La société émettrice doit, avant le 1er mars de l’année suivant celle de l’exercice, remettre à chaque bénéficiaire un état individuel mentionnant le nombre de bons exercés, le prix d’exercice, la date d’attribution et la valeur des titres au jour de l’exercice (article 41 V bis de l’annexe III au CGI). La société atteste également que les bons ont été émis dans les conditions prévues à l’article 163 bis G du CGI.
Une transmission à l’administration fiscale est par ailleurs requise via la déclaration sociale nominative (DSN), conformément à l’article 87 du CGI.
Côté bénéficiaire, les revenus doivent être déclarés sur la déclaration 2042 C :
Vigilance : les obligations déclaratives évoluent régulièrement, notamment en cas de mobilité internationale du bénéficiaire ou d’opérations d’apport à une holding. Une analyse personnalisée est recommandée.
La mise en place de BSPCE doit s’inscrire dans une stratégie globale de structuration juridique et financière.
Lors d’une levée de fonds, la condition de détention par des personnes physiques (désormais 15 %) doit être surveillée à chaque tour de table pour préserver l’éligibilité du dispositif. La dilution progressive des fondateurs et la montée des fonds au capital doivent être modélisées avec précision.
Lors d’une opération de M&A (cession, fusion, apport à une holding), plusieurs points méritent une attention particulière :
Exemple concret : une scale-up française cible d’une acquisition par un groupe industriel européen devra anticiper, dans la documentation juridique de l’opération, le sort des BSPCE non exercés, la liquidation des plans existants et les éventuelles clauses de complément de prix (earn-out) dont le traitement fiscal a été précisé par la loi de finances 2025 dans le cadre du nouveau régime des management packages.
Le cabinet DIGIFEC intervient à toutes les étapes du cycle de vie de votre entreprise pour sécuriser et optimiser votre dispositif d’actionnariat salarié et plus largement votre structuration juridique.
Notre accompagnement porte notamment sur :
Exemple d’intervention : pour une plateforme e-commerce en phase de Série B, DIGIFEC peut combiner la mise en conformité RGPD des traitements de données clients, la mise en place d’un plan BSPCE couvrant les développeurs clés, la rédaction d’un pacte d’associés sécurisant la gouvernance après l’entrée des nouveaux investisseurs, et la structuration d’une holding patrimoniale pour les fondateurs.
Les BSPCE restent en 2026 l’un des dispositifs les plus attractifs pour associer les talents au capital d’une PME innovante française. Les réformes récentes les ont rendus plus accessibles, notamment pour les sociétés ayant levé des fonds importants ou organisées en groupe, mais elles ont aussi complexifié l’articulation entre gain d’exercice et plus-value de cession.
Anticiper, sécuriser et documenter chaque étape est désormais essentiel pour préserver le bénéfice du régime fiscal favorable et éviter tout risque de requalification.
Pour toute question sur la mise en place d’un plan BSPCE, la structuration juridique d’une opération de croissance ou la mise en conformité de votre activité, les équipes du cabinet DIGIFEC sont à votre disposition.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Simulateur fiscalité BSPCE 2026 | DIGIFEC</title>
<meta name="description" content="Simulateur juridique et fiscal BSPCE 2026. Calculez votre gain net après impôt, gain d'exercice et plus-value de cession selon l'article 163 bis G du CGI." />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=Manrope:wght@400;500;600;700&display=swap" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
<style>
:root {
--color-bg: #FFFFFF;
--color-primary: #016666;
--color-primary-dark: #014A4A;
--color-primary-soft: #E6F2F2;
--color-primary-faint: #F4F9F9;
--color-text: #0A1F1F;
--color-text-muted: #4A6363;
--color-text-light: #6B8585;
--color-border: #D9E5E5;
--color-border-light: #EAF1F1;
--color-tax: #B85C5C;
--color-tax-soft: #F8ECEC;
--color-warning-bg: #FFF8E1;
--color-warning-border: #E8D08A;
--color-warning-text: #6B5311;
--shadow-sm: 0 1px 2px rgba(1, 102, 102, 0.04);
--shadow-md: 0 4px 16px rgba(1, 102, 102, 0.06);
--shadow-lg: 0 10px 40px rgba(1, 102, 102, 0.08);
--radius-sm: 6px;
--radius-md: 10px;
--radius-lg: 16px;
--font-display: 'Fraunces', Georgia, serif;
--font-sans: 'Manrope', -apple-system, BlinkMacSystemFont, sans-serif;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
font-family: var(--font-sans);
background: var(--color-bg);
color: var(--color-text);
line-height: 1.6;
font-size: 16px;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* HEADER */
.header {
border-bottom: 1px solid var(--color-border-light);
background: var(--color-bg);
position: sticky;
top: 0;
z-index: 50;
backdrop-filter: blur(8px);
background: rgba(255, 255, 255, 0.92);
}
.header-inner {
max-width: 1280px;
margin: 0 auto;
padding: 18px 32px;
display: flex;
align-items: center;
justify-content: space-between;
}
.brand {
display: flex;
align-items: center;
gap: 12px;
text-decoration: none;
color: var(--color-text);
}
.brand-mark {
width: 36px;
height: 36px;
border-radius: var(--radius-sm);
background: var(--color-primary);
display: flex;
align-items: center;
justify-content: center;
color: white;
font-family: var(--font-display);
font-weight: 600;
font-size: 18px;
}
.brand-name {
font-family: var(--font-display);
font-size: 20px;
font-weight: 600;
letter-spacing: -0.01em;
}
.brand-sub {
font-size: 11px;
color: var(--color-text-muted);
text-transform: uppercase;
letter-spacing: 0.12em;
margin-top: 1px;
}
.header-link {
color: var(--color-text-muted);
text-decoration: none;
font-size: 14px;
font-weight: 500;
padding: 8px 16px;
border: 1px solid var(--color-border);
border-radius: var(--radius-sm);
transition: all 0.2s ease;
}
.header-link:hover {
border-color: var(--color-primary);
color: var(--color-primary);
}
/* HERO */
.hero {
max-width: 1280px;
margin: 0 auto;
padding: 64px 32px 32px;
}
.eyebrow {
display: inline-block;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.16em;
color: var(--color-primary);
background: var(--color-primary-soft);
padding: 6px 14px;
border-radius: 99px;
margin-bottom: 20px;
}
h1 {
font-family: var(--font-display);
font-size: clamp(2rem, 4.5vw, 3.25rem);
font-weight: 500;
line-height: 1.1;
letter-spacing: -0.02em;
margin-bottom: 18px;
max-width: 800px;
}
h1 em {
font-style: italic;
color: var(--color-primary);
font-weight: 500;
}
.hero-lead {
font-size: 17px;
color: var(--color-text-muted);
max-width: 720px;
line-height: 1.65;
}
.hero-meta {
margin-top: 24px;
display: flex;
gap: 24px;
flex-wrap: wrap;
align-items: center;
font-size: 13px;
color: var(--color-text-light);
}
.hero-meta-item {
display: flex;
align-items: center;
gap: 8px;
}
.hero-meta-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--color-primary);
}
/* MAIN LAYOUT */
.container {
max-width: 1280px;
margin: 0 auto;
padding: 24px 32px 64px;
}
.grid {
display: grid;
grid-template-columns: minmax(0, 420px) minmax(0, 1fr);
gap: 32px;
align-items: start;
}
/* CARD */
.card {
background: var(--color-bg);
border: 1px solid var(--color-border-light);
border-radius: var(--radius-lg);
padding: 32px;
box-shadow: var(--shadow-sm);
}
.card-elevated {
box-shadow: var(--shadow-md);
}
.card-header {
margin-bottom: 28px;
padding-bottom: 20px;
border-bottom: 1px solid var(--color-border-light);
}
.card-title {
font-family: var(--font-display);
font-size: 22px;
font-weight: 600;
letter-spacing: -0.01em;
margin-bottom: 6px;
}
.card-subtitle {
font-size: 13px;
color: var(--color-text-muted);
}
/* FORM */
.form-group {
margin-bottom: 22px;
}
.form-group:last-of-type {
margin-bottom: 0;
}
label {
display: block;
font-size: 13px;
font-weight: 600;
color: var(--color-text);
margin-bottom: 8px;
letter-spacing: -0.005em;
}
.label-hint {
font-size: 12px;
color: var(--color-text-light);
font-weight: 400;
margin-top: 4px;
line-height: 1.5;
}
.input-wrapper {
position: relative;
}
input[type="number"] {
width: 100%;
padding: 12px 14px;
padding-right: 40px;
font-family: var(--font-sans);
font-size: 15px;
font-weight: 500;
color: var(--color-text);
background: var(--color-bg);
border: 1.5px solid var(--color-border);
border-radius: var(--radius-sm);
transition: all 0.2s ease;
-moz-appearance: textfield;
}
input[type="number"]::-webkit-outer-spin-button,
input[type="number"]::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
input[type="number"]:focus {
outline: none;
border-color: var(--color-primary);
box-shadow: 0 0 0 4px rgba(1, 102, 102, 0.08);
}
.input-suffix {
position: absolute;
right: 14px;
top: 50%;
transform: translateY(-50%);
font-size: 14px;
color: var(--color-text-light);
font-weight: 500;
pointer-events: none;
}
/* TOGGLE / RADIO */
.toggle-group {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
background: var(--color-primary-faint);
padding: 4px;
border-radius: var(--radius-sm);
border: 1px solid var(--color-border-light);
}
.toggle-option {
position: relative;
}
.toggle-option input[type="radio"] {
position: absolute;
opacity: 0;
pointer-events: none;
}
.toggle-option label {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 10px 12px;
border-radius: 4px;
cursor: pointer;
text-align: center;
transition: all 0.2s ease;
margin-bottom: 0;
font-weight: 600;
font-size: 13px;
color: var(--color-text-muted);
}
.toggle-option input[type="radio"]:checked + label {
background: var(--color-primary);
color: white;
box-shadow: var(--shadow-sm);
}
.toggle-rate {
font-size: 11px;
font-weight: 500;
margin-top: 2px;
opacity: 0.85;
}
/* INFO BOX */
.info-box {
margin-top: 24px;
padding: 14px 16px;
background: var(--color-primary-faint);
border-left: 3px solid var(--color-primary);
border-radius: 4px;
font-size: 13px;
color: var(--color-text-muted);
line-height: 1.55;
}
.info-box strong {
color: var(--color-primary);
font-weight: 600;
}
/* RESULTS */
.results-stack {
display: flex;
flex-direction: column;
gap: 24px;
}
/* STAT CARDS */
.stats-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.stat-card {
padding: 22px;
border: 1px solid var(--color-border-light);
border-radius: var(--radius-md);
background: var(--color-bg);
transition: all 0.25s ease;
}
.stat-card-primary {
background: var(--color-primary);
color: white;
border-color: var(--color-primary);
}
.stat-label {
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--color-text-light);
margin-bottom: 10px;
}
.stat-card-primary .stat-label {
color: rgba(255, 255, 255, 0.85);
}
.stat-value {
font-family: var(--font-display);
font-size: 26px;
font-weight: 600;
letter-spacing: -0.02em;
line-height: 1.1;
}
.stat-sub {
font-size: 12px;
color: var(--color-text-light);
margin-top: 6px;
}
.stat-card-primary .stat-sub {
color: rgba(255, 255, 255, 0.75);
}
.stat-tax .stat-value { color: var(--color-tax); }
/* CHART CARD */
.chart-wrap {
position: relative;
height: 320px;
margin-top: 8px;
}
/* BREAKDOWN TABLE */
.breakdown-table {
width: 100%;
border-collapse: collapse;
font-size: 14px;
}
.breakdown-table th,
.breakdown-table td {
padding: 14px 16px;
text-align: left;
border-bottom: 1px solid var(--color-border-light);
}
.breakdown-table th {
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.08em;
color: var(--color-text-light);
background: var(--color-primary-faint);
}
.breakdown-table td:last-child,
.breakdown-table th:last-child {
text-align: right;
font-variant-numeric: tabular-nums;
font-weight: 500;
}
.breakdown-table tr.section-header td {
background: var(--color-primary-faint);
font-weight: 600;
color: var(--color-primary);
font-size: 13px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.breakdown-table tr.total-row td {
border-top: 2px solid var(--color-primary);
border-bottom: none;
padding-top: 18px;
padding-bottom: 18px;
font-size: 16px;
font-weight: 600;
color: var(--color-text);
background: var(--color-primary-faint);
}
.breakdown-table tr.total-row td:last-child {
color: var(--color-primary);
font-family: var(--font-display);
font-size: 18px;
}
.cell-tax { color: var(--color-tax); }
/* COMPARISON CALLOUT */
.comparison {
background: var(--color-primary-faint);
border: 1px solid var(--color-border-light);
border-radius: var(--radius-md);
padding: 24px;
}
.comparison-title {
font-family: var(--font-display);
font-size: 18px;
font-weight: 600;
margin-bottom: 6px;
}
.comparison-sub {
font-size: 13px;
color: var(--color-text-muted);
margin-bottom: 18px;
}
.comparison-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
}
.scenario {
background: white;
padding: 18px;
border-radius: var(--radius-sm);
border: 1px solid var(--color-border-light);
}
.scenario-active {
border-color: var(--color-primary);
box-shadow: 0 0 0 3px rgba(1, 102, 102, 0.06);
}
.scenario-label {
font-size: 12px;
font-weight: 600;
color: var(--color-text-muted);
margin-bottom: 4px;
}
.scenario-active .scenario-label {
color: var(--color-primary);
}
.scenario-rate {
font-size: 11px;
color: var(--color-text-light);
margin-bottom: 14px;
text-transform: uppercase;
letter-spacing: 0.06em;
}
.scenario-net {
font-family: var(--font-display);
font-size: 22px;
font-weight: 600;
color: var(--color-text);
letter-spacing: -0.01em;
}
.scenario-active .scenario-net {
color: var(--color-primary);
}
.scenario-tax-info {
font-size: 12px;
color: var(--color-text-light);
margin-top: 8px;
}
.delta {
margin-top: 16px;
padding: 12px 14px;
background: white;
border-radius: var(--radius-sm);
font-size: 13px;
color: var(--color-text-muted);
border: 1px dashed var(--color-border);
}
.delta strong {
color: var(--color-primary);
font-weight: 600;
}
/* DISCLAIMER */
.disclaimer {
margin-top: 48px;
padding: 24px 28px;
border-radius: var(--radius-md);
background: var(--color-primary-faint);
border: 1px solid var(--color-border-light);
font-size: 13px;
color: var(--color-text-muted);
line-height: 1.65;
}
.disclaimer-title {
font-weight: 600;
color: var(--color-primary);
margin-bottom: 8px;
font-size: 14px;
}
.disclaimer a {
color: var(--color-primary);
text-decoration: underline;
text-underline-offset: 3px;
}
/* FOOTER */
.footer {
border-top: 1px solid var(--color-border-light);
padding: 32px;
text-align: center;
font-size: 13px;
color: var(--color-text-light);
}
.footer strong {
color: var(--color-primary);
font-weight: 600;
}
/* RESPONSIVE */
@media (max-width: 1024px) {
.grid {
grid-template-columns: 1fr;
gap: 24px;
}
.stats-grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 640px) {
.header-inner { padding: 14px 20px; }
.hero { padding: 40px 20px 24px; }
.container { padding: 16px 20px 48px; }
.card { padding: 22px; }
.card-header { margin-bottom: 22px; padding-bottom: 16px; }
.card-title { font-size: 19px; }
.stats-grid { grid-template-columns: 1fr; gap: 12px; }
.comparison-grid { grid-template-columns: 1fr; }
.breakdown-table th,
.breakdown-table td { padding: 12px 10px; font-size: 13px; }
.chart-wrap { height: 260px; }
h1 { font-size: 2rem; }
.hero-lead { font-size: 15px; }
.brand-sub { display: none; }
}
</style>
</head>
<body>
<header class="header">
<div class="header-inner">
<a href="https://www.digifec.com" class="brand">
<div class="brand-mark">D</div>
<div>
<div class="brand-name">DIGIFEC</div>
<div class="brand-sub">Avocats & Conseil</div>
</div>
</a>
<a href="https://www.digifec.com" class="header-link" target="_blank" rel="noopener">Nous contacter</a>
</div>
</header>
<section class="hero">
<span class="eyebrow">Simulateur juridique & fiscal</span>
<h1>Calculez votre <em>gain net BSPCE</em><br>après imposition en 2026</h1>
<p class="hero-lead">
Estimez en temps réel le gain d'exercice, la plus-value de cession et l'imposition globale applicable à vos
bons de souscription de parts de créateur d'entreprise, conformément à l'article 163 bis G du Code général des impôts
et aux lois de finances pour 2025 et 2026.
</p>
<div class="hero-meta">
<div class="hero-meta-item"><span class="hero-meta-dot"></span> Article 163 bis G du CGI</div>
<div class="hero-meta-item"><span class="hero-meta-dot"></span> LF 2025 et LF 2026</div>
<div class="hero-meta-item"><span class="hero-meta-dot"></span> Mise à jour février 2026</div>
</div>
</section>
<main class="container">
<div class="grid">
<!-- INPUTS -->
<aside class="card card-elevated">
<div class="card-header">
<h2 class="card-title">Vos paramètres</h2>
<p class="card-subtitle">Renseignez les données de votre plan BSPCE</p>
</div>
<div class="form-group">
<label for="nbBons">Nombre de BSPCE exercés</label>
<div class="input-wrapper">
<input type="number" id="nbBons" value="1000" min="1" step="1" />
<span class="input-suffix">bons</span>
</div>
</div>
<div class="form-group">
<label for="prixExercice">Prix d'exercice par action</label>
<div class="input-wrapper">
<input type="number" id="prixExercice" value="10" min="0" step="0.01" />
<span class="input-suffix">€</span>
</div>
<div class="label-hint">Prix fixé par l'AGE au jour de l'attribution des bons.</div>
</div>
<div class="form-group">
<label for="valeurExercice">Valeur réelle au jour de l'exercice</label>
<div class="input-wrapper">
<input type="number" id="valeurExercice" value="50" min="0" step="0.01" />
<span class="input-suffix">€</span>
</div>
<div class="label-hint">Valeur de l'action lors de la souscription effective.</div>
</div>
<div class="form-group">
<label for="prixCession">Prix de cession des actions</label>
<div class="input-wrapper">
<input type="number" id="prixCession" value="50" min="0" step="0.01" />
<span class="input-suffix">€</span>
</div>
<div class="label-hint">Prix de revente. Identique à la valeur d'exercice si cession immédiate.</div>
</div>
<div class="form-group">
<label>Ancienneté du bénéficiaire à la cession</label>
<div class="toggle-group" role="radiogroup">
<div class="toggle-option">
<input type="radio" name="anciennete" id="anc-oui" value="oui" checked />
<label for="anc-oui">
≥ 3 ans
<span class="toggle-rate">IR à 12,8 %</span>
</label>
</div>
<div class="toggle-option">
<input type="radio" name="anciennete" id="anc-non" value="non" />
<label for="anc-non">
< 3 ans
<span class="toggle-rate">IR à 30 %</span>
</label>
</div>
</div>
<div class="label-hint">Cumul possible des périodes en société émettrice, filiale et sous-filiale (LF 2026).</div>
</div>
<div class="info-box">
<strong>À retenir :</strong> depuis la LF 2025, le gain d'exercice (avantage salarial) et la plus-value de cession
sont imposés distinctement. Les prélèvements sociaux s'appliquent au taux global de 17,2 %.
</div>
</aside>
<!-- RESULTS -->
<div class="results-stack">
<!-- STATS -->
<section class="stats-grid">
<div class="stat-card">
<div class="stat-label">Gain brut total</div>
<div class="stat-value" id="stat-brut">0 €</div>
<div class="stat-sub">Avant imposition</div>
</div>
<div class="stat-card stat-tax">
<div class="stat-label">Imposition totale</div>
<div class="stat-value" id="stat-impot">0 €</div>
<div class="stat-sub" id="stat-impot-sub">IR + prélèvements sociaux</div>
</div>
<div class="stat-card">
<div class="stat-label">Taux effectif</div>
<div class="stat-value" id="stat-taux">0 %</div>
<div class="stat-sub">Sur le gain total</div>
</div>
<div class="stat-card stat-card-primary">
<div class="stat-label">Gain net</div>
<div class="stat-value" id="stat-net">0 €</div>
<div class="stat-sub">Après imposition</div>
</div>
</section>
<!-- CHART -->
<section class="card">
<div class="card-header">
<h2 class="card-title">Décomposition du gain</h2>
<p class="card-subtitle">Répartition entre gain net, impôt sur le revenu et prélèvements sociaux</p>
</div>
<div class="chart-wrap">
<canvas id="chart-decomposition"></canvas>
</div>
</section>
<!-- COMPARISON -->
<section class="comparison">
<div class="comparison-title">Impact de l'ancienneté sur l'imposition</div>
<div class="comparison-sub">
Comparaison du gain net selon que la condition de 3 ans d'activité dans la société est remplie ou non.
</div>
<div class="comparison-grid">
<div class="scenario" id="scenario-3ans">
<div class="scenario-label">Ancienneté ≥ 3 ans</div>
<div class="scenario-rate">IR 12,8 % + PS 17,2 %</div>
<div class="scenario-net" id="scenario-3ans-net">0 €</div>
<div class="scenario-tax-info" id="scenario-3ans-tax">Imposition : 0 €</div>
</div>
<div class="scenario" id="scenario-moins3">
<div class="scenario-label">Ancienneté < 3 ans</div>
<div class="scenario-rate">IR 30 % + PS 17,2 %</div>
<div class="scenario-net" id="scenario-moins3-net">0 €</div>
<div class="scenario-tax-info" id="scenario-moins3-tax">Imposition : 0 €</div>
</div>
</div>
<div class="delta" id="delta-message">
Différence en faveur de l'ancienneté ≥ 3 ans : <strong>0 €</strong>
</div>
</section>
<!-- BREAKDOWN TABLE -->
<section class="card">
<div class="card-header">
<h2 class="card-title">Détail du calcul fiscal</h2>
<p class="card-subtitle">Décomposition ligne par ligne selon les articles 163 bis G et 150-0 A du CGI</p>
</div>
<div style="overflow-x: auto;">
<table class="breakdown-table">
<thead>
<tr>
<th>Composante</th>
<th>Taux applicable</th>
<th>Montant</th>
</tr>
</thead>
<tbody>
<tr class="section-header"><td colspan="3">Gain d'exercice (avantage salarial)</td></tr>
<tr><td>Gain brut d'exercice</td><td>—</td><td id="row-gainEx">0 €</td></tr>
<tr><td>Impôt sur le revenu</td><td id="row-tauxIRex">12,8 %</td><td class="cell-tax" id="row-irEx">0 €</td></tr>
<tr><td>Prélèvements sociaux</td><td>17,2 %</td><td class="cell-tax" id="row-psEx">0 €</td></tr>
<tr class="section-header"><td colspan="3">Plus-value de cession (régime art. 150-0 A CGI)</td></tr>
<tr><td>Plus-value brute</td><td>—</td><td id="row-pv">0 €</td></tr>
<tr><td>Impôt sur le revenu (PFU)</td><td>12,8 %</td><td class="cell-tax" id="row-irPv">0 €</td></tr>
<tr><td>Prélèvements sociaux</td><td>17,2 %</td><td class="cell-tax" id="row-psPv">0 €</td></tr>
<tr class="total-row"><td>Gain net après imposition</td><td></td><td id="row-net">0 €</td></tr>
</tbody>
</table>
</div>
</section>
</div>
</div>
<div class="disclaimer">
<div class="disclaimer-title">Avertissement juridique</div>
Ce simulateur est fourni à titre d'information générale. Les résultats reposent sur les règles applicables aux BSPCE
attribués à compter du 1er janvier 2018, telles qu'aménagées par la loi n° 2025-127 du 14 février 2025 et la loi
n° 2026-103 du 19 février 2026. Il ne tient pas compte des situations particulières (option pour le barème
progressif de l'IR, contribution exceptionnelle sur les hauts revenus, articulation avec l'article 163 bis H du CGI,
mobilité internationale, opérations d'apport ou d'échange de titres). Pour une analyse personnalisée et fiable,
consultez le cabinet
<a href="https://www.digifec.com" target="_blank" rel="noopener">DIGIFEC</a>.
</div>
</main>
<footer class="footer">
© 2026 <strong>DIGIFEC</strong> · Cabinet d'avocats d'affaires · Paris ·
<a href="https://www.digifec.com" style="color:var(--color-primary);text-decoration:none;font-weight:500;">www.digifec.com</a>
</footer>
<script>
// ====== ÉLÉMENTS DOM ======
const inputs = {
nbBons: document.getElementById('nbBons'),
prixExercice: document.getElementById('prixExercice'),
valeurExercice: document.getElementById('valeurExercice'),
prixCession: document.getElementById('prixCession'),
ancRadios: document.querySelectorAll('input[name="anciennete"]'),
};
const fmtEuro = (n) => {
if (!isFinite(n)) n = 0;
return new Intl.NumberFormat('fr-FR', {
style: 'currency',
currency: 'EUR',
maximumFractionDigits: 0,
}).format(Math.round(n));
};
const fmtPct = (n) => {
if (!isFinite(n) || isNaN(n)) n = 0;
return new Intl.NumberFormat('fr-FR', {
maximumFractionDigits: 1,
minimumFractionDigits: 1,
}).format(n) + ' %';
};
// ====== CALCUL ======
function compute(anciennete3ans) {
const nb = Math.max(0, parseFloat(inputs.nbBons.value) || 0);
const px = Math.max(0, parseFloat(inputs.prixExercice.value) || 0);
const vx = Math.max(0, parseFloat(inputs.valeurExercice.value) || 0);
const pc = Math.max(0, parseFloat(inputs.prixCession.value) || 0);
const gainEx = Math.max(0, (vx - px) * nb);
const pv = Math.max(0, (pc - vx) * nb);
const tauxIRex = anciennete3ans ? 0.128 : 0.30;
const tauxPS = 0.172;
const tauxIRpv = 0.128;
const irEx = gainEx * tauxIRex;
const psEx = gainEx * tauxPS;
const irPv = pv * tauxIRpv;
const psPv = pv * tauxPS;
const totalImpot = irEx + psEx + irPv + psPv;
const gainBrut = gainEx + pv;
const gainNet = gainBrut - totalImpot;
const tauxEffectif = gainBrut > 0 ? (totalImpot / gainBrut) * 100 : 0;
return {
nb, px, vx, pc, gainEx, pv,
tauxIRex, irEx, psEx, irPv, psPv,
totalImpot, gainBrut, gainNet, tauxEffectif,
irTotal: irEx + irPv,
psTotal: psEx + psPv,
};
}
// ====== CHART.JS ======
const ctx = document.getElementById('chart-decomposition').getContext('2d');
const chart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Composition du gain'],
datasets: [
{
label: 'Gain net',
data: [0],
backgroundColor: '#016666',
borderRadius: 4,
stack: 's',
},
{
label: 'Impôt sur le revenu',
data: [0],
backgroundColor: '#B85C5C',
borderRadius: 4,
stack: 's',
},
{
label: 'Prélèvements sociaux',
data: [0],
backgroundColor: '#D89A9A',
borderRadius: 4,
stack: 's',
},
],
},
options: {
indexAxis: 'y',
responsive: true,
maintainAspectRatio: false,
layout: { padding: { top: 10, right: 16, bottom: 10, left: 0 } },
scales: {
x: {
stacked: true,
beginAtZero: true,
grid: { color: '#EAF1F1' },
ticks: {
color: '#6B8585',
font: { family: 'Manrope', size: 12 },
callback: function(value) {
if (Math.abs(value) >= 1000) return (value / 1000).toFixed(0) + ' k€';
return value + ' €';
}
},
},
y: {
stacked: true,
grid: { display: false },
ticks: {
color: '#0A1F1F',
font: { family: 'Manrope', size: 13, weight: '600' },
},
},
},
plugins: {
legend: {
position: 'bottom',
align: 'start',
labels: {
color: '#4A6363',
font: { family: 'Manrope', size: 12, weight: '500' },
usePointStyle: true,
pointStyle: 'rectRounded',
padding: 16,
boxWidth: 10,
boxHeight: 10,
},
},
tooltip: {
backgroundColor: '#0A1F1F',
titleFont: { family: 'Manrope', size: 12, weight: '600' },
bodyFont: { family: 'Manrope', size: 13 },
padding: 12,
cornerRadius: 6,
displayColors: true,
boxPadding: 4,
callbacks: {
label: function(ctx) {
return ctx.dataset.label + ' : ' + fmtEuro(ctx.parsed.x);
}
}
},
},
},
});
// ====== UPDATE UI ======
function update() {
const anc3ans = document.querySelector('input[name="anciennete"]:checked').value === 'oui';
const r = compute(anc3ans);
const r3 = compute(true);
const rMoins3 = compute(false);
// Stats
document.getElementById('stat-brut').textContent = fmtEuro(r.gainBrut);
document.getElementById('stat-impot').textContent = fmtEuro(r.totalImpot);
document.getElementById('stat-taux').textContent = fmtPct(r.tauxEffectif);
document.getElementById('stat-net').textContent = fmtEuro(r.gainNet);
document.getElementById('stat-impot-sub').textContent =
'IR ' + fmtEuro(r.irTotal) + ' + PS ' + fmtEuro(r.psTotal);
// Breakdown table
document.getElementById('row-gainEx').textContent = fmtEuro(r.gainEx);
document.getElementById('row-tauxIRex').textContent = anc3ans ? '12,8 %' : '30 %';
document.getElementById('row-irEx').textContent = fmtEuro(r.irEx);
document.getElementById('row-psEx').textContent = fmtEuro(r.psEx);
document.getElementById('row-pv').textContent = fmtEuro(r.pv);
document.getElementById('row-irPv').textContent = fmtEuro(r.irPv);
document.getElementById('row-psPv').textContent = fmtEuro(r.psPv);
document.getElementById('row-net').textContent = fmtEuro(r.gainNet);
// Comparison
document.getElementById('scenario-3ans-net').textContent = fmtEuro(r3.gainNet);
document.getElementById('scenario-3ans-tax').textContent = 'Imposition : ' + fmtEuro(r3.totalImpot);
document.getElementById('scenario-moins3-net').textContent = fmtEuro(rMoins3.gainNet);
document.getElementById('scenario-moins3-tax').textContent = 'Imposition : ' + fmtEuro(rMoins3.totalImpot);
document.getElementById('scenario-3ans').classList.toggle('scenario-active', anc3ans);
document.getElementById('scenario-moins3').classList.toggle('scenario-active', !anc3ans);
const delta = r3.gainNet - rMoins3.gainNet;
const deltaEl = document.getElementById('delta-message');
if (delta > 0) {
deltaEl.innerHTML = 'Économie d\'imposition apportée par les 3 ans d\'ancienneté : <strong>' + fmtEuro(delta) + '</strong>';
} else {
deltaEl.innerHTML = 'Renseignez vos paramètres pour visualiser l\'écart entre les deux scénarios.';
}
// Chart
chart.data.datasets[0].data = [r.gainNet];
chart.data.datasets[1].data = [r.irTotal];
chart.data.datasets[2].data = [r.psTotal];
chart.update('none');
}
// ====== EVENTS ======
Object.values(inputs).forEach(input => {
if (input instanceof NodeList) {
input.forEach(r => r.addEventListener('change', update));
} else {
input.addEventListener('input', update);
}
});
update();
</script>
</body>
</html>