{"id":13353,"date":"2026-11-05T00:52:00","date_gmt":"2026-11-05T00:52:00","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=13353"},"modified":"2026-11-12T04:42:09","modified_gmt":"2026-11-12T04:42:09","slug":"calculateur-gazon-en-rouleaux","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/fr\/calculateur-gazon-en-rouleaux\/","title":{"rendered":"Calculateur de gazon en rouleaux"},"content":{"rendered":"\n<style>#lawn-tool{max-width:960px;margin:24px auto;color:#243746}#lawn-tool *{box-sizing:border-box}#lawn-tool .fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:18px}#lawn-tool label{display:block;font-weight:600}#lawn-tool input,#lawn-tool textarea{display:block;width:100%;padding:12px;border:1px solid #9aacb5;border-radius:8px;margin-top:6px;font:inherit}#lawn-tool button{padding:12px 20px;margin:18px 10px 10px 0;border:2px solid #1ecad3;border-radius:8px;background:#1ecad3;color:#1a202c;cursor:pointer;font:inherit}#lawn-tool button[type=reset],#lawn-tool #copy-area{background:white}#lawn-tool button:focus-visible,#lawn-tool input:focus-visible,#lawn-tool textarea:focus-visible{outline:3px solid #9486f7;outline-offset:3px;color:#1a202c}#lawn-tool button:active{color:#1a202c}#lawn-tool .result{background:#edf7f8;border-left:4px solid #1ecad3;padding:18px;margin:16px 0;overflow-wrap:anywhere}#lawn-tool svg{width:100%;height:300px;border:1px solid #b8cbd2}#lawn-tool a{color:#08778b}<\/style><div id=\"lawn-tool\" lang=\"fr\"><p>Estimez les rouleaux, les palettes et votre budget selon la surface mesur\u00e9e et les caract\u00e9ristiques du fournisseur.<\/p><form data-mode=\"sod\"><div class=\"fields\"><label>Surface de pelouse (m\u00b2)<input name=\"area\" type=\"number\" min=\"0\" step=\"any\" required value=\"100\"><\/label><label>Marge de pertes (%)<input name=\"waste\" type=\"number\" min=\"0\" step=\"any\" required value=\"10\"><\/label><label>Surface par plaque ou rouleau (m\u00b2)<input name=\"piece\" type=\"number\" min=\"0\" step=\"any\" required value=\"0.5\"><\/label><label>Surface par palette (m\u00b2)<input name=\"pallet\" type=\"number\" min=\"0\" step=\"any\" required value=\"50\"><\/label><label>Votre prix pos\u00e9 par m\u00b2 (0 sans budget)<input name=\"price\" type=\"number\" min=\"0\" step=\"any\" required value=\"0\"><\/label><\/div><button type=\"submit\">Calculer<\/button><button type=\"reset\">R\u00e9initialiser<\/button><\/form><div class=\"result\" role=\"status\" aria-live=\"polite\">Saisissez vos mesures et lancez le calcul.<\/div><h2>M\u00e9thode de calcul<\/h2><p>Besoin = surface mesur\u00e9e \u00d7 (1 + pertes \u00f7 100). Les plaques et les palettes sont deux modes de commande distincts, arrondis chacun \u00e0 l\u2019entier sup\u00e9rieur. Le budget utilise la surface n\u00e9cessaire et votre prix, sans arrondir la surface aux palettes enti\u00e8res. V\u00e9rifiez les minimums de commande, la livraison, la pr\u00e9paration et les taxes aupr\u00e8s du fournisseur. Aucun prix de march\u00e9 n\u2019est suppos\u00e9.<\/p><h2>Unit\u00e9s et donn\u00e9es<\/h2><p>Remplacez les exemples par vos mesures. 1 pied = 0,3048 m ; 1 pied carr\u00e9 = 0,09290304 m\u00b2 ; 1 pouce = 25,4 mm ; 1 gallon am\u00e9ricain = 3,785411784 litres. Utilisez la m\u00eame devise pour tous les prix. Un prix nul masque le budget facultatif.<\/p><h2>Guides pour la pelouse<\/h2><ul><li><a href=\"https:\/\/aiper.com\/blogs\/fr\/sursemer-pelouse-guide\/\">Comment sursemer une pelouse correctement : guide \u00e9tape par \u00e9tape<\/a><\/li><li><a href=\"https:\/\/aiper.com\/blogs\/fr\/comment-realiser-le-terreautage-d-une-pelouse\/\">Comment r\u00e9aliser le terreautage d\u2019une pelouse\u00a0: la technique pro pour une terre en pleine sant\u00e9<\/a><\/li><\/ul><h2>Autres outils pour la pelouse<\/h2><p><a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-surface-pelouse\/\">calculateur de surface de pelouse<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-arrosage-pelouse-duree\/\">calculateur d\u2019arrosage et de dur\u00e9e des arroseurs<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-zones-arrosage\/\">calculateur de zones d\u2019arrosage<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-cout-tonte-pelouse\/\">calculateur de co\u00fbt de tonte<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-temps-tonte\/\">calculateur de temps de tonte<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-chaux-pelouse\/\">calculateur de chaux pour pelouse<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-irrigation-goutte-a-goutte\/\">calculateur d\u2019irrigation goutte \u00e0 goutte<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-semences-gazon\/\">calculateur de semences de gazon<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/calculateur-engrais-pelouse\/\">calculateur d\u2019engrais pour pelouse<\/a> \u00b7 <a href=\"https:\/\/aiper.com\/blogs\/fr\/outils\/\">Outils<\/a><\/p><\/div><script>\/* SI units internally; no external services or weather assumptions. *\/\nfunction calculateLawn(mode,v){\n const n=k=>{if(v[k]===undefined||String(v[k]).trim()==='')throw Error(\"Saisissez toutes les mesures requises.\");let x=Number(v[k]);if(!Number.isFinite(x)||x<0)throw Error(\"Utilisez des valeurs finies et positives ou nulles.\");return x;};\n const p=k=>{let x=n(k);if(x<=0)throw Error(\"Cette mesure doit \u00eatre sup\u00e9rieure \u00e0 z\u00e9ro.\");return x;};\n const percent=k=>{let x=n(k);if(x>=100)throw Error(\"Le pourcentage doit \u00eatre inf\u00e9rieur \u00e0 100.\");return x\/100;};\n let o;\n if(mode==='sod'){\n  let a=p('area'),w=n('waste');if(w>100)throw Error(\"Les pertes doivent \u00eatre comprises entre 0 et 100 %.\");\n  let q=a*(1+w\/100);o={required:q,pieces:Math.ceil(q\/p('piece')-1e-10),pallets:Math.ceil(q\/p('pallet')-1e-10)};\n  if(n('price')>0)o.budget=q*n('price');\n }else if(mode==='watering'){\n  let depth=Math.max(0,n('target')-n('rain')),minutes=depth\/p('rate')*60,water=p('area')*depth;\n  o={depth,minutes,litres:water};if(n('price')>0)o.budget=water\/1000*n('price');\n }else if(mode==='zone'){\n  let heads=p('heads');if(!Number.isInteger(heads))throw Error(\"Le nombre d\u2019arroseurs doit \u00eatre entier.\");\n  let capacity=Math.floor(p('flow')*(1-percent('reserve'))\/p('nozzle'));\n  if(p('pressure')<p('required'))throw Error(\"La pression de service est inf\u00e9rieure au minimum requis.\");\n  if(capacity<1)throw Error(\"Le d\u00e9bit ne suffit pas pour une buse avec cette r\u00e9serve.\");\n  o={capacity,zones:Math.ceil(heads\/capacity)};\n }else if(mode==='area'){\n  let polygons=JSON.parse(v.polygons);if(!Array.isArray(polygons)||!polygons.length)throw Error(\"Saisissez les polygones mesur\u00e9s.\");\n  let total=0;\n  for(let poly of polygons){\n   let pts=poly.points;if(!Array.isArray(pts)||pts.length<3)throw Error(\"Chaque polygone exige au moins trois sommets.\");\n   for(let pt of pts)if(!Array.isArray(pt)||pt.length!==2||!pt.every(x=>typeof x==='number'&&Number.isFinite(x)))throw Error(\"Chaque sommet exige deux coordonn\u00e9es finies.\");\n   \/\/ Reject crossings, touching edges, repeated vertices and degenerate edges.\n   let cross=(a,b,c)=>(b[0]-a[0])*(c[1]-a[1])-(b[1]-a[1])*(c[0]-a[0]);\n   let on=(a,b,c)=>Math.abs(cross(a,b,c))<1e-9&&c[0]>=Math.min(a[0],b[0])-1e-9&&c[0]<=Math.max(a[0],b[0])+1e-9&&c[1]>=Math.min(a[1],b[1])-1e-9&&c[1]<=Math.max(a[1],b[1])+1e-9;\n   for(let i=0;i<pts.length;i++)for(let j=i+1;j<pts.length;j++){\n    if(pts[i][0]===pts[j][0]&&pts[i][1]===pts[j][1])throw Error(\"Ne r\u00e9p\u00e9tez pas les sommets.\");\n    if(j===i+1||i===0&&j===pts.length-1)continue;\n    let a=pts[i],b=pts[(i+1)%pts.length],c=pts[j],d=pts[(j+1)%pts.length];\n    if(cross(a,b,c)*cross(a,b,d)<0&&cross(c,d,a)*cross(c,d,b)<0||on(a,b,c)||on(a,b,d)||on(c,d,a)||on(c,d,b))throw Error(\"Les c\u00f4t\u00e9s ne doivent ni se croiser ni se toucher.\");\n   }\n   let a=Math.abs(pts.reduce((s,p,i)=>s+p[0]*pts[(i+1)%pts.length][1]-pts[(i+1)%pts.length][0]*p[1],0))\/2;\n   if(a<=0)throw Error(\"La surface du polygone doit \u00eatre positive.\");\n   if(poly.exclude!==undefined&&typeof poly.exclude!=='boolean')throw Error(\"L\u2019exclusion doit \u00eatre vraie ou fausse.\");\n   total+=poly.exclude?-a:a;\n  }\n  if(total<=0)throw Error(\"La surface nette doit \u00eatre positive.\");o={area:total,sqft:total\/0.09290304};\n }else if(mode==='mowing-cost'){\n  let area=p('area'),frequency=p('frequency'),weeks=p('weeks');\n  if(frequency>7||weeks>52.1775)throw Error(\"Utilisez au maximum 7 passages par semaine et 52,1775 semaines par an.\");\n  let obstacle=n('obstacle');if(obstacle>100)throw Error(\"La majoration doit \u00eatre comprise entre 0 et 100 %.\");\n  let visit=Math.max(n('minimum'),n('base')+area\/100*n('rate')+n('edging'))*(1+obstacle\/100),visits=Math.ceil(frequency*weeks-1e-10);\n  o={visits};if(visit>0)Object.assign(o,{visit,month:visit*frequency*52.1775\/12,season:visit*visits});\n }else if(mode==='mowing-time'){\n  let area=p('area'),width=p('width')\/100,speed=p('speed')*1000,overlap=percent('overlap'),eff=p('efficiency')\/100;\n  if(eff>1)throw Error(\"L\u2019efficacit\u00e9 ne doit pas d\u00e9passer 100 %.\");\n  let productivity=width*(1-overlap)*speed*eff,minutes=area\/productivity*60;\n  o={effective:width*(1-overlap)*100,productivity,minutes,total:minutes+n('extra')};\n }else if(mode==='lime'){\n  let area=p('area'),rate=n('lab'),reference=p('reference'),product=p('product');\n  if(reference>200||product>200)throw Error(\"Les valeurs neutralisantes doivent \u00eatre des pourcentages au plus \u00e9gaux \u00e0 200.\");\n  let adjusted=rate*reference\/product,total=area\/100*adjusted;\n  o={adjusted,total,bags:Math.ceil(total\/p('bag')-1e-10)};\n  let cap=n('cap');if(cap>0){let passes=Math.max(1,Math.ceil(adjusted\/cap-1e-10));o.passes=total>0?passes:0;o.perpass=total>0?total\/passes:0;}\n }else if(mode==='drip'){\n  let length=p('length'),spacing=p('spacing'),lines=p('lines');\n  if(!Number.isInteger(lines))throw Error(\"Le nombre de lignes doit \u00eatre entier.\");\n  \/\/ Assumes the first emitter is one spacing from the inlet, not at x=0.\n  let emitters=Math.floor(length\/spacing+1e-10);if(emitters<1)throw Error(\"Chaque ligne doit comporter au moins un goutteur.\");\n  let flow=emitters*p('emitter'),capacity=p('supply')*60*(1-percent('reserve')),linesPerZone=Math.floor(capacity\/flow);\n  if(linesPerZone<1)throw Error(\"Le d\u00e9bit ne suffit pas pour une ligne compl\u00e8te.\");\n  let minutes=n('litres')\/p('emitter')*60,zones=Math.ceil(lines\/linesPerZone);\n  o={emitters,totalemitters:emitters*lines,flow:flow*lines\/60,linesperzone:linesPerZone,zones,minutes,totalminutes:minutes*zones,water:emitters*lines*n('litres')};\n }else throw Error(\"Calculateur inconnu.\");\n if(Object.values(o).some(x=>!Number.isFinite(x)))throw Error(\"Les mesures d\u00e9passent la plage prise en charge.\");\n return o;\n}\nif(typeof module!=='undefined')module.exports=calculateLawn;\n\n(()=>{const root=document.getElementById('lawn-tool'),form=root.querySelector('form'),result=root.querySelector('.result'),labels={\"required\": \"Besoin avec pertes (m\u00b2)\", \"pieces\": \"Plaques ou rouleaux entiers\", \"pallets\": \"Palettes enti\u00e8res\", \"budget\": \"Budget dans votre devise\"};let last=null;\nfunction polygons(text){return text.trim().split(\/\\n\\s*\\n\/).map(block=>{let rows=block.trim().split(\/\\n\/),exclude=\/^[-\u2013\u2014]$\/.test(rows[0].trim());if(exclude)rows.shift();return {exclude,points:rows.map(row=>{let parts=row.trim().split(\/\\s*,\\s*\/);if(parts.length!==2||parts.some(p=>!p.trim()))throw Error(\"Saisissez une coordonn\u00e9e x,y par ligne.\");return parts.map(Number);})};});}\nform.addEventListener('submit',e=>{e.preventDefault();last=null;try{let v=Object.fromEntries(new FormData(form));let polys;if(form.dataset.mode==='area'){polys=polygons(v.coordinates);v.polygons=JSON.stringify(polys);}let out=calculateLawn(form.dataset.mode,v);result.replaceChildren();for(let [key,value]of Object.entries(out)){let p=document.createElement('p');p.textContent=labels[key]+': '+value.toLocaleString(\"fr\",{maximumFractionDigits:3});result.append(p);}if(polys){let svg=root.querySelector('#area-diagram'),all=polys.flatMap(p=>p.points),xs=all.map(p=>p[0]),ys=all.map(p=>p[1]),minx=Math.min(...xs),miny=Math.min(...ys),w=Math.max(...xs)-minx,h=Math.max(...ys)-miny;svg.replaceChildren();svg.setAttribute('viewBox',[minx-1,miny-1,w+2,h+2].join(' '));for(let poly of polys){let shape=document.createElementNS('http:\/\/www.w3.org\/2000\/svg','polygon');shape.setAttribute('points',poly.points.map(p=>p.join(',')).join(' '));shape.setAttribute('fill',poly.exclude?'#fff':'#b4e8c1');shape.setAttribute('stroke','#147e91');shape.setAttribute('stroke-width',Math.max(w,h)\/200);svg.append(shape);}last=out.area;root.querySelector('#copy-area').disabled=false;}}\ncatch(err){result.textContent=err.message;if(root.querySelector('#copy-area'))root.querySelector('#copy-area').disabled=true;}});\nform.addEventListener('reset',()=>{last=null;result.textContent=\"Saisissez vos mesures et lancez le calcul.\";let svg=root.querySelector('#area-diagram');if(svg)svg.replaceChildren();let b=root.querySelector('#copy-area');if(b)b.disabled=true;});\nlet copy=root.querySelector('#copy-area');if(copy)copy.addEventListener('click',async()=>{if(last===null)return;try{await navigator.clipboard.writeText(String(last));result.append(document.createTextNode(\" Surface copi\u00e9e en m\u00b2.\"));}catch(e){result.append(document.createTextNode(\" Copier la surface manuellement : \"+last+' m\u00b2.'));}});\n})();\n(()=>{let r=document.getElementById('lawn-tool');r.querySelector('form').addEventListener('input',()=>{r.querySelector('.result').textContent=\"Saisissez vos mesures et lancez le calcul.\";let b=r.querySelector('#copy-area');if(b)b.disabled=true;let s=r.querySelector('#area-diagram');if(s)s.replaceChildren();});})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Estimez les rouleaux, les palettes et votre budget selon la surface mesur\u00e9e et les caract\u00e9ristiques du fournisseur. Surface de pelouse (m\u00b2)Marge de pertes (%)Surface par plaque ou rouleau (m\u00b2)Surface par palette (m\u00b2)Votre prix pos\u00e9 par m\u00b2 (0 sans budget) CalculerR\u00e9initialiser Saisissez vos mesures et lancez le calcul. M\u00e9thode de calcul Besoin = surface mesur\u00e9e \u00d7 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"aiper_reading_time":2,"aiper_last_reviewed":"","aiper_reviewer":0,"aiper_related_ids":[],"aiper_layout":"","footnotes":""},"class_list":["post-13353","page","type-page","status-publish","hentry"],"lang":"fr","translations":{"fr":13353,"es":13354,"de":13352,"en":13351},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/comments?post=13353"}],"version-history":[{"count":3,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13353\/revisions"}],"predecessor-version":[{"id":13461,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/13353\/revisions\/13461"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=13353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}