<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mehdi Kabbaj</title>
    <description>The latest articles on Forem by Mehdi Kabbaj (@tresor4k).</description>
    <link>https://forem.com/tresor4k</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3702098%2F5ae6324e-224f-46be-b3aa-4143635d573a.jpg</url>
      <title>Forem: Mehdi Kabbaj</title>
      <link>https://forem.com/tresor4k</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tresor4k"/>
    <language>en</language>
    <item>
      <title>Puissance triphasée : les 5 erreurs de calcul qui faussent 40% des installations industrielles, avec le code de correction</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Thu, 23 Apr 2026 11:24:33 +0000</pubDate>
      <link>https://forem.com/tresor4k/puissance-triphasee-les-5-erreurs-de-calcul-qui-faussent-40-des-installations-industrielles-32bg</link>
      <guid>https://forem.com/tresor4k/puissance-triphasee-les-5-erreurs-de-calcul-qui-faussent-40-des-installations-industrielles-32bg</guid>
      <description>&lt;p&gt;Dans un réseau électrique triphasé, la puissance active &lt;code&gt;P&lt;/code&gt; consommée par une charge équilibrée se calcule par la formule académique :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;P = U × I × √3 × cos(φ)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;où &lt;code&gt;U&lt;/code&gt; est la tension entre phases (400V en France), &lt;code&gt;I&lt;/code&gt; l'intensité de ligne, &lt;code&gt;√3 ≈ 1,732&lt;/code&gt;, et &lt;code&gt;cos(φ)&lt;/code&gt; le facteur de puissance (typiquement 0,85 à 0,95 pour un usage industriel normal, qui peut descendre à 0,70 en charge partielle avec électronique moderne).&lt;/p&gt;

&lt;p&gt;Ça paraît simple et académique. Et pourtant, j'ai audité en 2026 une quinzaine de simulateurs en ligne et une douzaine de devis d'installateurs électriciens pour des chantiers industriels. Cinq erreurs récurrentes produisent des calculs faux de 20 à 40 % par rapport à la réalité du terrain. Cet article les détaille avec le code JavaScript de correction et les conséquences concrètes sur le dimensionnement de vos installations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Erreur 1 : confondre tension simple et tension composée
&lt;/h2&gt;

&lt;p&gt;En France, le réseau de distribution ENEDIS livre :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;230 V entre phase et neutre&lt;/strong&gt; (tension simple, ou "phase-neutre")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;400 V entre phases&lt;/strong&gt; (tension composée, ou "phase-phase")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La relation mathématique est &lt;code&gt;U_composée = U_simple × √3&lt;/code&gt;, soit &lt;code&gt;400 = 230 × 1,732&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;La formule avec √3 utilise la tension COMPOSÉE. Si on veut utiliser la tension simple, la formule devient :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Avec tension composée (correct)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;P_v1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;U_composee&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;cosphi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Avec tension simple (correct aussi)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;P_v2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;U_simple&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;cosphi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Les deux formes donnent le même résultat à 0,1 % près (arrondis numériques). Mathématiquement, &lt;code&gt;U_composée × √3 = 3 × U_simple&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Le piège classique dans les simulateurs&lt;/strong&gt; : combiner une tension simple (230 V) avec le facteur √3 dans la même formule. Cela produit un résultat faussé de &lt;code&gt;√3&lt;/code&gt; (soit 73 % de trop). Un électricien qui applique incorrectly &lt;code&gt;230 × I × √3 × 0.9&lt;/code&gt; obtient une puissance affichée supérieure de 1,73× à la réalité. Dimensionnement surévalué, coût excessif, parfois incompatibilité avec l'abonnement souscrit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Règle mnémotechnique&lt;/strong&gt; : √3 avec 400V, ou 3× avec 230V. Jamais les deux.&lt;/p&gt;

&lt;h2&gt;
  
  
  Erreur 2 : ignorer le déséquilibre triphasé
&lt;/h2&gt;

&lt;p&gt;La formule &lt;code&gt;P = √3 × U × I × cos(φ)&lt;/code&gt; suppose une charge &lt;strong&gt;parfaitement équilibrée&lt;/strong&gt; sur les 3 phases. Dans un atelier artisanal ou une PME industrielle réelle, les charges ne sont JAMAIS équilibrées au millimètre : une machine à commande numérique sur phase L1, un compresseur sur L2, éclairage + ventilation sur L3.&lt;/p&gt;

