{"id":23579,"date":"2026-06-24T06:35:10","date_gmt":"2026-06-24T06:35:10","guid":{"rendered":"https:\/\/www.transports-express-caraibes.fr\/blog\/prix-essence-departements-2026\/"},"modified":"2026-06-24T06:35:10","modified_gmt":"2026-06-24T06:35:10","slug":"prix-essence-departements-2026","status":"publish","type":"post","link":"https:\/\/www.transports-express-caraibes.fr\/blog\/prix-essence-departements-2026\/","title":{"rendered":"Prix de l\u2019essence selon le d\u00e9partement en france en 2026 : analyse et perspectives"},"content":{"rendered":"<p class=\"wp-block-paragraph\"><strong>Prix de l\u2019essence selon le d\u00e9partement en France en 2026 : analyse et perspectives<\/strong><\/p>\n\n<p class=\"wp-block-paragraph\">Hausse, variations locales, et impact sur le budget des m\u00e9nages et des professionnels : la carte des carburants en France montre des \u00e9carts significatifs entre d\u00e9partements. Ce dossier livre une lecture claire des chiffres r\u00e9cents (donn\u00e9es du 24 juin 2026), explique pourquoi certains territoires paient plus cher, et propose des pistes concr\u00e8tes pour r\u00e9duire votre facture selon votre profil de d\u00e9placement. Vous trouverez des chiffres moyens par carburant, une analyse des facteurs structurels (taxes, logistique, concurrence locale), des actions imm\u00e9diates \u00e0 mettre en place pour \u00e9conomiser, et des perspectives pour 2027. Que vous soyez pendulaire, livreur ou voyageur r\u00e9gulier, ce guide aide \u00e0 d\u00e9cider quoi changer dans vos habitudes et quelles aides ou outils mobiliser pour amortir la hausse.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>En bref :<\/strong><\/p>\n\n<ul class=\"wp-block-list\"><li><strong>Moyennes nationales (24\/06\/2026) :<\/strong> Gazole 1,91 \u20ac\/L, SP95 1,965 \u20ac\/L, SP98 2,009 \u20ac\/L.<\/li><li><strong>\u00c9carts d\u00e9partementaux<\/strong> li\u00e9s au co\u00fbt logistique et au nombre de stations.<\/li><li><strong>Mesures concr\u00e8tes<\/strong> : optimisation d\u2019itin\u00e9raires, covoiturage, carburants alternatifs (E85, GPLc) et aides \u00e0 la conversion.<\/li><li><strong>Impact \u00e9conomique<\/strong> : hausse des co\u00fbts pour commerces locaux et transport routier, risque d\u2019inflation locale.<\/li><li><strong>Ressources utiles<\/strong> pour comparer prix par d\u00e9partement et suivre l\u2019\u00e9volution.<\/li><\/ul>\n\n<h2 class=\"wp-block-heading\">Carte des prix de l\u2019essence par d\u00e9partement en France : \u00e9tat des lieux 2026<\/h2>\n\n<p class=\"wp-block-paragraph\">La carte d\u00e9partementale publi\u00e9e au 24 juin 2026 permet d\u2019identifier rapidement les zones o\u00f9 le <strong>prix de l\u2019essence<\/strong> et du gazole sont les plus \u00e9lev\u00e9s. Les donn\u00e9es agr\u00e9g\u00e9es montrent des diff\u00e9rences marqu\u00e9es entre secteurs urbains bien desservis et zones rurales isol\u00e9es. La moyenne nationale pour le <strong>gazole<\/strong> est de <strong>1,91 \u20ac\/L<\/strong>, tandis que le <strong>SP95<\/strong> atteint <strong>1,965 \u20ac\/L<\/strong> et le <strong>SP98<\/strong> <strong>2,009 \u20ac\/L<\/strong>.<\/p>\n\n<p class=\"wp-block-paragraph\">Pour consulter la carte interactive et zoomer sur chaque d\u00e9partement, plusieurs sources publiques et sp\u00e9cialis\u00e9es offrent des vues d\u00e9taill\u00e9es et mises \u00e0 jour.<\/p>\n\n<p class=\"wp-block-paragraph\">Sources et comparateurs : <a href=\"https:\/\/www.prix-carburants.gouv.fr\/\" target=\"_blank\" rel=\"noopener\">site gouvernemental des prix carburant<\/a> et la carte d\u00e9partementale d\u00e9taill\u00e9e disponible sur <a href=\"https:\/\/carbuprix.fr\/departement\/\" target=\"_blank\" rel=\"noopener\">carbuprix par d\u00e9partement<\/a>.<\/p>\n\n<h3 class=\"wp-block-heading\">Les donn\u00e9es chiffr\u00e9es cl\u00e9s<\/h3>\n\n<p class=\"wp-block-paragraph\">Les moyennes r\u00e9centes par carburant (donn\u00e9e nationale moyenne) sont les suivantes :<\/p>\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Carburant<\/th>\n<th>Prix moyen (\u20ac\/L)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Gazole<\/strong><\/td>\n<td><strong>1,91<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>E10<\/strong><\/td>\n<td><strong>1,903<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>SP95<\/strong><\/td>\n<td><strong>1,965<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>SP98<\/strong><\/td>\n<td><strong>2,009<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>E85<\/strong><\/td>\n<td><strong>0,844<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>GPLc<\/strong><\/td>\n<td><strong>1,065<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n<p class=\"wp-block-paragraph\">Ces moyennes servent de r\u00e9f\u00e9rence pour comparer chaque <strong>d\u00e9partement<\/strong> et rep\u00e9rer les anomalies locales. Insight : gardez la moyenne d\u00e9partementale \u00e0 l\u2019esprit avant de planifier vos pleins.<\/p>\n\n<h2 class=\"wp-block-heading\">Analyse de l\u2019\u00e9volution des prix et causes locales<\/h2>\n\n<p class=\"wp-block-paragraph\">Depuis 2024, l\u2019<strong>\u00e9volution des prix<\/strong> refl\u00e8te un m\u00e9lange de tensions internationales, d\u2019ajustements fiscaux et de co\u00fbts logistiques. Au printemps 2026, une nouvelle phase de hausse s\u2019est mat\u00e9rialis\u00e9e, comparable aux \u00e9pisodes de 2022, mais avec des moteurs diff\u00e9rents : r\u00e9vision des marges des distributeurs, augmentation des co\u00fbts de raffinage et variations du cours du p\u00e9trole.<\/p>\n\n<p class=\"wp-block-paragraph\">La part la plus visible reste la fiscalit\u00e9 et la TVA locale, mais la diff\u00e9rence entre d\u00e9partements tient souvent \u00e0 l\u2019accessibilit\u00e9 des raffineries et \u00e0 la densit\u00e9 de stations offrant de la concurrence.<\/p>\n\n<h3 class=\"wp-block-heading\">Facteurs explicatifs<\/h3>\n\n<ul class=\"wp-block-list\"><li><strong>Logistique<\/strong> : plus le d\u00e9partement est \u00e9loign\u00e9 d\u2019un point de distribution, plus le prix augmente.<\/li><li><strong>Concurrence<\/strong> : zones p\u00e9riurbaines avec plusieurs cha\u00eenes \u00e0 bas prix affichent des tarifs 5 \u00e0 10 centimes inf\u00e9rieurs en moyenne.<\/li><li><strong>Fiscalit\u00e9 locale et taxes<\/strong> : variations mineures mais r\u00e9elles selon les pr\u00e9l\u00e8vements et la TICPE.<\/li><li><strong>Profil de consommation<\/strong> : d\u00e9partements touristiques voient des pics saisonniers qui font monter les prix.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">\u00c9tude de cas : Mathieu, livreur dans un d\u00e9partement rural, paye en moyenne 8 centimes\/L de plus que le voisin de d\u00e9partement adjacent \u00e0 cause d\u2019une seule route nationale mal desservie par les circuits de distribution. Insight : la micro-logistique explique beaucoup d\u2019\u00e9carts.<\/p>\n\n<h2 class=\"wp-block-heading\">Que faire pour r\u00e9duire votre facture carburant selon le d\u00e9partement<\/h2>\n\n<p class=\"wp-block-paragraph\">Plusieurs leviers concrets sont accessibles imm\u00e9diatement, selon que vous soyez particulier ou professionnel. Chaque action prend peu de temps \u00e0 mettre en place et peut g\u00e9n\u00e9rer des \u00e9conomies visibles sur le mois.<\/p>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@tailwindcss\/browser@4\"><\/script>\n\n<!-- Calculateur de co\u00fbt mensuel de carburant (bloc \u00e0 copier\/coller) -->\n<div id=\"carburant-calculateur\" class=\"max-w-3xl mx-auto p-4 bg-white rounded-lg shadow ring-1 ring-gray-200\" style=\"max-height:2000px; overflow:auto;\">\n  <h2 class=\"text-xl font-semibold mb-2\">Calculateur : co\u00fbt mensuel de carburant par d\u00e9partement (2026)<\/h2>\n  <p id=\"desc\" class=\"text-sm text-gray-600 mb-4\">\n    Calculez votre co\u00fbt mensuel de carburant en fonction du kilom\u00e9trage hebdomadaire, consommation (L\/100km) et prix moyen d\u00e9partemental (ex : Gazole 1,91 \u20ac\/L). Entrez km\/semaine, consommation et prix pour obtenir budget mensuel estim\u00e9.\n  <\/p>\n\n  <form id=\"form-calculateur\" class=\"space-y-4\" aria-label=\"Formulaire calculateur carburant\">\n    <div class=\"grid grid-cols-1 md:grid-cols-3 gap-3\">\n      <div>\n        <label for=\"dept\" class=\"block text-sm font-medium text-gray-700\">D\u00e9partement<\/label>\n        <select id=\"dept\" class=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm\" aria-describedby=\"dept-desc\">\n          <!-- Une liste courte d'exemples ; l'utilisateur peut saisir le prix manuellement -->\n          <option value=\"\" selected>\u2014 Choisir (exemples) \u2014<\/option>\n          <option value=\"75\">Paris (75)<\/option>\n          <option value=\"69\">Rh\u00f4ne (69)<\/option>\n          <option value=\"13\">Bouches-du-Rh\u00f4ne (13)<\/option>\n          <option value=\"59\">Nord (59)<\/option>\n          <option value=\"33\">Gironde (33)<\/option>\n          <option value=\"autre\">Autre \/ saisie manuelle<\/option>\n        <\/select>\n        <p id=\"dept-desc\" class=\"text-xs text-gray-500 mt-1\">S\u00e9lectionnez un d\u00e9partement pour pr\u00e9remplir un prix moyen (exemples).<\/p>\n      <\/div>\n\n      <div>\n        <label for=\"carburant\" class=\"block text-sm font-medium text-gray-700\">Type de carburant<\/label>\n        <select id=\"carburant\" class=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm\">\n          <option value=\"gazole\" selected>Gazole<\/option>\n          <option value=\"sp95\">SP95<\/option>\n          <option value=\"sp98\">SP98<\/option>\n          <option value=\"e10\">E10<\/option>\n        <\/select>\n      <\/div>\n\n      <div>\n        <label for=\"prix\" class=\"block text-sm font-medium text-gray-700\">Prix (\u20ac\/L)<\/label>\n        <div class=\"mt-1 relative rounded-md shadow-sm\">\n          <input id=\"prix\" name=\"prix\" type=\"number\" inputmode=\"decimal\" step=\"0.01\" min=\"0\" class=\"block w-full pr-10 rounded-md border-gray-300\" aria-describedby=\"prix-desc\" placeholder=\"ex. 1.91\">\n          <div class=\"absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-gray-500\">\u20ac\/L<\/div>\n        <\/div>\n        <p id=\"prix-desc\" class=\"text-xs text-gray-500 mt-1\">Prix par litre (modifiable). Les valeurs de d\u00e9part sont indicatives.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"grid grid-cols-1 md:grid-cols-3 gap-3\">\n      <div>\n        <label for=\"km\" class=\"block text-sm font-medium text-gray-700\">Km par semaine<\/label>\n        <input id=\"km\" type=\"number\" step=\"1\" min=\"0\" class=\"mt-1 block w-full rounded-md border-gray-300\" value=\"200\" aria-label=\"Kilom\u00e8tres parcourus par semaine\">\n      <\/div>\n\n      <div>\n        <label for=\"conso\" class=\"block text-sm font-medium text-gray-700\">Consommation (L\/100 km)<\/label>\n        <input id=\"conso\" type=\"number\" inputmode=\"decimal\" step=\"0.1\" min=\"0\" class=\"mt-1 block w-full rounded-md border-gray-300\" value=\"6.5\" aria-label=\"Consommation en litres par 100 kilom\u00e8tres\">\n      <\/div>\n\n      <div>\n        <label for=\"mois\" class=\"block text-sm font-medium text-gray-700\">Mois de calcul (moyenne)<\/label>\n        <input id=\"mois\" type=\"number\" step=\"1\" min=\"1\" max=\"12\" class=\"mt-1 block w-full rounded-md border-gray-300\" value=\"12\" aria-label=\"Nombre de mois pour ramener au mensuel\">\n        <p class=\"text-xs text-gray-500 mt-1\">Par d\u00e9faut : 12 \u2192 transforme kilom\u00e9trage hebdo en co\u00fbts mensuels moyens<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"flex items-center gap-3\">\n      <input id=\"incertitude\" type=\"checkbox\" class=\"h-4 w-4\" \/>\n      <label for=\"incertitude\" class=\"text-sm text-gray-700\">Afficher intervalle (\u00b1%)<\/label>\n      <input id=\"pct\" type=\"number\" inputmode=\"decimal\" step=\"0.1\" min=\"0\" value=\"5\" class=\"ml-2 w-20 rounded-md border-gray-300 text-sm\" aria-label=\"Pourcentage d'incertitude\">\n      <span class=\"text-sm text-gray-500\">%<\/span>\n    <\/div>\n\n    <div class=\"flex gap-2\">\n      <button type=\"button\" id=\"btnCalculer\" class=\"inline-flex items-center px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500\">Calculer<\/button>\n      <button type=\"button\" id=\"btnReset\" class=\"inline-flex items-center px-4 py-2 bg-gray-100 text-gray-700 rounded hover:bg-gray-200\">R\u00e9initialiser<\/button>\n      <button type=\"button\" id=\"btnCopier\" class=\"ml-auto inline-flex items-center px-3 py-2 bg-green-600 text-white rounded hover:bg-green-700\">Copier r\u00e9sultat<\/button>\n    <\/div>\n  <\/form>\n\n  <hr class=\"my-4\" \/>\n\n  <div id=\"resultats\" class=\"space-y-3\" aria-live=\"polite\">\n    <div id=\"summary\" class=\"p-3 bg-gray-50 rounded text-sm text-gray-800\">R\u00e9sultat : non calcul\u00e9.<\/div>\n\n    <div id=\"breakdown\" class=\"grid grid-cols-1 md:grid-cols-3 gap-3\"><\/div>\n\n    <div id=\"graph\" class=\"mt-2\">\n      <!-- mini-bar visualisation accessible -->\n      <div id=\"miniBars\" class=\"h-12 flex items-end gap-2\" aria-hidden=\"true\"><\/div>\n    <\/div>\n  <\/div>\n\n  <p class=\"text-xs text-gray-500 mt-4\">Outil simple \u00e0 but informatif. Tous les champs sont \u00e9ditables pour simuler diff\u00e9rents sc\u00e9narios.<\/p>\n<\/div>\n\n<script>\n\/*\n  Script JS du calculateur - enti\u00e8rement comment\u00e9 et en fran\u00e7ais.\n  Conception :\n  - Pas de d\u00e9pendance lourde ; UI styl\u00e9 avec Tailwind (cdn).\n  - Toutes les cha\u00eenes sont en fran\u00e7ais et modifiables via l'objet `STR`.\n  - Calcul principal : co\u00fbt mensuel estim\u00e9 \u00e0 partir de km\/semaine, consommation (L\/100km) et prix (\u20ac\/L).\n  - Conversion : km\/semaine \u2192 km\/an = km * 52 ; puis km\/mois moyen = (km*52)\/12\n  - Consommation totale L\/mois = (km\/mois) * (L\/100km) \/ 100\n  - Co\u00fbt = L\/mois * prix (\u20ac\/L)\n  - Accessibilit\u00e9 : labels, aria-live pour r\u00e9sultats.\n\n  Remarque sur les donn\u00e9es d\u00e9partementales :\n  - Pour rester 100% gratuit et sans cl\u00e9, ce widget n'appelle pas d'API externe par d\u00e9faut.\n  - Exemple d'API publique (donn\u00e9es ouvertes) que vous pourriez int\u00e9grer :\n    URL API (exemple) : https:\/\/donnees.roulez-eco.fr\/opendata\/prix-des-carburants\/latest\/prix_carburants.json\n    Exemple de r\u00e9ponse JSON (troncature) :\n    {\n      \"publication\": \"2026-06-01\",\n      \"dep\": \"75\",\n      \"carburant\": \"Gazole\",\n      \"prix\": 1.91,\n      \"unite\": \"\u20ac\/L\"\n    }\n  - Si vous souhaitez activer un chargement automatique depuis une API publique, ajoutez une fonction fetch() vers une URL open-data et mappez les prix par d\u00e9partement.\n*\/\n\n(function () {\n  'use strict';\n\n  \/\/ Textes \/ lib contr\u00f4lable (en fran\u00e7ais)\n  const STR = {\n    resultNotComputed: 'R\u00e9sultat : non calcul\u00e9.',\n    summaryTemplate: (mois, mensuel, hebdo, annee) => `Co\u00fbt estim\u00e9 : ${mensuel} \u20ac\/mois (\u2248 ${hebdo} \u20ac\/semaine, ${annee} \u20ac\/an). Calcul bas\u00e9 sur ${mois} mois moyens.`,\n    breakdownKm: (kmMois, consoL, litresMois, prix, cout) => `Km\/mois : ${kmMois} km \u2022 Consommation : ${consoL} L\/100km \u2022 Litres\/mois : ${litresMois} L \u2022 Prix : ${prix} \u20ac\/L \u2022 Co\u00fbt\/mois : ${cout} \u20ac`,\n    copied: 'R\u00e9sultat copi\u00e9 dans le presse-papiers.'\n  };\n\n  \/\/ R\u00e9f\u00e9rences DOM\n  const el = {\n    dept: document.getElementById('dept'),\n    carburant: document.getElementById('carburant'),\n    prix: document.getElementById('prix'),\n    km: document.getElementById('km'),\n    conso: document.getElementById('conso'),\n    mois: document.getElementById('mois'),\n    incertitude: document.getElementById('incertitude'),\n    pct: document.getElementById('pct'),\n    btnCalculer: document.getElementById('btnCalculer'),\n    btnReset: document.getElementById('btnReset'),\n    btnCopier: document.getElementById('btnCopier'),\n    summary: document.getElementById('summary'),\n    breakdown: document.getElementById('breakdown'),\n    miniBars: document.getElementById('miniBars')\n  };\n\n  \/\/ Jeux de prix exemples par d\u00e9partement & carburant (valeurs indicatives 2026, modifiables)\n  \/\/ On fournit seulement quelques d\u00e9partements en exemple pour garder le bloc compact.\n  const PRIX_EXEMPLE = {\n    '75': { gazole: 1.95, sp95: 2.05, sp98: 2.10, e10: 1.98 },\n    '69': { gazole: 1.89, sp95: 1.99, sp98: 2.04, e10: 1.92 },\n    '13': { gazole: 1.92, sp95: 2.02, sp98: 2.07, e10: 1.95 },\n    '59': { gazole: 1.87, sp95: 1.97, sp98: 2.02, e10: 1.90 },\n    '33': { gazole: 1.90, sp95: 2.00, sp98: 2.05, e10: 1.93 }\n  };\n\n  \/\/ Formatage simple pour affichage (2 d\u00e9cimales, point d\u00e9cimal en fran\u00e7ais -> virgule)\n  function formatNumber(n, decimals = 2) {\n    \/\/ Utiliser toLocaleString pour format local fran\u00e7ais\n    return Number(n).toLocaleString('fr-FR', { minimumFractionDigits: decimals, maximumFractionDigits: decimals });\n  }\n\n  \/\/ Calcul principal : retourne objet avec r\u00e9sultats num\u00e9riques\n  function calculer({ kmSemaine, consoL100, prixParL, mois = 12 }) {\n    \/\/ km\/mois = (km\/semaine * 52) \/ moisConversion (ici 12 pour moyenne mensuelle)\n    const kmParAn = kmSemaine * 52;\n    const kmParMois = kmParAn \/ mois;\n    const litresParMois = (kmParMois * consoL100) \/ 100;\n    const coutParMois = litresParMois * prixParL;\n    const coutParAn = coutParMois * mois;\n    const coutParSemaine = coutParMois \/ ( (mois\/12) * 4.34524 ) || (coutParMois \/ 4.34524); \/\/ approximation\n    return {\n      kmParMois,\n      litresParMois,\n      coutParMois,\n      coutParAn,\n      coutParSemaine\n    };\n  }\n\n  \/\/ Mettre \u00e0 jour le champ prix quand on choisit un d\u00e9partement exemple\n  el.dept.addEventListener('change', function () {\n    const val = el.dept.value;\n    if (val && PRIX_EXEMPLE[val]) {\n      const carburant = el.carburant.value;\n      const p = PRIX_EXEMPLE[val][carburant];\n      if (p !== undefined) {\n        el.prix.value = p;\n      }\n    } else if (val === 'autre' || val === '') {\n      \/\/ laisse le prix tel quel pour saisie manuelle\n    }\n  });\n\n  \/\/ Si on change le type de carburant, tenter d'actualiser le prix si d\u00e9partement connu\n  el.carburant.addEventListener('change', function () {\n    const val = el.dept.value;\n    const carburant = el.carburant.value;\n    if (val && PRIX_EXEMPLE[val] && PRIX_EXEMPLE[val][carburant] !== undefined) {\n      el.prix.value = PRIX_EXEMPLE[val][carburant];\n    }\n  });\n\n  \/\/ Fonction d'affichage des r\u00e9sultats (texte et mini-bar)\n  function afficherResultats(res, inputs) {\n    const mois = Number(inputs.mois);\n    const mensuel = formatNumber(res.coutParMois);\n    const hebdo = formatNumber(res.coutParSemaine);\n    const annee = formatNumber(res.coutParAn);\n\n    el.summary.textContent = STR.summaryTemplate(mois, mensuel, hebdo, annee);\n\n    \/\/ Breakdown d\u00e9taill\u00e9\n    el.breakdown.innerHTML = ''; \/\/ reset\n    const div = document.createElement('div');\n    div.className = 'p-3 bg-white rounded shadow-sm col-span-1 md:col-span-3';\n    const texte = STR.breakdownKm(\n      formatNumber(res.kmParMois, 0),\n      formatNumber(inputs.conso, 1),\n      formatNumber(res.litresParMois, 2),\n      formatNumber(inputs.prix, 2),\n      formatNumber(res.coutParMois, 2)\n    );\n    div.textContent = texte;\n    el.breakdown.appendChild(div);\n\n    \/\/ Visual : mini-bar montrant part relative du co\u00fbt vs litres vs prix (simple tableau)\n    el.miniBars.innerHTML = '';\n    \/\/ Trois mini-bars : litres\/mois, prix (scaled), co\u00fbt\/mois\n    const max = Math.max(res.litresParMois, inputs.prix * 10, res.coutParMois); \/\/ heuristique pour \u00e9chelle\n    const items = [\n      { label: 'L\/mois', value: res.litresParMois, color: 'bg-indigo-500' },\n      { label: 'Prix (\u20ac\/L)', value: inputs.prix * 10, color: 'bg-yellow-500' }, \/\/ multipli\u00e9 pour rendre visible\n      { label: '\u20ac\/mois', value: res.coutParMois, color: 'bg-red-500' }\n    ];\n    items.forEach(it => {\n      const h = Math.max(6, (it.value \/ (max || 1)) * 100); \/\/ hauteur en px (mini)\n      const barWrap = document.createElement('div');\n      barWrap.className = 'flex flex-col items-center text-xs w-full';\n      barWrap.style.flex = '1';\n      const bar = document.createElement('div');\n      bar.className = `${it.color} rounded-t transition-all`;\n      bar.style.width = '100%';\n      bar.style.height = `${h}px`;\n      bar.setAttribute('title', `${it.label} : ${formatNumber(it.value, 2)}`);\n      const lbl = document.createElement('div');\n      lbl.className = 'text-center text-[10px] mt-1 text-gray-600';\n      lbl.textContent = it.label;\n      barWrap.appendChild(bar);\n      barWrap.appendChild(lbl);\n      el.miniBars.appendChild(barWrap);\n    });\n  }\n\n  \/\/ Calculer et afficher, en g\u00e9rant l'option d'incertitude (intervalle \u00b1%)\n  function doCalcul() {\n    const km = Number(el.km.value) || 0;\n    const conso = Number(el.conso.value) || 0;\n    const prix = Number(el.prix.value) || 0;\n    const mois = Number(el.mois.value) || 12;\n\n    if (km <= 0 || conso <= 0 || prix <= 0) {\n      el.summary.textContent = 'Veuillez saisir des valeurs valides pour km, consommation et prix.';\n      el.breakdown.innerHTML = '';\n      el.miniBars.innerHTML = '';\n      return;\n    }\n\n    const base = calculer({ kmSemaine: km, consoL100: conso, prixParL: prix, mois });\n\n    \/\/ G\u00e9rer incertitude\n    const showInc = el.incertitude.checked;\n    if (showInc) {\n      const pct = Math.max(0, Number(el.pct.value) || 0) \/ 100;\n      const lowPrix = prix * (1 - pct);\n      const highPrix = prix * (1 + pct);\n      const low = calculer({ kmSemaine: km, consoL100: conso, prixParL: lowPrix, mois });\n      const high = calculer({ kmSemaine: km, consoL100: conso, prixParL: highPrix, mois });\n\n      \/\/ affichage synth\u00e9tique avec intervalle\n      const mensuelBase = formatNumber(base.coutParMois, 2);\n      const mensuelLow = formatNumber(low.coutParMois, 2);\n      const mensuelHigh = formatNumber(high.coutParMois, 2);\n\n      el.summary.textContent = `Co\u00fbt estim\u00e9 : ${mensuelBase} \u20ac\/mois (intervalle : ${mensuelLow} \u2013 ${mensuelHigh} \u20ac\/mois avec \u00b1${(pct*100).toFixed(1)}%).`;\n      \/\/ breakdown et mini bars bas\u00e9s sur la valeur centrale\n      afficherResultats(base, { conso, prix, mois });\n    } else {\n      afficherResultats(base, { conso, prix, mois });\n    }\n  }\n\n  \/\/ Copier r\u00e9sultat dans le presse-papiers (texte simplifi\u00e9)\n  async function copierResultat() {\n    try {\n      const texte = el.summary.textContent + 'n' + (el.breakdown.textContent || '');\n      await navigator.clipboard.writeText(texte);\n      \/\/ Indication visuelle simple\n      const old = el.btnCopier.textContent;\n      el.btnCopier.textContent = STR.copied;\n      setTimeout(() => el.btnCopier.textContent = old, 1800);\n    } catch (e) {\n      \/\/ fallback : s\u00e9lectionner le r\u00e9sum\u00e9\n      alert('Impossible de copier automatiquement. S\u00e9lectionnez et copiez manuellement le texte.');\n    }\n  }\n\n  \/\/ \u00c9v\u00e9nements\n  el.btnCalculer.addEventListener('click', function (e) {\n    e.preventDefault();\n    doCalcul();\n  });\n\n  el.btnReset.addEventListener('click', function (e) {\n    e.preventDefault();\n    el.km.value = 200;\n    el.conso.value = 6.5;\n    el.prix.value = 1.91;\n    el.dept.value = '';\n    el.carburant.value = 'gazole';\n    el.incertitude.checked = false;\n    el.pct.value = 5;\n    el.summary.textContent = STR.resultNotComputed;\n    el.breakdown.innerHTML = '';\n    el.miniBars.innerHTML = '';\n  });\n\n  el.btnCopier.addEventListener('click', function (e) {\n    e.preventDefault();\n    copierResultat();\n  });\n\n  \/\/ Initialisation : valeurs par d\u00e9faut\n  (function init() {\n    \/\/ Valeurs par d\u00e9faut coh\u00e9rentes : prix national indicatif\n    el.prix.value = 1.91;\n    el.summary.textContent = STR.resultNotComputed;\n  })();\n\n})();\n<\/script>\n\n<h3 class=\"wp-block-heading\">Actions pratiques et chiffr\u00e9es<\/h3>\n\n<ul class=\"wp-block-list\"><li><strong>Optimiser les trajets :<\/strong> r\u00e9duisez 10 km\/jour \u2192 \u00e9conomie approximative : 0,01 \u20ac \u00d7 10 km \u00d7 (consommation\/100) \u00d7 30 jours. Exemple : voiture 6 L\/100 km \u2192 ~1,8 L \u00e9conomis\u00e9s\/mois \u2192 \u22483,4 \u20ac si gazole \u00e0 1,91 \u20ac\/L.<\/li><li><strong>Covoiturage et planification collective :<\/strong> partagez 2 trajets\/semaine \u2192 baisse tangible des d\u00e9penses mensuelles et moins d\u2019usure du v\u00e9hicule.<\/li><li><strong>Choisir E85 ou GPLc<\/strong> quand c\u2019est possible : E85 \u00e0 <strong>0,844 \u20ac\/L<\/strong> peut diviser par deux le poste carburant sur certains trajets, \u00e0 condition d\u2019un v\u00e9hicule compatible.<\/li><li><strong>Comparer les stations :<\/strong> utilisez des cartes d\u00e9partements et applications pour rep\u00e9rer les stations les moins ch\u00e8res par zone.<\/li><li><strong>Acc\u00e9der aux aides :<\/strong> la <a href=\"https:\/\/www.transports-express-caraibes.fr\/blog\/prime-conversion-2026\/\">prime \u00e0 la conversion 2026<\/a> peut r\u00e9duire le co\u00fbt d\u2019un v\u00e9hicule ou d\u2019un kit GPL\/Biocarburant.<\/li><li><strong>\u00c9co-conduite :<\/strong> lissage d\u2019acc\u00e9l\u00e9rations et maintien d\u2019une vitesse stable r\u00e9duisent la consommation de 5 \u00e0 15 % selon le profil.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">Ressource pratique pour v\u00e9rifier stations et prix par d\u00e9partement : <a href=\"https:\/\/www.essence-moins-cher.fr\/guides\/carte-prix-essence-france\" target=\"_blank\" rel=\"noopener\">carte prix essence France<\/a>. Insight : combinez comparaison locale et adaptation du v\u00e9hicule pour maximiser l\u2019\u00e9conomie.<\/p>\n\n<h2 class=\"wp-block-heading\">Impact \u00e9conomique local et perspectives pour 2027<\/h2>\n\n<p class=\"wp-block-paragraph\">La hausse des carburants a un effet de cascade : augmentation du co\u00fbt de livraison pour commerces locaux, rench\u00e9rissement des services, et pression sur le pouvoir d\u2019achat. Certains d\u00e9partements \u00e0 forte d\u00e9pendance routi\u00e8re risquent un d\u00e9s\u00e9quilibre plus marqu\u00e9.<\/p>\n\n<h3 class=\"wp-block-heading\">Sc\u00e9narios et pr\u00e9visions<\/h3>\n\n<ul class=\"wp-block-list\"><li><strong>Sc\u00e9nario mod\u00e9r\u00e9 (stabilisation du p\u00e9trole)<\/strong> : prix corrig\u00e9s par la concurrence et l\u00e9g\u00e8re baisse en 2027.<\/li><li><strong>Sc\u00e9nario tendu (nouvelle perturbation des approvisionnements)<\/strong> : maintien ou nouvelle hausse, impact inflationniste local possible.<\/li><li><strong>Transition \u00e9nerg\u00e9tique<\/strong> : mont\u00e9e progressive des v\u00e9hicules E85\/GPL et \u00e9lectriques dans les villes r\u00e9duit la pression sur la demande carburant fossile.<\/li><\/ul>\n\n<p class=\"wp-block-paragraph\">Pour suivre l\u2019\u00e9volution par d\u00e9partement et anticiper les effets sur votre budget, consultez r\u00e9guli\u00e8rement les statistiques et comparateurs sectoriels, comme <a href=\"https:\/\/prix-carburant.eu\/statistiques-prix-carburants-france\/\" target=\"_blank\" rel=\"noopener\">statistiques prix carburants<\/a> et les observatoires r\u00e9gionaux. Insight : planifiez vos achats et conversions en fonction des tendances locales et des aides disponibles.<\/p>\n\n<p class=\"wp-block-paragraph\"><strong>Synth\u00e8se actionnable :<\/strong> v\u00e9rifiez le prix moyen de votre d\u00e9partement, calculez votre co\u00fbt mensuel r\u00e9el, adaptez vos trajets et \u00e9valuez la pertinence d\u2019un carburant alternatif ou d\u2019une prime de conversion. Commencez par comparer les stations proches puis testez une mesure (covoiturage, \u00e9co-conduite) pendant un mois pour mesurer l\u2019impact.<\/p>\n\n<script type=\"application\/ld+json\">\n{\"@context\":\"https:\/\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Comment trouver le prix le plus bas dans mon du00e9partement ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Comparez les prix via les cartes interactives du00e9partementales et applications, ciblez les stations u00e0 la pu00e9riphu00e9rie des agglomu00e9rations et privilu00e9giez les chau00eenes u00e0 bas prix.\"}},{\"@type\":\"Question\",\"name\":\"Le E85 est-il toujours rentable ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Le E85 affiche un prix moyen nettement infu00e9rieur mais implique une consommation plus u00e9levu00e9e. Rentabilitu00e9 : calculez le cou00fbt au kilomu00e8tre et vu00e9rifiez la compatibilitu00e9 ou le cou00fbt du2019un bou00eetier.\"}},{\"@type\":\"Question\",\"name\":\"Quelles aides pour ru00e9duire le cou00fbt du carburant ?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Aides locales et primes u00e0 la conversion (vu00e9rifiez les conditions 2026) peuvent compenser partiellement lu2019investissement pour un vu00e9hicule moins consommateur ou compatible GPL\/E85.\"}}]}\n<\/script>\n<h3>Comment trouver le prix le plus bas dans mon d\u00e9partement ?<\/h3>\n<p>Comparez les prix via les cartes interactives d\u00e9partementales et applications, ciblez les stations \u00e0 la p\u00e9riph\u00e9rie des agglom\u00e9rations et privil\u00e9giez les cha\u00eenes \u00e0 bas prix.<\/p>\n<h3>Le E85 est-il toujours rentable ?<\/h3>\n<p>Le E85 affiche un prix moyen nettement inf\u00e9rieur mais implique une consommation plus \u00e9lev\u00e9e. Rentabilit\u00e9 : calculez le co\u00fbt au kilom\u00e8tre et v\u00e9rifiez la compatibilit\u00e9 ou le co\u00fbt d\u2019un bo\u00eetier.<\/p>\n<h3>Quelles aides pour r\u00e9duire le co\u00fbt du carburant ?<\/h3>\n<p>Aides locales et primes \u00e0 la conversion (v\u00e9rifiez les conditions 2026) peuvent compenser partiellement l\u2019investissement pour un v\u00e9hicule moins consommateur ou compatible GPL\/E85.<\/p>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@tailwindcss\/browser@4\"><\/script>\n\n<style>\n\/* Conteneur principal : card responsive, limit\u00e9e en hauteur *\/\n#comparateur-carburant { max-height: 1800px; }\n.table-scroll { max-height: 520px; overflow:auto; }\n.sparkbar { height: 10px; background: linear-gradient(90deg,var(--tx,#4f46e5),transparent); border-radius:6px;}\n.small { font-size:0.85rem }\n.badge { padding:4px 8px; border-radius:999px; font-weight:600; font-size:0.8rem }\n.disabled { opacity:0.5; pointer-events:none }\n<\/style>\n\n<div id=\"comparateur-carburant\" class=\"p-6 bg-white rounded-xl shadow-md max-w-5xl mx-auto\">\n  <header class=\"mb-4\">\n    <h2 class=\"text-2xl font-extrabold text-gray-800\">Comparer prix par carburant<\/h2>\n    <p class=\"text-sm text-gray-600\">Entrez votre d\u00e9partement et obtenez un tableau comparatif Gazole \/ SP95 \/ E85 avec co\u00fbt au km estim\u00e9.<\/p>\n  <\/header>\n\n  <form id=\"search-form\" class=\"grid sm:grid-cols-3 gap-3 items-end mb-4\" onsubmit=\"return false;\" aria-label=\"Formulaire de recherche du d\u00e9partement\">\n    <label class=\"block col-span-2\">\n      <span class=\"text-sm font-medium text-gray-700\">D\u00e9partement (code ou s\u00e9lection)<\/span>\n      <select id=\"dep-select\" class=\"mt-1 w-full border rounded px-3 py-2\" aria-label=\"S\u00e9lectionnez votre d\u00e9partement\">\n        <!-- Options remplies par JS -->\n      <\/select>\n    <\/label>\n\n    <div class=\"flex gap-2\">\n      <button id=\"btn-chercher\" type=\"button\" class=\"bg-indigo-600 hover:bg-indigo-700 text-white font-semibold px-4 py-2 rounded\" aria-label=\"Rechercher les prix\">Rechercher<\/button>\n      <button id=\"btn-vider\" type=\"button\" class=\"border border-gray-300 text-gray-700 px-4 py-2 rounded bg-white\" aria-label=\"Remettre \u00e0 z\u00e9ro\">R\u00e9initialiser<\/button>\n    <\/div>\n\n    <div class=\"col-span-3 grid sm:grid-cols-3 gap-3 mt-2\">\n      <div>\n        <label class=\"small text-gray-700\">Carburants affich\u00e9s<\/label>\n        <div class=\"flex gap-2 mt-1\">\n          <label class=\"inline-flex items-center text-sm\"><input type=\"checkbox\" id=\"chk-gazole\" checked class=\"mr-2\">Gazole<\/label>\n          <label class=\"inline-flex items-center text-sm\"><input type=\"checkbox\" id=\"chk-sp95\" checked class=\"mr-2\">SP95<\/label>\n          <label class=\"inline-flex items-center text-sm\"><input type=\"checkbox\" id=\"chk-e85\" checked class=\"mr-2\">E85<\/label>\n        <\/div>\n      <\/div>\n\n      <div>\n        <label class=\"small text-gray-700\">Consommation estim\u00e9e (L\/100km)<\/label>\n        <div class=\"flex gap-2 mt-1\">\n          <input id=\"consommation\" type=\"number\" min=\"3\" max=\"15\" step=\"0.1\" value=\"6.8\" class=\"w-full border rounded px-2 py-2\" aria-label=\"Consommation estim\u00e9e en litres par 100 kilom\u00e8tres\">\n          <button id=\"btn-default-consos\" type=\"button\" class=\"ml-2 text-sm px-3 py-2 border rounded\">Par d\u00e9faut<\/button>\n        <\/div>\n        <p class=\"small text-gray-500 mt-1\">Le co\u00fbt au km = (prix au litre \u00d7 consommation L\/100km) \/ 100<\/p>\n      <\/div>\n\n      <div>\n        <label class=\"small text-gray-700\">Options<\/label>\n        <div class=\"mt-1 flex gap-2\">\n          <button id=\"btn-export\" type=\"button\" class=\"px-3 py-2 bg-green-600 text-white rounded small\">Exporter CSV<\/button>\n          <button id=\"btn-copy\" type=\"button\" class=\"px-3 py-2 bg-gray-700 text-white rounded small\">Copier tableau<\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/form>\n\n  <section id=\"resultats\" class=\"mt-4\">\n    <div id=\"meta\" class=\"flex items-center justify-between mb-3\">\n      <div class=\"text-sm text-gray-600\" id=\"meta-text\">Aucune recherche effectu\u00e9e.<\/div>\n      <div class=\"text-sm text-gray-500\" id=\"last-updated\"><\/div>\n    <\/div>\n\n    <div class=\"border rounded table-scroll\">\n      <table id=\"comparative-table\" class=\"w-full text-sm\" role=\"table\" aria-label=\"Tableau comparatif des carburants\">\n        <thead class=\"bg-gray-50 sticky top-0\">\n          <tr>\n            <th class=\"p-3 text-left\">Carburant<\/th>\n            <th class=\"p-3 text-right\">Prix moyen (\u20ac)<\/th>\n            <th class=\"p-3 text-right\">Co\u00fbt estim\u00e9 \/km (\u20ac)<\/th>\n            <th class=\"p-3 text-right\">\u00c9cart vs national<\/th>\n            <th class=\"p-3 text-right\">Min \/ Max (\u20ac)<\/th>\n            <th class=\"p-3 text-right\">Stations<\/th>\n          <\/tr>\n        <\/thead>\n        <tbody id=\"table-body\" class=\"bg-white\">\n          <tr><td colspan=\"6\" class=\"p-6 text-center text-gray-500\">Aucun r\u00e9sultat. S\u00e9lectionnez un d\u00e9partement et cliquez sur \u00ab\u00a0Rechercher\u00a0\u00bb.<\/td><\/tr>\n        <\/tbody>\n      <\/table>\n    <\/div>\n\n    <div class=\"mt-3 text-xs text-gray-500\">\n      Donn\u00e9es r\u00e9cup\u00e9r\u00e9es depuis l&rsquo;API publique du gouvernement (prix-carburants). Les valeurs sont indicatives et peuvent varier selon la mise \u00e0 jour des stations.\n    <\/div>\n  <\/section>\n<\/div>\n\n<script>\n\/*\nAPI utilis\u00e9e (publique, sans cl\u00e9) :\nhttps:\/\/donnees.roulez-eco.fr\/api\/records\/1.0\/search\/?dataset=prix-des-carburants&rows=5000&refine.dep=XX\n\nExemple (abr\u00e9g\u00e9) de r\u00e9ponse JSON attendu (champs principaux) :\n{\n  \"nhits\": 1234,\n  \"records\": [\n    {\n      \"datasetid\": \"prix-des-carburants\",\n      \"fields\": {\n        \"id\": \"123456\",\n        \"adresse\": \"1 rue Exemple\",\n        \"ville\": \"PARIS\",\n        \"dep\": \"75\",\n        \"carburant\": \"Gazole\",\n        \"prix\": 1.459,\n        \"maj\": \"2026-05-10T08:30:00\"\n      }\n    },\n    {\n      \"fields\": {\n        \"dep\": \"75\",\n        \"carburant\": \"SP95\",\n        \"prix\": 1.699\n      }\n    }\n    ...\n  ]\n}\n\nRemarques :\n- L'API publique 'donnees.roulez-eco.fr' permet de filtrer par d\u00e9partement avec refine.dep.\n- Nous utilisons une requ\u00eate pour le d\u00e9partement (5000 lignes max) et une requ\u00eate d'\u00e9chantillon nationale pour comparaison.\n- Toutes les cha\u00eenes affich\u00e9es sont en fran\u00e7ais et faciles \u00e0 modifier.\n*\/\n\n\/* ---------------------------\n   Donn\u00e9es statiques : liste des d\u00e9partements (code -> nom)\n   Remplissage dynamique du select pour simplicit\u00e9 d'utilisation\n   --------------------------- *\/\nconst departements = [\n  {code:\"01\", nom:\"Ain\"},{code:\"02\", nom:\"Aisne\"},{code:\"03\", nom:\"Allier\"},{code:\"04\", nom:\"Alpes-de-Haute-Provence\"},\n  {code:\"05\", nom:\"Hautes-Alpes\"},{code:\"06\", nom:\"Alpes-Maritimes\"},{code:\"07\", nom:\"Ard\u00e8che\"},{code:\"08\", nom:\"Ardennes\"},{code:\"09\", nom:\"Ari\u00e8ge\"},\n  {code:\"10\", nom:\"Aube\"},{code:\"11\", nom:\"Aude\"},{code:\"12\", nom:\"Aveyron\"},{code:\"13\", nom:\"Bouches-du-Rh\u00f4ne\"},{code:\"14\", nom:\"Calvados\"},\n  {code:\"15\", nom:\"Cantal\"},{code:\"16\", nom:\"Charente\"},{code:\"17\", nom:\"Charente-Maritime\"},{code:\"18\", nom:\"Cher\"},{code:\"19\", nom:\"Corr\u00e8ze\"},\n  {code:\"2A\", nom:\"Corse-du-Sud\"},{code:\"2B\", nom:\"Haute-Corse\"},{code:\"21\", nom:\"C\u00f4te-d'Or\"},{code:\"22\", nom:\"C\u00f4tes-d'Armor\"},{code:\"23\", nom:\"Creuse\"},\n  {code:\"24\", nom:\"Dordogne\"},{code:\"25\", nom:\"Doubs\"},{code:\"26\", nom:\"Dr\u00f4me\"},{code:\"27\", nom:\"Eure\"},{code:\"28\", nom:\"Eure-et-Loir\"},\n  {code:\"29\", nom:\"Finist\u00e8re\"},{code:\"30\", nom:\"Gard\"},{code:\"31\", nom:\"Haute-Garonne\"},{code:\"32\", nom:\"Gers\"},{code:\"33\", nom:\"Gironde\"},\n  {code:\"34\", nom:\"H\u00e9rault\"},{code:\"35\", nom:\"Ille-et-Vilaine\"},{code:\"36\", nom:\"Indre\"},{code:\"37\", nom:\"Indre-et-Loire\"},{code:\"38\", nom:\"Is\u00e8re\"},\n  {code:\"39\", nom:\"Jura\"},{code:\"40\", nom:\"Landes\"},{code:\"41\", nom:\"Loir-et-Cher\"},{code:\"42\", nom:\"Loire\"},{code:\"43\", nom:\"Haute-Loire\"},\n  {code:\"44\", nom:\"Loire-Atlantique\"},{code:\"45\", nom:\"Loiret\"},{code:\"46\", nom:\"Lot\"},{code:\"47\", nom:\"Lot-et-Garonne\"},{code:\"48\", nom:\"Loz\u00e8re\"},\n  {code:\"49\", nom:\"Maine-et-Loire\"},{code:\"50\", nom:\"Manche\"},{code:\"51\", nom:\"Marne\"},{code:\"52\", nom:\"Haute-Marne\"},{code:\"53\", nom:\"Mayenne\"},\n  {code:\"54\", nom:\"Meurthe-et-Moselle\"},{code:\"55\", nom:\"Meuse\"},{code:\"56\", nom:\"Morbihan\"},{code:\"57\", nom:\"Moselle\"},{code:\"58\", nom:\"Ni\u00e8vre\"},\n  {code:\"59\", nom:\"Nord\"},{code:\"60\", nom:\"Oise\"},{code:\"61\", nom:\"Orne\"},{code:\"62\", nom:\"Pas-de-Calais\"},{code:\"63\", nom:\"Puy-de-D\u00f4me\"},\n  {code:\"64\", nom:\"Pyr\u00e9n\u00e9es-Atlantiques\"},{code:\"65\", nom:\"Hautes-Pyr\u00e9n\u00e9es\"},{code:\"66\", nom:\"Pyr\u00e9n\u00e9es-Orientales\"},{code:\"67\", nom:\"Bas-Rhin\"},{code:\"68\", nom:\"Haut-Rhin\"},\n  {code:\"69\", nom:\"Rh\u00f4ne\"},{code:\"70\", nom:\"Haute-Sa\u00f4ne\"},{code:\"71\", nom:\"Sa\u00f4ne-et-Loire\"},{code:\"72\", nom:\"Sarthe\"},{code:\"73\", nom:\"Savoie\"},\n  {code:\"74\", nom:\"Haute-Savoie\"},{code:\"75\", nom:\"Paris\"},{code:\"76\", nom:\"Seine-Maritime\"},{code:\"77\", nom:\"Seine-et-Marne\"},{code:\"78\", nom:\"Yvelines\"},\n  {code:\"79\", nom:\"Deux-S\u00e8vres\"},{code:\"80\", nom:\"Somme\"},{code:\"81\", nom:\"Tarn\"},{code:\"82\", nom:\"Tarn-et-Garonne\"},{code:\"83\", nom:\"Var\"},\n  {code:\"84\", nom:\"Vaucluse\"},{code:\"85\", nom:\"Vend\u00e9e\"},{code:\"86\", nom:\"Vienne\"},{code:\"87\", nom:\"Haute-Vienne\"},{code:\"88\", nom:\"Vosges\"},\n  {code:\"89\", nom:\"Yonne\"},{code:\"90\", nom:\"Territoire de Belfort\"},{code:\"91\", nom:\"Essonne\"},{code:\"92\", nom:\"Hauts-de-Seine\"},{code:\"93\", nom:\"Seine-Saint-Denis\"},\n  {code:\"94\", nom:\"Val-de-Marne\"},{code:\"95\", nom:\"Val-d'Oise\"},{code:\"971\", nom:\"Guadeloupe\"},{code:\"972\", nom:\"Martinique\"},\n  {code:\"973\", nom:\"Guyane\"},{code:\"974\", nom:\"La R\u00e9union\"},{code:\"976\", nom:\"Mayotte\"}\n];\n\n\/* Carburants cibles et r\u00e8gles de correspondance avec la donn\u00e9e API *\/\nconst carburantsCibles = [\n  { key: 'Gazole', match: s => s && s.toLowerCase().includes('gazole'), label: 'Gazole', color: '#f97316' },\n  { key: 'SP95', match: s => s && (s.toLowerCase().includes('sp95') || s.toLowerCase().includes('sp95-')), label: 'SP95', color: '#06b6d4' },\n  { key: 'E85', match: s => s && s.toLowerCase().includes('e85'), label: 'E85', color: '#10b981' }\n];\n\n\/* \u00c9l\u00e9ments DOM *\/\nconst depSelect = document.getElementById('dep-select');\nconst btnChercher = document.getElementById('btn-chercher');\nconst btnVider = document.getElementById('btn-vider');\nconst metaText = document.getElementById('meta-text');\nconst lastUpdated = document.getElementById('last-updated');\nconst tableBody = document.getElementById('table-body');\nconst chkGazole = document.getElementById('chk-gazole');\nconst chkSp95 = document.getElementById('chk-sp95');\nconst chkE85 = document.getElementById('chk-e85');\nconst consommationInput = document.getElementById('consommation');\nconst btnDefaultConsos = document.getElementById('btn-default-consos');\nconst btnExport = document.getElementById('btn-export');\nconst btnCopy = document.getElementById('btn-copy');\n\n\/* Initialisation : remplir le select des d\u00e9partements *\/\n(function remplirDepartements() {\n  depSelect.innerHTML = '<option value=\"\">-- S\u00e9lectionner un d\u00e9partement --<\/option>';\n  departements.forEach(d => {\n    const opt = document.createElement('option');\n    opt.value = d.code;\n    opt.textContent = `${d.code} \u2014 ${d.nom}`;\n    depSelect.appendChild(opt);\n  });\n})();\n\n\/* Cache pour la requ\u00eate nationale (r\u00e9duire appels) *\/\nlet cacheNational = null;\n\n\/* R\u00e9cup\u00e9rer \u00e9chantillon national (une seule fois) *\/\nasync function fetchNationalSample() {\n  if (cacheNational) return cacheNational;\n  try {\n    const url = 'https:\/\/donnees.roulez-eco.fr\/api\/records\/1.0\/search\/?dataset=prix-des-carburants&rows=5000';\n    const res = await fetch(url);\n    const json = await res.json();\n    cacheNational = json;\n    return json;\n  } catch (e) {\n    console.warn('Erreur r\u00e9cup\u00e9ration nationale', e);\n    return null;\n  }\n}\n\n\/* Fonction utilitaire : fetch d\u00e9partement *\/\nasync function fetchDepartement(dep) {\n  \/\/ API publique, sans cl\u00e9\n  const url = `https:\/\/donnees.roulez-eco.fr\/api\/records\/1.0\/search\/?dataset=prix-des-carburants&rows=5000&refine.dep=${encodeURIComponent(dep)}`;\n  const res = await fetch(url);\n  if (!res.ok) throw new Error('Erreur r\u00e9seau API');\n  return await res.json();\n}\n\n\/* Calcul statistique pour un tableau de prix (tableau de nombres) *\/\nfunction stat(prices) {\n  if (!prices || prices.length === 0) return { avg: null, min: null, max: null, count: 0 };\n  const count = prices.length;\n  const sum = prices.reduce((a,b) => a + b, 0);\n  const avg = sum \/ count;\n  return { avg, min: Math.min(...prices), max: Math.max(...prices), count };\n}\n\n\/* Mise en place des valeurs par d\u00e9faut de consommation selon carburant (utilis\u00e9 si bouton par d\u00e9faut) *\/\nfunction appliquerConsosParDefaut() {\n  consommationInput.value = 6.8; \/\/ valeur moyenne indicative (L\/100km) configurable\n}\n\n\/* Construction du tableau HTML \u00e0 partir des stats *\/\nfunction afficherTable(statsDep, statsNat, consommationL100) {\n  const rows = [];\n  const active = {\n    'Gazole': chkGazole.checked,\n    'SP95': chkSp95.checked,\n    'E85': chkE85.checked\n  };\n\n  \/\/ Si aucun carburant s\u00e9lectionn\u00e9, afficher message\n  if (!active.Gazole && !active.SP95 && !active.E85) {\n    tableBody.innerHTML = `<tr><td colspan=\"6\" class=\"p-6 text-center text-gray-500\">S\u00e9lectionnez au moins un carburant \u00e0 afficher.<\/td><\/tr>`;\n    return;\n  }\n\n  carburantsCibles.forEach(cb => {\n    if (!active[cb.key]) return;\n    const sDep = statsDep[cb.key];\n    const sNat = statsNat ? statsNat[cb.key] : null;\n\n    if (!sDep || sDep.count === 0) {\n      rows.push(`<tr>\n        <td class=\"p-3\">${cb.label}<\/td>\n        <td class=\"p-3 text-right text-gray-500\">\u2014<\/td>\n        <td class=\"p-3 text-right text-gray-500\">\u2014<\/td>\n        <td class=\"p-3 text-right text-gray-500\">\u2014<\/td>\n        <td class=\"p-3 text-right text-gray-500\">\u2014<\/td>\n        <td class=\"p-3 text-right text-gray-500\">0<\/td>\n      <\/tr>`);\n      return;\n    }\n\n    const prix = sDep.avg;\n    const coutKm = (prix * consommationL100) \/ 100;\n    const natAvg = sNat && sNat.avg ? sNat.avg : null;\n    const ecartPct = natAvg ? ((prix - natAvg) \/ natAvg) * 100 : null;\n\n    \/\/ Spark width relatif (par rapport au max nat ou dep)\n    const maxRef = Math.max(sDep.max || 0, (sNat && sNat.max) || 0);\n    const widthPct = maxRef ? Math.round(((prix || 0) \/ maxRef) * 100) : 0;\n\n    rows.push(`<tr>\n      <td class=\"p-3\">\n        <div class=\"flex items-center gap-3\">\n          <div style=\"width:10px;height:10px;background:${cb.color};border-radius:4px\"><\/div>\n          <div>\n            <div class=\"font-semibold\">${cb.label}<\/div>\n            <div class=\"small text-gray-500\">Couleur indicateur<\/div>\n          <\/div>\n        <\/div>\n      <\/td>\n      <td class=\"p-3 text-right font-medium\">\u20ac ${prix.toFixed(3)}<\/td>\n      <td class=\"p-3 text-right\">\u20ac ${coutKm.toFixed(3)} <div class=\"small text-gray-500\">(${consommationL100} L\/100km)<\/div><\/td>\n      <td class=\"p-3 text-right\">\n        ${ecartPct !== null ? `<span class=\"badge\" style=\"background:${ecartPct>0? '#fee2e2':'#ecfdf5'}; color:${ecartPct>0? '#b91c1c':'#065f46'}\">${ecartPct>0?'+':''}${ecartPct.toFixed(2)}%<\/span>` : '\u2014'}\n      <\/td>\n      <td class=\"p-3 text-right small\">\u20ac ${sDep.min.toFixed(3)} \/ \u20ac ${sDep.max.toFixed(3)}<\/td>\n      <td class=\"p-3 text-right\">${sDep.count}<\/td>\n    <\/tr>\n    <tr class=\"bg-gray-50\"><td colspan=\"6\" class=\"p-3\">\n      <div class=\"w-full bg-gray-200 rounded h-3 overflow-hidden\" aria-hidden=\"true\">\n        <div class=\"sparkbar\" style=\"width:${widthPct}%; --tx:${cb.color}\"><\/div>\n      <\/div>\n    <\/td><\/tr>`);\n\n  });\n\n  tableBody.innerHTML = rows.join('');\n}\n\n\/* Construire statistiques \u00e0 partir des enregistrements de l'API *\/\nfunction buildStatsFromRecords(records) {\n  \/\/ records: array of objects with fields.carburant and fields.prix\n  const buckets = {};\n  carburantsCibles.forEach(c => { buckets[c.key] = []; });\n\n  records.forEach(rec => {\n    const f = rec.fields || {};\n    const carburant = f.carburant;\n    const prix = parseFloat(f.prix);\n    if (isNaN(prix) || !carburant) return;\n    carburantsCibles.forEach(c => {\n      if (c.match(carburant)) buckets[c.key].push(prix);\n    });\n  });\n\n  const stats = {};\n  Object.keys(buckets).forEach(k => stats[k] = stat(buckets[k]));\n  return stats;\n}\n\n\/* Gestion du clic 'Rechercher' *\/\nbtnChercher.addEventListener('click', async () => {\n  const dep = depSelect.value;\n  if (!dep) {\n    alert('Veuillez s\u00e9lectionner un d\u00e9partement.');\n    return;\n  }\n\n  btnChercher.classList.add('disabled');\n  metaText.textContent = `Chargement des donn\u00e9es pour le d\u00e9partement ${dep}\u2026`;\n  tableBody.innerHTML = `<tr><td colspan=\"6\" class=\"p-6 text-center text-gray-500\">Chargement\u2026<\/td><\/tr>`;\n\n  try {\n    const [depJson, natJson] = await Promise.all([\n      fetchDepartement(dep),\n      fetchNationalSample()\n    ]);\n\n    \/\/ Construire stats\n    const statsDep = buildStatsFromRecords(depJson.records || []);\n    const statsNat = natJson ? buildStatsFromRecords(natJson.records || []) : null;\n\n    \/\/ Metadonn\u00e9es et affichage\n    metaText.innerHTML = `Donn\u00e9es d\u00e9partement ${dep} \u2014 stations analys\u00e9es: ${depJson.nhits || (depJson.records || []).length}`;\n    lastUpdated.textContent = depJson.records && depJson.records[0] && depJson.records[0].fields && depJson.records[0].fields.maj ? `Derni\u00e8re maj (exemple) : ${depJson.records[0].fields.maj.split('T')[0]}` : '';\n\n    const consommation = parseFloat(consommationInput.value) || 6.8;\n    afficherTable(statsDep, statsNat, consommation);\n\n  } catch (e) {\n    console.error(e);\n    tableBody.innerHTML = `<tr><td colspan=\"6\" class=\"p-6 text-center text-red-600\">Erreur lors de la r\u00e9cup\u00e9ration des donn\u00e9es. R\u00e9essayez plus tard.<\/td><\/tr>`;\n    metaText.textContent = 'Erreur de r\u00e9cup\u00e9ration';\n  } finally {\n    btnChercher.classList.remove('disabled');\n  }\n});\n\n\/* R\u00e9initialiser *\/\nbtnVider.addEventListener('click', () => {\n  depSelect.value = '';\n  consommationInput.value = '';\n  chkGazole.checked = true;\n  chkSp95.checked = true;\n  chkE85.checked = true;\n  tableBody.innerHTML = `<tr><td colspan=\"6\" class=\"p-6 text-center text-gray-500\">Aucun r\u00e9sultat. S\u00e9lectionnez un d\u00e9partement et cliquez sur \"Rechercher\".<\/td><\/tr>`;\n  metaText.textContent = 'Aucune recherche effectu\u00e9e.';\n  lastUpdated.textContent = '';\n});\n\n\/* Bouton consos par d\u00e9faut *\/\nbtnDefaultConsos.addEventListener('click', () => {\n  appliquerConsosParDefaut();\n});\n\n\/* Export CSV simple *\/\nbtnExport.addEventListener('click', () => {\n  \/\/ Lire tableau et construire CSV\n  const rows = [];\n  const header = ['Carburant','Prix moyen (\u20ac)','Co\u00fbt estim\u00e9 \/km (\u20ac)','\u00c9cart vs national','Min (\u20ac)','Max (\u20ac)','Stations'];\n  rows.push(header.join(';'));\n  \/\/ parcourir les lignes du tbody (2 par carburant parfois)\n  const trs = Array.from(tableBody.querySelectorAll('tr')).filter(tr => !tr.classList.contains('bg-gray-50'));\n  trs.forEach(tr => {\n    const cells = Array.from(tr.children).map(td => td.textContent.trim().replace(\/s+\/g,' '));\n    if (cells.length >= 6) rows.push(cells.slice(0,6).join(';'));\n  });\n  const csv = rows.join('n');\n  const blob = new Blob([csv], { type: 'text\/csv;charset=utf-8;' });\n  const url = URL.createObjectURL(blob);\n  const a = document.createElement('a');\n  a.href = url;\n  a.download = 'comparateur_carburant.csv';\n  document.body.appendChild(a);\n  a.click();\n  a.remove();\n  URL.revokeObjectURL(url);\n});\n\n\/* Copier le tableau en texte *\/\nbtnCopy.addEventListener('click', () => {\n  const text = tableBody.innerText;\n  navigator.clipboard.writeText(text).then(() => {\n    alert('Tableau copi\u00e9 dans le presse-papier.');\n  }, () => {\n    alert('Impossible de copier automatique. S\u00e9lectionnez et copiez manuellement.');\n  });\n});\n\n\/* Accessibilit\u00e9 : Enter sur select d\u00e9clenche recherche *\/\ndepSelect.addEventListener('keydown', (e) => {\n  if (e.key === 'Enter') btnChercher.click();\n});\n\n\/* Initialisation valeurs par d\u00e9faut *\/\nappliquerConsosParDefaut();\nmetaText.textContent = 'S\u00e9lectionnez un d\u00e9partement et cliquez sur \"Rechercher\".';\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Prix de l\u2019essence selon le d\u00e9partement en France en 2026 : analyse et perspectives Hausse, variations locales, et impact sur le budget des m\u00e9nages et des professionnels : la carte des carburants en France montre des \u00e9carts significatifs entre d\u00e9partements. Ce dossier livre une lecture claire des chiffres r\u00e9cents (donn\u00e9es du 24 juin 2026), explique &#8230; <a title=\"Prix de l\u2019essence selon le d\u00e9partement en france en 2026 : analyse et perspectives\" class=\"read-more\" href=\"https:\/\/www.transports-express-caraibes.fr\/blog\/prix-essence-departements-2026\/\" aria-label=\"En savoir plus sur Prix de l\u2019essence selon le d\u00e9partement en france en 2026 : analyse et perspectives\">Lire plus<\/a><\/p>\n","protected":false},"author":3,"featured_media":23578,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[83],"tags":[],"class_list":["post-23579","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-actualites-generaliste"],"views":22,"_links":{"self":[{"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/posts\/23579","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/comments?post=23579"}],"version-history":[{"count":0,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/posts\/23579\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/media\/23578"}],"wp:attachment":[{"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/media?parent=23579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/categories?post=23579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.transports-express-caraibes.fr\/blog\/wp-json\/wp\/v2\/tags?post=23579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}