<?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>DEV Community: Baptiste</title>
    <description>The latest articles on DEV Community by Baptiste (@baptiste_mdb).</description>
    <link>https://dev.to/baptiste_mdb</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4173784%2F106359c6-0fdc-4a9c-a4d3-d3c9790cdc4c.png</url>
      <title>DEV Community: Baptiste</title>
      <link>https://dev.to/baptiste_mdb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/baptiste_mdb"/>
    <language>en</language>
    <item>
      <title>Un barème à tranches et sa réciproque : calculer l'enchère maximale d'une vente immobilière judiciaire</title>
      <dc:creator>Baptiste</dc:creator>
      <pubDate>Fri, 09 Oct 2026 15:55:25 +0000</pubDate>
      <link>https://dev.to/baptiste_mdb/un-bareme-a-tranches-et-sa-reciproque-calculer-lenchere-maximale-dune-vente-immobiliere-3heo</link>
      <guid>https://dev.to/baptiste_mdb/un-bareme-a-tranches-et-sa-reciproque-calculer-lenchere-maximale-dune-vente-immobiliere-3heo</guid>
      <description>&lt;p&gt;Quand on achète un logement aux enchères au tribunal, la question n'est pas « combien vais-je payer », mais l'inverse : &lt;strong&gt;avec 120 000 € en poche, jusqu'à combien puis-je enchérir ?&lt;/strong&gt; Les frais dépendent du prix, et ils ne sont pas proportionnels. Voici comment je l'ai codé pour le simulateur de MdB Scanner, le site que je développe, et l'erreur qui faussait mes calculs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ce que paie l'acheteur en plus du prix
&lt;/h2&gt;

&lt;p&gt;Trois lignes calculables à l'avance :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Les droits d'enregistrement&lt;/strong&gt; : un pourcentage du prix, 6,3185 % dans la plupart des départements, 5,80665 % dans onze autres et 5,09006 % dans l'Indre (tableau DGFiP au 1er juin 2026, liste qui bouge chaque année). Ce sont les taux d'un particulier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L'émolument de vente&lt;/strong&gt; de l'avocat, fixé par un barème réglementé à tranches (code de commerce, art. A444-191 et A444-102), hors taxe, plus 20 % de TVA :

&lt;ul&gt;
&lt;li&gt;7,256 % jusqu'à 6 500 € ;&lt;/li&gt;
&lt;li&gt;2,993 % de 6 500 à 17 000 € ;&lt;/li&gt;
&lt;li&gt;1,995 % de 17 000 à 60 000 € ;&lt;/li&gt;
&lt;li&gt;1,497 % au-delà.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;La contribution de sécurité immobilière&lt;/strong&gt; : 0,10 % du prix (CGI, art. 881 K), avec un minimum de perception de 15 €.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Restent les frais préalables de la procédure, taxés par le juge et annoncés au plus tard à l'ouverture des enchères (l'avocat poursuivant peut souvent les donner avant), et les honoraires libres de son propre avocat : ceux-là ne se calculent pas, ils se demandent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Le barème à tranches
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;TRANCHES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="mi"&gt;6_500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;7.256&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;17_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;2.993&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.995&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.497&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;span class="n"&gt;TVA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CSI_PCT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CSI_MIN&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;
&lt;span class="n"&gt;DROITS_PCT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;6.3185&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;emolument_ht&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prix&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;reste&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bas&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;haut&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;taux&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;TRANCHES&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;tranche&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reste&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;haut&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reste&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;haut&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;bas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tranche&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;
        &lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;tranche&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;taux&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
        &lt;span class="n"&gt;reste&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="n"&gt;tranche&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;haut&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;bas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;haut&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;total&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;cout_total&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;droits_pct&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DROITS_PCT&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;emolument_ttc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;emolument_ht&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prix&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="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;TVA&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;csi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CSI_MIN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prix&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;CSI_PCT&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="n"&gt;droits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;prix&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;droits_pct&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;prix&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;emolument_ttc&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;csi&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;droits&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ce que ça donne, hors frais préalables :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Prix d'adjudication&lt;/th&gt;
&lt;th&gt;Frais calculables&lt;/th&gt;
&lt;th&gt;En % du prix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;30 000 €&lt;/td&gt;
&lt;td&gt;3 180 €&lt;/td&gt;
&lt;td&gt;10,6 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100 000 €&lt;/td&gt;
&lt;td&gt;9 110 €&lt;/td&gt;
&lt;td&gt;9,1 %&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;250 000 €&lt;/td&gt;
&lt;td&gt;21 432 €&lt;/td&gt;
&lt;td&gt;8,6 %&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Le barème est dégressif : plus le prix est bas, plus les frais pèsent lourd.&lt;/p&gt;

&lt;h2&gt;
  
  
  La réciproque : l'enchère maximale
&lt;/h2&gt;

&lt;p&gt;On veut le prix &lt;code&gt;p&lt;/code&gt; tel que &lt;code&gt;cout_total(p) = budget&lt;/code&gt;. Avec des tranches, une formule fermée existe, mais elle se casse à chaque changement de barème. Comme &lt;code&gt;cout_total&lt;/code&gt; est strictement croissante, une dichotomie suffit, et elle reste juste quel que soit le barème :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;enchere_max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;droits_pct&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DROITS_PCT&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;bas&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;haut&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;milieu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bas&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;haut&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="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;cout_total&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;milieu&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;droits_pct&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;bas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;milieu&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;haut&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;milieu&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;bas&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;80 tours ramènent l'écart sous le centime pour n'importe quel budget réaliste. Pour un budget de 120 000 €, hors frais préalables et honoraires de son avocat : &lt;strong&gt;110 064 € d'enchère maximale&lt;/strong&gt;. Avec 3 000 € de frais préalables, on retombe à 107 291 €.&lt;/p&gt;

&lt;h2&gt;
  
  
  L'erreur que je faisais
&lt;/h2&gt;

&lt;p&gt;On lit souvent que les frais d'adjudication font « environ 10 % » en plus des droits. J'avais codé ce forfait. Avec lui, le même budget de 120 000 € ne donnait que &lt;strong&gt;103 165 €&lt;/strong&gt; d'enchère maximale : presque 7 000 € de moins. À 110 000 €, le forfait comptait 11 000 € là où l'émolument et la contribution font environ 3 000 € : près de quatre fois trop (deux fois trop sous 20 000 €). Une partie de l'écart couvrait sans le dire des frais préalables bien réels, mais même avec 3 000 € de frais préalables, l'enchère maximale juste reste à 107 291 €, 4 000 € au-dessus. Les vérifier ligne à ligne dans les textes a coûté une après-midi ; l'erreur aurait coûté des ventes perdues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ce qu'il faut retenir
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Un barème à tranches se code comme un impôt sur le revenu : on parcourt les tranches en retirant ce qui est déjà taxé.&lt;/li&gt;
&lt;li&gt;Pour la réciproque, préférez une dichotomie à une formule inversée : elle survit aux changements de barème.&lt;/li&gt;
&lt;li&gt;Datez et sourcez chaque taux dans le code : la liste des départements à taux réduit change chaque année.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Le simulateur en ligne, qui ajoute les droits selon le département et la situation de l'acheteur : [&lt;a href="https://mdbscanner.fr/simulateur-encheres-immobilieres" rel="noopener noreferrer"&gt;https://mdbscanner.fr/simulateur-encheres-immobilieres&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>french</category>
      <category>python</category>
      <category>immobilier</category>
      <category>opendata</category>
    </item>
  </channel>
</rss>