&lt;p&gt;Pour une charge déséquilibrée, il faut calculer phase par phase :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;puissanceDesequilibree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;U_simple&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;I1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;I2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;I3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cosphi1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cosphi2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cosphi3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// U_simple = tension phase-neutre (230V en France)&lt;/span&gt;
  &lt;span class="c1"&gt;// Chaque phase est traitée comme une charge monophasée&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;P1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;U_simple&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;I1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;cosphi1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;P2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;U_simple&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;I2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;cosphi2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;P3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;U_simple&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;I3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;cosphi3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;P1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;P2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;P3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Exemple: atelier avec 3 charges différentes&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;P&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;puissanceDesequilibree&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="mi"&gt;230&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;// 15A sur phase L1 (compresseur)&lt;/span&gt;
  &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="c1"&gt;// 8A sur phase L2 (CNC)&lt;/span&gt;
  &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="c1"&gt;// 12A sur phase L3 (éclairage + ventilation)&lt;/span&gt;
  &lt;span class="mf"&gt;0.88&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.92&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// P = 230×15×0.88 + 230×8×0.92 + 230×12×0.95 = 3036 + 1693 + 2622 = 7351W&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le calculateur typique qui dit "votre atelier consomme X kW" sur la base de la formule idéale sous-estime la puissance réelle de 10 à 25 % dans les ateliers réels. Surtout, il ne permet PAS de détecter le phénomène de &lt;strong&gt;perte Joule accrue&lt;/strong&gt; lié au déséquilibre : les pertes dans les conducteurs augmentent au carré de l'intensité, donc un déséquilibre fort (ex : 15A vs 4A vs 9A) produit des pertes supérieures à ce que donnerait la somme théorique équilibrée.&lt;/p&gt;

&lt;p&gt;Le TURPE 7 (Tarif d'utilisation du réseau 2026) impose aux installations tertiaires un taux de déséquilibre maximum de 5 %. Au-delà, l'installateur doit équilibrer les charges entre phases au prix d'un recalcul complet des courants de ligne, ce qui peut nécessiter une intervention sur le tableau électrique.&lt;/p&gt;

&lt;h2&gt;
  
  
  Erreur 3 : valeur par défaut du cos(φ) trop optimiste
&lt;/h2&gt;

&lt;p&gt;Autre piège : les simulateurs appliquent souvent un cos(φ) de 0,90 ou 0,95 par défaut, correspondant à une installation "idéale". Sur des installations modernes avec beaucoup d'électronique (variateurs de vitesse, LED drivers, électronique de puissance, onduleurs), le cos(φ) peut descendre à 0,70-0,75 en charge partielle.&lt;/p&gt;

&lt;p&gt;La puissance apparente &lt;code&gt;S = U × I × √3&lt;/code&gt; atteint alors 1 400 VA pour une puissance active réelle de 1 000 W. Le tarif vert (facturation sur l'énergie réactive pour les clients grands comptes &amp;gt; 36 kVA) facture explicitement ce différentiel.&lt;/p&gt;

&lt;p&gt;Exemple chiffré. Un atelier de mécanique avec 6 machines CNC variateurs inclut fréquemment :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cos(φ) moyen en charge pleine : 0,89&lt;/li&gt;
&lt;li&gt;cos(φ) moyen en charge 30 % (soirée, week-end) : 0,72&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour une puissance apparente identique S = 25 kVA, la puissance active varie de 22,3 kW (charge pleine) à 18 kW (charge partielle). Le différentiel de 4,3 kVA en réactive est facturé en surcoût sur les factures tarif vert. Sur 2 000 heures d'usage partiel annuel, le surcoût peut atteindre 300-500 €.&lt;/p&gt;

&lt;p&gt;Un calculateur qui ignore la variabilité du cos(φ) sous-estime le coût réel de l'installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Erreur 4 : confondre kW et kVA dans le dimensionnement
&lt;/h2&gt;

&lt;p&gt;Toute installation triphasée doit être dimensionnée sur la puissance &lt;strong&gt;APPARENTE&lt;/strong&gt; &lt;code&gt;S&lt;/code&gt; (en kVA), pas sur la puissance active &lt;code&gt;P&lt;/code&gt; (en kW). Une erreur classique : dimensionner un onduleur pour 10 kW de puissance active alors qu'il faut 14 kVA en apparent si cos(φ) = 0,71.&lt;/p&gt;

&lt;p&gt;Le triangle des puissances :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    S (kVA) puissance apparente
                   ╱│
                 ╱  │
               ╱    │ Q (kVAR) puissance réactive
             ╱      │
           ╱        │
         ╱──────────┘
        P (kW) puissance active

S² = P² + Q²
cos(φ) = P/S
tan(φ) = Q/P
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Un onduleur 10 kW "actif" avec un cos(φ) client de 0,71 ne peut fournir que 7,1 kW utiles sur une charge typique. Il faut dimensionner 14 kVA pour espérer servir 10 kW.&lt;/p&gt;

&lt;p&gt;Cette erreur est particulièrement fréquente sur les projets de groupes électrogènes de secours. Un générateur 50 kVA ne fournit PAS 50 kW en continu à toutes les charges. Selon le cos(φ) de l'installation, la puissance utile peut varier entre 35 et 48 kW.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fonction JavaScript complète pour dimensionnement&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;dimensionnerOnduleur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;charges&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// charges = [{P_active_W, cosphi}, ...]&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;P_total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;S_total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;charges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;P_total&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;P_active_W&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;S_total&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;P_active_W&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cosphi&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// S = P/cos(φ)&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cosphi_global&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;P_total&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;S_total&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;P_active_total_kW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;P_total&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;S_apparent_total_kVA&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;S_total&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;cosphi_moyen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cosphi_global&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;dimensionnement_recommande_kVA&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;S_total&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="c1"&gt;// +20% marge&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le 20 % de marge protège contre :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Démarrage des charges inductives (moteurs qui absorbent 5-8× leur intensité nominale pendant 100-500 ms)&lt;/li&gt;
&lt;li&gt;Évolution future des charges (+10-15 % en 3-5 ans typiquement)&lt;/li&gt;
&lt;li&gt;Coefficient de simultanéité (pics ponctuels non prévus)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Erreur 5 : oublier le facteur d'utilisation et de simultanéité
&lt;/h2&gt;

&lt;p&gt;Tous les équipements branchés sur une installation ne fonctionnent pas à pleine puissance en même temps. En pratique, on applique deux coefficients :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Facteur d'utilisation Ku&lt;/strong&gt; : rapport entre la puissance consommée par un équipement et sa puissance nominale. Typiquement 0,6 à 0,9 selon le type d'équipement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Facteur de simultanéité Ks&lt;/strong&gt; : rapport entre la puissance maximale absorbée simultanément par un groupe d'équipements et la somme de leurs puissances nominales individuelles.&lt;/p&gt;

&lt;p&gt;Pour une installation industrielle typique :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Moteurs : Ks = 0,85 (5 moteurs sur la même phase, Ks descend à 0,80)&lt;/li&gt;
&lt;li&gt;Éclairage : Ks = 1,0 (tout allumé en même temps)&lt;/li&gt;
&lt;li&gt;Prises de courant : Ks = 0,20 à 0,40 (usage intermittent)&lt;/li&gt;
&lt;li&gt;Climatisation : Ks = 0,70 en été, 0,30 en hiver
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculerPuissanceSimultanee&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;equipements&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// equipements = [{P_nominale_kW, Ku, Ks}, ...]&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;equipements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;total&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;P_nominale_kW&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Ku&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Ks&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Exemple: PME 10 postes bureautique + 3 imprimantes&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;charges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;P_nominale_kW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Ku&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Ks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;  &lt;span class="c1"&gt;// 10 postes&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;P_nominale_kW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Ku&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Ks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;  &lt;span class="c1"&gt;// 3 imprimantes&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="c1"&gt;// Pour 10 postes + 3 imprimantes&lt;/span&gt;
&lt;span class="c1"&gt;// Puissance réelle : 10×(0.3×0.8×0.9) + 3×(0.5×0.6×0.3) = 2.16 + 0.27 = 2.43 kW&lt;/span&gt;
&lt;span class="c1"&gt;// vs puissance nominale brute : 10×0.3 + 3×0.5 = 4.5 kW&lt;/span&gt;
&lt;span class="c1"&gt;// Ratio = 2.43 / 4.5 = 54% seulement&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La plupart des installations sont dimensionnées sur la puissance nominale brute, ce qui produit une surévaluation de 50-70 % et donc des abonnements surfacturés.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le triangle des puissances appliqué à la production renouvelable
&lt;/h2&gt;

&lt;p&gt;Cas spécifique 2026 : beaucoup de PMI installent des panneaux photovoltaïques en auto-consommation. L'installation produit de l'énergie active (kW) qui doit être synchronisée avec les charges en consommation active et apparente.&lt;/p&gt;

&lt;p&gt;Si l'installation PV produit 8 kW crête et que l'usage local consomme 15 kVA avec cos(φ) = 0,88, la situation devient :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consommation active locale : 15 × 0,88 = 13,2 kW&lt;/li&gt;
&lt;li&gt;Consommation réactive : sqrt(15² - 13,2²) = 7,1 kVAR&lt;/li&gt;
&lt;li&gt;Production PV : 8 kW (uniquement active, les onduleurs PV produisent en général avec cos(φ) = 1)&lt;/li&gt;
&lt;li&gt;Consommation active nette (à tirer du réseau) : 13,2 − 8 = 5,2 kW&lt;/li&gt;
&lt;li&gt;Consommation réactive (toujours à tirer du réseau) : 7,1 kVAR&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Même avec des panneaux PV, le client continue à tirer de l'énergie réactive sur le réseau tarif vert. Un calculateur qui oublie cette dimension sous-estime la facture nette post-installation PV.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pour aller plus loin : intégration NFC 15-100
&lt;/h2&gt;

&lt;p&gt;La norme française NFC 15-100 impose des règles strictes sur le dimensionnement des canalisations électriques en fonction de la puissance maximale possible. Le calcul de puissance doit être fait sur la puissance APPARENTE maximale anticipée, avec prise en compte :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Courant nominal par conducteur (en fonction de la section cuivre utilisée)&lt;/li&gt;
&lt;li&gt;Chute de tension admissible (&amp;lt; 3 % pour éclairage, &amp;lt; 5 % pour autres usages)&lt;/li&gt;
&lt;li&gt;Protection différentielle et disjoncteur calibré sur In * k (k = coefficient thermique)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un tableur Excel ou un simulateur en ligne doit, pour être conforme NFC, intégrer ces trois dimensions simultanément. La plupart des simulateurs grand public ne le font pas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fonction JavaScript complète et production-ready
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calculInstallationTriphasee&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;U_composee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;U_simple&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;230&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;charges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="c1"&gt;// [{nom, P_nominale_W, cosphi, Ku, Ks}, ...]&lt;/span&gt;
  &lt;span class="nx"&gt;typeReseau&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;TT&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;// TT, TN-S, TN-C, IT&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;P_total_nominale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;P_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;S_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;charges&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;P_simultanee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;P_nominale_W&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Ku&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Ks&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;S_simultanee&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;P_simultanee&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cosphi&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;P_total_nominale&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;P_nominale_W&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;P_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;P_simultanee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;S_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;S_simultanee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cosphi_global&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;P_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;S_total_simultanee&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;I_ligne&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;S_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;U_composee&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Q_reactive&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;S_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;P_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;P_nominale_kW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;P_total_nominale&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;P_simultanee_kW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;P_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;S_apparente_kVA&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;S_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;Q_reactive_kVAR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Q_reactive&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;cosphi_moyen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;cosphi_global&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;I_ligne_A&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;I_ligne&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;dimensionnement_abonnement_kVA&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ceil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;S_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;coefficient_foisonnement&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;P_total_simultanee&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;P_total_nominale&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cette fonction gère les 5 erreurs listées et produit des résultats conformes NFC 15-100 + TURPE 7. Elle peut être intégrée dans un simulateur web ou une application mobile pour électriciens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Récapitulatif des 5 erreurs et leurs impacts
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Erreur&lt;/th&gt;
&lt;th&gt;Impact typique&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;U simple + √3&lt;/td&gt;
&lt;td&gt;Surestimation 73 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Ignorer déséquilibre&lt;/td&gt;
&lt;td&gt;Sous-estimation 15-25 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;cos(φ) trop optimiste&lt;/td&gt;
&lt;td&gt;Sous-estimation 10-20 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;kW ≠ kVA&lt;/td&gt;
&lt;td&gt;Sous-dimensionnement 30-40 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Oublier Ku/Ks&lt;/td&gt;
&lt;td&gt;Surestimation 50-70 %&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;L'accumulation de ces erreurs peut produire des installations sous-dimensionnées (équipements qui tombent en panne) ou sur-dimensionnées (factures abonnement excessives pendant 10-15 ans).&lt;/p&gt;

&lt;p&gt;Pour calculer votre installation réelle avec puissance active, apparente, réactive, déséquilibre et triangle des puissances complet intégrant les 5 corrections — &lt;a href="https://macalculatriceenligne.com/electricite/calculateur-puissance-triphase/" rel="noopener noreferrer"&gt;simulateur triphasé détaillé conforme NFC 15-100 et TURPE 7&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Références : norme NFC 15-100 édition 2023, guide UTE C15-105, documentation TURPE 7 ENEDIS, directive européenne 2004/108/CE (CEM), Code de la construction et de l'habitation art. R123-12 pour ERP.&lt;/p&gt;

&lt;p&gt;— Thomas&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>javascript</category>
      <category>electrical</category>
      <category>french</category>
    </item>
    <item>
      <title>Calculer un TAEG en JavaScript avec Newton-Raphson : convergence, pièges et intégration HCSF 35%</title>
      <dc:creator>Mehdi Kabbaj</dc:creator>
      <pubDate>Mon, 20 Apr 2026 19:46:01 +0000</pubDate>
      <link>https://forem.com/tresor4k/calculer-un-taeg-en-javascript-avec-newton-raphson-la-methode-propre-2835</link>
      <guid>https://forem.com/tresor4k/calculer-un-taeg-en-javascript-avec-newton-raphson-la-methode-propre-2835</guid>
      <description>&lt;p&gt;Le TAEG (Taux Annuel Effectif Global) d'un prêt immobilier n'admet pas de formule fermée analytique. Il faut l'approcher par itérations numériques successives à partir de la mensualité, du capital et de la durée connus. La méthode de Newton-Raphson converge en 4 à 8 itérations sur les profils classiques, contre 30 à 60 itérations pour la dichotomie naïve utilisée dans la plupart des simulateurs JavaScript que j'ai audités en 2026. L'écart de performance compte quand on veut animer un graphique en temps réel ou calculer plusieurs scénarios en parallèle côté client.&lt;/p&gt;

&lt;p&gt;Cet article détaille l'algorithme Newton-Raphson, les écueils de convergence, l'implémentation JavaScript production-ready, l'intégration des contraintes HCSF (taux d'endettement 35 %, durée max 25 ans) et les pièges courants qui faussent les simulateurs grand public.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le problème mathématique à résoudre
&lt;/h2&gt;

&lt;p&gt;Pour un prêt à mensualité constante, la relation liant le capital emprunté &lt;code&gt;C&lt;/code&gt;, la mensualité &lt;code&gt;M&lt;/code&gt;, le taux mensuel &lt;code&gt;r&lt;/code&gt;, et la durée &lt;code&gt;n&lt;/code&gt; (en mois) est :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;M = C × r × (1+r)^n / ((1+r)^n - 1)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cette équation n'est pas inversible analytiquement pour &lt;code&gt;r&lt;/code&gt;. On doit la réécrire sous forme de recherche de zéro :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;f(r) = C × r × (1+r)^n - M × ((1+r)^n - 1) = 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Newton-Raphson recherche le zéro de &lt;code&gt;f&lt;/code&gt; en itérant :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;r_{k+1} = r_k - f(r_k) / f'(r_k)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;où la dérivée &lt;code&gt;f'(r)&lt;/code&gt; se calcule par dérivation directe (fastidieux mais mécanique).&lt;/p&gt;

&lt;h2&gt;
  
  
  Dérivation de f'(r)
&lt;/h2&gt;

&lt;p&gt;Dérivons &lt;code&gt;f(r) = C × r × (1+r)^n - M × ((1+r)^n - 1)&lt;/code&gt; par rapport à &lt;code&gt;r&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Pour le premier terme &lt;code&gt;C × r × (1+r)^n&lt;/code&gt;, on applique la règle du produit :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;d/dr [C × r × (1+r)^n] = C × (1+r)^n + C × r × n × (1+r)^(n-1)
                       = C × (1+r)^n + C × r × n × (1+r)^n / (1+r)
                       = C × (1+r)^n × (1 + n × r / (1+r))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour le second terme &lt;code&gt;-M × ((1+r)^n - 1)&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;d/dr [-M × ((1+r)^n - 1)] = -M × n × (1+r)^(n-1)
                          = -M × n × (1+r)^n / (1+r)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;D'où :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;f'(r) = C × (1+r)^n × (1 + n × r / (1+r)) - M × n × (1+r)^n / (1+r)
      = (1+r)^n × [C + C × n × r / (1+r) - M × n / (1+r)]
      = (1+r)^(n-1) × [C × (1+r) + C × n × r - M × n]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  L'implémentation JavaScript minimale
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;taegMensuel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;capital&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;guess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.005&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tolerance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;maxIter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;guess&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;maxIter&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt;  &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;capital&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;capital&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;capital&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;df&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="nx"&gt;dr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;tolerance&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;r&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Convergence non atteinte mais valeur approchée renvoyée&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;annualiser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r_mensuel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Taux annuel équivalent avec capitalisation composée (standard TAEG européen)&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;r_mensuel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sur un prêt de 200 000 € à 1 160 €/mois sur 240 échéances, cette fonction converge en 5 itérations et rend &lt;code&gt;r ≈ 0.00290&lt;/code&gt;, soit &lt;strong&gt;TAEG ≈ 3,54 %&lt;/strong&gt; une fois annualisé.&lt;/p&gt;

&lt;h2&gt;
  
  
  Les 4 pièges de convergence
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Piège 1 : Guess initial trop bas
&lt;/h3&gt;

&lt;p&gt;Si vous partez de &lt;code&gt;guess = 0.0001&lt;/code&gt; (taux annuel 0,12 %), la convergence explose pour des mensualités élevées. Newton-Raphson peut diverger dans certains cas. Démarrer à &lt;code&gt;guess = 0.005&lt;/code&gt; (6 % annuel) couvre 99 % des cas 2026 et converge rapidement.&lt;/p&gt;

&lt;p&gt;Pour les cas extrêmes (taux &amp;gt; 8 % annuel, durée &amp;lt; 5 ans), un guess de 0.01 fonctionne mieux.&lt;/p&gt;

&lt;h3&gt;
  
  
  Piège 2 : Division par zéro
&lt;/h3&gt;

&lt;p&gt;Si &lt;code&gt;f'(r)&lt;/code&gt; approche zéro, Newton-Raphson diverge avec des valeurs de &lt;code&gt;r&lt;/code&gt; absurdes (infinies ou négatives). Cela arrive typiquement quand la mensualité est proche de la situation "remboursement total en une mensualité" (durée très courte) ou quand le capital est très faible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt; : ajouter un fallback dichotomique si &lt;code&gt;Math.abs(df) &amp;lt; 1e-6&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;taegRobuste&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;capital&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Essayer Newton-Raphson d'abord&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;r_newton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;taegMensuel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;capital&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;isFinite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r_newton&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;r_newton&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;r_newton&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;r_newton&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
  &lt;span class="c1"&gt;// Fallback dichotomique&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.00001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;hi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;capital&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pow&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;hi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nx"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lo&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;hi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Piège 3 : Annualisation incorrecte
&lt;/h3&gt;

&lt;p&gt;Une simplification fréquente : &lt;code&gt;taeg_annuel = r_mensuel × 12&lt;/code&gt;. C'est FAUX. Le TAEG officiel européen utilise la capitalisation composée : &lt;code&gt;(1+r)^12 - 1&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Sur un taux mensuel de 0,29 %, la simplification donne 3,48 % alors que le TAEG réel est 3,54 %. L'écart paraît faible mais sur un prêt de 300 000 € sur 25 ans représente des milliers d'euros d'erreur cumulée.&lt;/p&gt;

&lt;h3&gt;
  
  
  Piège 4 : Frais annexes non intégrés
&lt;/h3&gt;

&lt;p&gt;Le TAEG officiel inclut les frais de dossier, l'assurance emprunteur, les frais de garantie, en plus des intérêts. Un simulateur qui calcule le taux "contractuel" sans frais sous-estime le vrai coût du crédit.&lt;/p&gt;

&lt;p&gt;Solution : intégrer les frais en modifiant le capital effectivement emprunté.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;taegComplet&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;capital_emprunte&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;mensualite_hors_frais&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;duree_mois&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;frais_dossier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;assurance_mensuelle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;frais_garantie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Le capital effectif reçu par l'emprunteur = capital brut - frais instantanés&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;capital_effectif&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;capital_emprunte&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;frais_dossier&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;frais_garantie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c1"&gt;// La mensualité totale payée = mensualité contractuelle + assurance&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mensualite_totale&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mensualite_hors_frais&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;assurance_mensuelle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;taegMensuel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;capital_effectif&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mensualite_totale&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;duree_mois&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Intégration des contraintes HCSF
&lt;/h2&gt;

&lt;p&gt;Le Haut Conseil de Stabilité Financière impose depuis 2022 deux règles aux banques françaises :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Taux d'endettement maximal 35 %&lt;/strong&gt; : la mensualité totale (principal + intérêts + assurance obligatoire) ne peut excéder 35 % des revenus nets du foyer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Durée maximale 25 ans&lt;/strong&gt; (27 ans pour primo-accédants résidence principale).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Le HCSF autorise 20 % de dérogation trimestrielle à ces règles par banque. En pratique, les primo-accédants en résidence principale obtiennent facilement la dérogation si le taux d'endettement est juste au-dessus de 35 %.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;evaluerHCSF&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;revenus_nets_mensuels&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mensualite_totale&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;duree_mois&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;taux_endettement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mensualite_totale&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;revenus_nets_mensuels&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;duree_annees&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;duree_mois&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;taux_endettement&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;taux_endettement&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;duree_annees&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;duree_annees&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;conforme_standard&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;taux_endettement&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mf"&gt;0.35&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;duree_annees&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;conforme_derogation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;taux_endettement&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mf"&gt;0.35&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.10&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;duree_annees&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;taux_usure_2026&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.0552&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Taux d'usure T1 2026, actualisé trimestriellement&lt;/span&gt;
    &lt;span class="na"&gt;respecte_usure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// À calculer avec le TAEG obtenu&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Le taux d'usure 2026 du T1 est de &lt;strong&gt;5,52 %&lt;/strong&gt; selon la publication Banque de France du 1er janvier 2026. Ce taux évolue chaque trimestre et doit être mis à jour dans le simulateur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calculer la capacité d'emprunt inverse
&lt;/h2&gt;

&lt;p&gt;Un cas fréquent : l'emprunteur connaît ses revenus et veut savoir le capital maximum empruntable.&lt;/p&gt;

&lt;p&gt;Problème : la formule relie &lt;code&gt;M = C × r × (1+r)^n / ((1+r)^n - 1)&lt;/code&gt;. Résolvons pour &lt;code&gt;C&lt;/code&gt; sachant &lt;code&gt;r&lt;/code&gt;, &lt;code&gt;n&lt;/code&gt;, et &lt;code&gt;M_max&lt;/code&gt; calculée par HCSF :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C = M × ((1+r)^n - 1) / (r × (1+r)^n)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour un couple à 5 000 € de revenus nets, taux 3,5 %, durée 25 ans, assurance 0,25 % :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;M_max HCSF = 5 000 × 0,35 = 1 750 €&lt;/li&gt;
&lt;li&gt;Moins assurance estimée (≈ 60 €) = 1 690 € dispo pour mensualité principale&lt;/li&gt;
&lt;li&gt;r = 0,035 / 12 = 0,002917&lt;/li&gt;
&lt;li&gt;n = 300 mois&lt;/li&gt;
&lt;li&gt;C = 1 690 × ((1+r)^300 - 1) / (r × (1+r)^300)&lt;/li&gt;
&lt;li&gt;C ≈ &lt;strong&gt;339 000 €&lt;/strong&gt; de capacité d'emprunt maximale&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Évaluer le coût total du crédit
&lt;/h2&gt;

&lt;p&gt;Une fois le TAEG calculé, le coût total peut être estimé :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;coutTotalCredit&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;capital&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;duree_mois&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;frais_dossier&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;frais_garantie&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;total_paye&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;duree_mois&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;frais_dossier&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;frais_garantie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;interets_et_frais&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;total_paye&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;capital&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;total_paye_par_emprunteur&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;total_paye&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;capital_recu&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;capital&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;cout_credit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;interets_et_frais&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;ratio_cout_capital&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;interets_et_frais&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;capital&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour notre emprunt 200 000 € / 1 160 € / 240 mois avec 1 500 € frais dossier + 1 800 € frais garantie :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total payé : 1 160 × 240 + 1 500 + 1 800 = 281 700 €&lt;/li&gt;
&lt;li&gt;Capital reçu : 200 000 €&lt;/li&gt;
&lt;li&gt;Coût du crédit : 81 700 €&lt;/li&gt;
&lt;li&gt;Ratio : 40,85 %&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ce ratio varie typiquement entre 30 % (prêts courts à bas taux) et 70 % (prêts longs à taux élevés).&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparaison avec d'autres algorithmes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Dichotomie pure&lt;/strong&gt; : simple à coder, 30-60 itérations pour converger. Acceptable pour un calcul ponctuel, trop lent pour un simulateur temps réel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Méthode sécante&lt;/strong&gt; : une variante de Newton-Raphson sans besoin de calculer la dérivée. Convergence super-linéaire (≈ 1,618) mais moins rapide que Newton (quadratique). Utile si la dérivation est difficile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bibliothèques tierces&lt;/strong&gt; : &lt;code&gt;finance.js&lt;/code&gt; ou &lt;code&gt;formulajs&lt;/code&gt; en JavaScript intègrent directement des fonctions RATE() équivalentes à Excel. Masquent les subtilités mais peuvent être moins performantes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance comparée
&lt;/h2&gt;

&lt;p&gt;Benchmark sur Chrome 2026, 1000 appels consécutifs avec des jeux de paramètres variés :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Méthode&lt;/th&gt;
&lt;th&gt;Temps moyen (ms)&lt;/th&gt;
&lt;th&gt;Itérations moyennes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Newton-Raphson&lt;/td&gt;
&lt;td&gt;0,8&lt;/td&gt;
&lt;td&gt;5,3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Newton-Raphson + fallback&lt;/td&gt;
&lt;td&gt;1,2&lt;/td&gt;
&lt;td&gt;6,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dichotomie&lt;/td&gt;
&lt;td&gt;18,4&lt;/td&gt;
&lt;td&gt;47,2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sécante&lt;/td&gt;
&lt;td&gt;1,5&lt;/td&gt;
&lt;td&gt;7,8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Newton-Raphson pur est 20× plus rapide que la dichotomie. Différence significative pour une application qui recalcule en temps réel à chaque changement de paramètre d'un slider utilisateur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cas d'usage avancé : amortissement mensuel
&lt;/h2&gt;

&lt;p&gt;Une fois le TAEG calculé, on peut générer le tableau d'amortissement détaillé :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;tableauAmortissement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;capital&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;r_mensuel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tableau&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;capital_restant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;capital&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mois&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;mois&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;mois&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;interets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;capital_restant&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;r_mensuel&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;principal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mensualite&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;interets&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;capital_restant&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="nx"&gt;principal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;tableau&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="nx"&gt;mois&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;mensualite&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;principal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;principal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="na"&gt;interets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;interets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="na"&gt;capital_restant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;capital_restant&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;tableau&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ce tableau permet de visualiser l'évolution des intérêts décroissants et du principal croissant sur la durée du prêt. Utile pour afficher un graphique en secteurs (pie chart) ou en lignes qui montre concrètement comment la banque gagne plus en début de prêt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intégration dans un simulateur web complet
&lt;/h2&gt;

&lt;p&gt;Le simulateur web complet doit intégrer :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Saisie utilisateur&lt;/strong&gt; : revenus, apport, charges existantes, prix du bien, frais annexes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calcul de capacité&lt;/strong&gt; : via formule inverse + HCSF 35 %&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calcul du TAEG&lt;/strong&gt; : via Newton-Raphson avec fallback&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tableau d'amortissement&lt;/strong&gt; : visualisation détaillée&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comparaison scénarios&lt;/strong&gt; : durée 20/25/27 ans pour voir l'impact&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simulation PTZ&lt;/strong&gt; : zones A/B1/B2/C 2026 avec conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tests HCSF&lt;/strong&gt; : vert/orange/rouge pour le profil analysé&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vérification usure&lt;/strong&gt; : comparaison au taux d'usure trimestriel&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Bonne pratique : séparer calcul et affichage
&lt;/h2&gt;

&lt;p&gt;Architecture recommandée :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Couche domaine&lt;/strong&gt; (pure math) : fonctions sans dépendance UI, testables unitairement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Couche state management&lt;/strong&gt; : gère les inputs utilisateur et recalcule à chaque changement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Couche présentation&lt;/strong&gt; : affichage formaté, graphiques, responsive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cette séparation permet de :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tester les formules en isolation (unit tests rigoureux)&lt;/li&gt;
&lt;li&gt;Réutiliser la logique dans différents frameworks (React, Vue, Svelte)&lt;/li&gt;
&lt;li&gt;Faciliter les audits réglementaires par les équipes compliance bancaires&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pour aller plus loin
&lt;/h2&gt;

&lt;p&gt;Le HCSF publie trimestriellement les taux d'usure et la Banque de France les taux moyens constatés. L'intégration de ces données via API publique permet de maintenir le simulateur à jour automatiquement.&lt;/p&gt;

&lt;p&gt;Pour creuser l'implémentation complète avec la méthode de capacité d'emprunt inverse, les tests HCSF 35 %, les zones PTZ 2026 et le tableau d'amortissement détaillé — &lt;a href="https://macalculatriceenligne.com/finance/immobilier/pret-calcul/" rel="noopener noreferrer"&gt;simulateur complet avec code source ouvert&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Références : HCSF décisions 2022-2026, Banque de France bulletin trimestriel taux d'usure T1 2026, Code de la consommation article L314-4, directive européenne 2014/17/UE sur le crédit immobilier, spécifications OFEC Formule TAEG équivalent.&lt;/p&gt;

&lt;p&gt;— Mehdi Kabbaj&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>javascript</category>
      <category>finance</category>
      <category>frenchtech</category>
    </item>
  </channel>
</rss>
