Martine dirige la maintenance d’un grand site pharmaceutique depuis huit ans. Chaque matin, elle fait sa tournée habituelle avec un café et consulte ses tableaux de bord avec satisfaction : ses équipes connaissent leur métier. Mais ce mardi, son directeur général est entré dans son bureau avec une mine soucieuse : « Martine, l’audit ANSM de la semaine dernière pointe du doigt nos retards dans le planning préventif. Ils questionnent notre conformité réglementaire. »

Martine sait que le planning préventif est le socle de toute maintenance industrielle rigoureuse. En maintenance pharmaceutique, respecter les échéances préventives n’est pas négociable. Mais comment prouver à un auditeur que l’organisation maîtrise réellement son planning ? Comment mesurer avec précision la capacité à tenir les engagements préventifs ?

La question est simple : vos outils vous permettent‑ils vraiment de transformer votre planning préventif en indicateur de performance fiable et de démontrer votre excellence opérationnelle ?

1. Calculateur de taux de réalisation préventif

Pour ceux qui sont pressés, voici un petit programme que nous avons conçu. Choisissez simplement le taux de réalisation préventif dans la liste des KPIs à calculer et remplissez les champs.

Calculateur KPIs Maintenance • Altair :root{ --primary:#1652f0; /* Bleu Altair */ --accent:#f97316; /* Orange Altair */ --bg:#f7faff; /* Fond très clair */ --text:#102a56; /* Bleu marine texte */ --muted:#5a6b8a; /* Texte secondaire */ --field:#f9fbff; /* Fond des champs */ --fieldBorder:#d4e0ff; /* Bordure champs */ --panelBorder:#e0e6f6; /* Bordure carte */ --radius:24px; } *{box-sizing:border-box} body{margin:0; font-family:Inter,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif; color:var(--text); background:var(--bg)} .wrap{max-width:880px; margin:36px auto; padding:0 16px} /* ---- Carte ---- */ .card{ background:#fff; border:1px solid var(--panelBorder); border-radius:var(--radius); box-shadow:0 8px 24px rgba(0,0,0,0.06); padding:32px; position:relative; } /* ---- Consigne (pas de H1) ---- */ .subhead{font-size:14px; color:var(--muted); margin:0 0 18px; text-align:center} /* ---- Grille ---- */ .row{display:grid; grid-template-columns:1fr 1fr; gap:12px} @media (max-width:640px){ .row{grid-template-columns:1fr} } /* ---- Champs ---- */ label{font-size:12px; color:var(--muted); display:block; margin:8px 0 6px} input, select{ width:100%; background:var(--field); color:var(--text); border:1px solid var(--fieldBorder); border-radius:18px; padding:14px 16px; outline:none; font-size:16px; transition: border-color .15s, box-shadow .15s, background .15s; -webkit-appearance: menulist; appearance: auto } input:focus, select:focus{border-color:var(--primary); box-shadow:0 0 0 4px rgba(22,82,240,.15); background:#fff} .hint{font-size:12px; color:var(--muted); margin-top:6px} /* ---- Résultat ---- */ .result{margin-top:18px; display:block; background:#fff; border:2px solid #e2ebff; border-radius:20px; padding:24px; text-align:center} .big{display:block; font-size:clamp(28px,6vw,42px); font-weight:900; letter-spacing:.2px; color:var(--accent); line-height:1.2; word-break:break-word} .formula{margin-top:12px; font-size:13px; color:var(--accent); font-weight:700} /* ---- Toolbar ---- */ .toolbar{display:flex; gap:12px; flex-wrap:wrap; margin-top:16px} .toolbar > *{flex:1 1 auto} /* Bouton “Calculer” (bleu) */ button#calc{ display:block; text-align:center; background:var(--primary); color:#fff; padding:16px 18px; border-radius:20px; font-weight:700; border:none; cursor:pointer; font-size:16px; transition:background .2s ease } button#calc:hover{ background:var(--accent) } /* Lien “En savoir plus sur …” (blanc, typo bleue) */ a.btn{ display:block; width:100%; text-align:center; text-decoration:none; background:#fff; color:var(--primary); padding:16px 18px; border-radius:20px; font-weight:700; font-size:16px; border:1px solid var(--primary); transition:background .2s ease } a.btn:hover{ background:#f1f6ff } /* ---- Brand & logo ---- */ .brand{display:block; text-align:center; margin-top:18px; color:var(--text); font-size:15px; font-weight:600} .brand-logo{ display:block; margin:8px auto 0; max-width:120px; height:auto; opacity:.9; } .brand-logo.dark-mode { display:none; } .card.dark .brand{ color:#8b949e } .card.dark .brand-logo.light-mode { display:none; } .card.dark .brand-logo.dark-mode { display:block; } /* ---- Toggle (classes uniques) ---- */ .toggle-wrap{display:flex; justify-content:flex-end; margin-top:10px} .calc-switch{ position:relative; display:inline-block; width:46px; height:26px } .calc-switch input{ position:absolute; opacity:0; width:0; height:0; } .calc-knob{ position:absolute; inset:0; background:#cfd6e6; border-radius:26px; transition:.3s } .calc-knob:before{ content:""; position:absolute; height:20px; width:20px; left:3px; bottom:3px; background:#fff; border-radius:50%; transition:.3s } .calc-switch input:checked + .calc-knob{ background:var(--primary) } .calc-switch input:checked + .calc-knob:before{ transform:translateX(20px) } /* ---- Dark mode ---- */ .card.dark{ background:#161b22; border:1px solid #2c313a; color:#e6edf3 } .card.dark input, .card.dark select{ background:#0d1117; border:1px solid #30363d; color:#e6edf3 } .card.dark input:focus, .card.dark select:focus{ box-shadow:0 0 0 4px rgba(22,82,240,.25); background:#0f141a } .card.dark .result{ background:#0d1117; border:1px solid #30363d } .card.dark .formula{ color:#f59b4a } .card.dark button#calc{ background:#1f6feb } .card.dark a.btn{ border-color:#1f6feb; color:#1f6feb } .card.dark a.btn:hover{ background:#1d2330 } .card.dark .calc-knob{ background:#30363d } .card.dark .calc-switch input:checked + .calc-knob{ background:#1f6feb } /* ---- Modal (mur limite) ---- */ .modal-backdrop{display:none; position:fixed; inset:0; background:rgba(0,0,0,0.6); align-items:center; justify-content:center; z-index:1000} .modal{background:#fff; padding:24px; border-radius:12px; max-width:420px; text-align:center; box-shadow:0 10px 40px rgba(0,0,0,.2)} .modal h3{margin:0 0 8px; font-size:20px} .modal p{margin:0; color:#334155} .modal .actions{margin-top:18px} .modal a.btn-primary{display:inline-block; background:var(--primary); color:#fff; padding:12px 20px; border-radius:10px; font-weight:700; text-decoration:none} .modal a.btn-primary:hover{background:var(--accent)} /* Responsive paddings */ @media (max-width:760px){ .wrap{margin:22px auto} .card{padding:20px} } document.addEventListener('DOMContentLoaded', function(){ const $ = id => document.getElementById(id); const nf2 = new Intl.NumberFormat('fr-FR', { maximumFractionDigits: 2 }); const nz = n => { n = Number(n); return isFinite(n) ? n : 0 }; const safeDiv = (a,b) => { a=nz(a); b=nz(b); return b===0? NaN : a/b }; function fmt(val, unit){ if(!isFinite(val)) return '—'; switch(unit){ case '%': return (val*100).toFixed(2).replace('.',',') + ' %'; case 'h': return nf2.format(val) + ' h'; case 'min':return nf2.format(val) + ' min'; case 'd': return nf2.format(val) + ' j'; case 'cur':return nf2.format(val) + ' €'; case 'x': return nf2.format(val) + ' x'; default: return nf2.format(val); } } function hoursFrom(v, unit){ if(unit==='h') return nz(v); if(unit==='min') return nz(v)/60; if(unit==='d') return nz(v)*24; return nz(v); } // ===== KPIs (liste complète) ===== const KPIS = [ // 1) Taux de disponibilité { key:'availability', label:'Taux de disponibilité', cta:'le taux de disponibilité', url:'https://altair-enterprise.fr/fonctionnalites/gmao/taux-de-disponibilite/', desc:"% du temps où l’équipement est opérationnel.", unit:'%', unit_display:'', inputs:[ {id:'mtbf', label:'MTBF', unitSel:true, unitDefault:'h', placeholder:'ex : 40'}, {id:'mttr', label:'MTTR', unitSel:true, unitDefault:'h', placeholder:'ex : 1.5'} ], formula:(v)=>{ const mtbf=hoursFrom(v.mtbf.value,v.mtbf.unit); const mttr=hoursFrom(v.mttr.value,v.mttr.unit); return safeDiv(mtbf, mtbf+mttr); }, human:'MTBF / (MTBF + MTTR)' }, // 2) MTBF { key:'mtbf', label:'MTBF', cta:'le MTBF', url:'https://altair-enterprise.fr/fonctionnalites/gmao/mtbf-kpi-guide-complet/', desc:'Temps moyen entre chaque panne.', unit:'h', unit_display:'', inputs:[ {id:'operating', label:'Temps de fonctionnement', unitSel:true, unitDefault:'h', placeholder:'ex : 684'}, {id:'failures', label:'Nombre de pannes', placeholder:'ex : 18'} ], formula:(v)=> safeDiv(hoursFrom(v.operating.value,v.operating.unit), v.failures.value), human:'Temps de fonctionnement / Nombre de pannes' }, // 3) MTTR { key:'mttr', label:'MTTR', cta:'le MTTR', url:'https://altair-enterprise.fr/fonctionnalites/gmao/mttr-kpi-guide-complet/', desc:'Temps moyen pour réparer chaque panne.', unit:'h', unit_display:'', inputs:[ {id:'repair', label:'Temps cumulé de réparation', unitSel:true, unitDefault:'h', placeholder:'ex : 27'}, {id:'failures', label:'Nombre de pannes', placeholder:'ex : 18'} ], formula:(v)=> safeDiv(hoursFrom(v.repair.value,v.repair.unit), v.failures.value), human:'Temps de réparation cumulé / Nombre de pannes' }, // 4) MTTA { key:'mtta', label:'MTTA', cta:'le MTTA', url:'https://altair-enterprise.fr/fonctionnalites/gmao/mtta-kpi-guide-complet/', desc:"Temps moyen entre la détection et le début d’intervention.", unit:'h', unit_display:'', inputs:[ {id:'ackDelay', label:'Délai cumulé avant prise en charge', unitSel:true, unitDefault:'h', placeholder:'ex : 7.5'}, {id:'alerts', label:"Nombre d'alertes", placeholder:'ex : 15'} ], formula:(v)=> safeDiv(hoursFrom(v.ackDelay.value,v.ackDelay.unit), v.alerts.value), human:"Délai cumulé avant prise en charge / Nombre d'alertes" }, // 5) Taux de pannes (pannes/h) { key:'failure_rate', label:'Taux de pannes', cta:'le taux de pannes', url:'https://altair-enterprise.fr/fonctionnalites/gmao/taux-de-pannes/', desc:'Nombre de pannes par heure de fonctionnement.', unit:'custom', unit_display:' pannes/h', inputs:[ {id:'failures', label:'Nombre de pannes', placeholder:'ex : 18'}, {id:'operating', label:'Temps de fonctionnement', unitSel:true, unitDefault:'h', placeholder:'ex : 684'} ], formula:(v)=> safeDiv(v.failures.value, hoursFrom(v.operating.value,v.operating.unit)), human:'Pannes / Heures de fonctionnement' }, // 6) Fiabilité équipement { key:'reliability', label:'Fiabilité équipement', cta:'la fiabilité équipement', url:'https://altair-enterprise.fr/fonctionnalites/gmao/fiabilite-equipement/', desc:'Probabilité de fonctionner sans défaillance pendant une durée t.', unit:'%', unit_display:'', inputs:[ {id:'t', label:'Durée t', unitSel:true, unitDefault:'h', placeholder:'ex : 24'}, {id:'mtbf', label:'MTBF', unitSel:true, unitDefault:'h', placeholder:'ex : 40'} ], formula:(v)=>{ const t=hoursFrom(v.t.value,v.t.unit); const mtbf=hoursFrom(v.mtbf.value,v.mtbf.unit); if(mtbf<=0) return NaN; return Math.exp(-t/mtbf); }, human:'R(t) = exp(- t / MTBF)' }, // 7) Coût de maintenance par unité (€/unité) { key:'cost_per_unit', label:'Coût de maintenance par unité', cta:'le coût de maintenance par unité', url:'https://altair-enterprise.fr/fonctionnalites/gmao/cout-de-maintenance/', desc:'Somme des coûts directs, indirects et cachés, rapportée au volume produit.', unit:'cur', unit_display:' / unité', inputs:[ {id:'direct', label:'Coûts directs (€)', placeholder:'ex : 30000'}, {id:'indirect', label:'Coûts indirects (€)', placeholder:'ex : 12000'}, {id:'hidden', label:'Coûts cachés (€)', placeholder:'ex : 6000'}, {id:'units', label:'Unités produites', placeholder:'ex : 120000'} ], formula:(v)=> safeDiv(v.direct.value + v.indirect.value + v.hidden.value, v.units.value), human:'(Directs + Indirects + Cachés) / Unités produites' }, // 8) ROI maintenance { key:'roi', label:'ROI maintenance', cta:'le ROI maintenance', url:'https://altair-enterprise.fr/fonctionnalites/gmao/roi-maintenance/', desc:'Retour sur investissement des actions de maintenance.', unit:'%', unit_display:'', inputs:[ {id:'benefits', label:'Gains générés (€)', placeholder:'ex : 60000'}, {id:'costs', label:'Coût de la maintenance (€)', placeholder:'ex : 48000'} ], formula:(v)=> safeDiv(v.benefits.value - v.costs.value, v.costs.value), human:'(Gains - Coûts) / Coûts' }, // 9) Coût d’indisponibilité { key:'downtime_cost', label:'Coût d’indisponibilité', cta:"le coût d’indisponibilité", url:'https://altair-enterprise.fr/fonctionnalites/gmao/cout-dindisponibilite/', desc:"Impact financier d’un arrêt non planifié (production, fixes, additionnels, pénalités).", unit:'cur', unit_display:'', inputs:[ {id:'capacity', label:'Capacité horaire (unités/h)', placeholder:'ex : 500'}, {id:'ppu', label:'Prix de vente unitaire (€)', placeholder:'ex : 3.5'}, {id:'downtime', label:'Temps d’arrêt', unitSel:true, unitDefault:'h', placeholder:'ex : 6'}, {id:'fixed', label:'Charges fixes horaires (€/h)', placeholder:'ex : 1200'}, {id:'overtime', label:'Heures supplémentaires (€)', placeholder:'ex : 800'}, {id:'subc', label:'Sous-traitance urgence (€)', placeholder:'ex : 1200'}, {id:'express', label:'Transport express (€)', placeholder:'ex : 300'}, {id:'penalties', label:'Pénalités (€)', placeholder:'ex : 500'} ], formula:(v)=>{ const t=hoursFrom(v.downtime.value,v.downtime.unit); const lossProd=v.capacity.value*v.ppu.value*t; const fixedAbs=v.fixed.value*t; const additionals=v.overtime.value+v.subc.value+v.express.value; return lossProd + fixedAbs + additionals + v.penalties.value; }, human:'(Capacité×Prix×t) + (Fixes×t) + (Additionnels) + Pénalités' }, // 10) Suivi budget maintenance (%) { key:'budget_track', label:'Suivi budget maintenance', cta:'le suivi budget maintenance', url:'https://altair-enterprise.fr/fonctionnalites/gmao/suivi-budget-maintenance/', desc:'Écart budgétaire relatif.', unit:'%', unit_display:'', inputs:[ {id:'actual', label:'Coût réel (€)', placeholder:'ex : 48000'}, {id:'budget', label:'Budget prévisionnel (€)', placeholder:'ex : 52000'} ], formula:(v)=> safeDiv(v.actual.value - v.budget.value, v.budget.value), human:'(Réel - Budget) / Budget' }, // 11) TRS / OEE { key:'oee', label:'TRS (OEE)', cta:'le TRS (OEE)', url:'https://altair-enterprise.fr/fonctionnalites/gmao/trs-taux-de-rendement-synthetique/', desc:'TRS — Taux de rendement synthétique (Disponibilité × Performance × Qualité).', unit:'%', unit_display:'', inputs:[ {id:'avail', label:'Disponibilité (%)', placeholder:'ex : 95'}, {id:'perf', label:'Performance (%)', placeholder:'ex : 90'}, {id:'qual', label:'Qualité (%)', placeholder:'ex : 98'} ], formula:(v)=> (nz(v.avail.value)/100)*(nz(v.perf.value)/100)*(nz(v.qual.value)/100), human:'Disponibilité × Performance × Qualité' }, // 12) Taux de réalisation préventif (%) { key:'pm_rate', label:'Taux de réalisation préventif', cta:'le taux de réalisation préventif', url:'https://altair-enterprise.fr/fonctionnalites/gmao/suivi-planning-preventif/', desc:'Part des préventifs réalisés dans les délais.', unit:'%', unit_display:'', inputs:[ {id:'done', label:'Préventifs réalisés', placeholder:'ex : 288'}, {id:'planned', label:'Préventifs planifiés', placeholder:'ex : 320'} ], formula:(v)=> safeDiv(v.done.value, v.planned.value), human:'Réalisés / Planifiés' }, // 13) Efficacité maintenance (%) { key:'efficiency', label:"Efficacité maintenance", cta:"l’efficacité maintenance", url:'https://altair-enterprise.fr/fonctionnalites/gmao/efficacite-maintenance/', desc:'Part de temps productif vs temps total disponible.', unit:'%', unit_display:'', inputs:[ {id:'prod', label:'Temps productif', unitSel:true, unitDefault:'h', placeholder:'ex : 1280'}, {id:'total', label:'Temps total disponible', unitSel:true, unitDefault:'h', placeholder:'ex : 1600'} ], formula:(v)=> safeDiv(hoursFrom(v.prod.value,v.prod.unit), hoursFrom(v.total.value,v.total.unit)), human:'Temps productif / Temps total disponible' }, // 14) Temps moyen d’intervention (MTTA) { key:'avg_intervention', label:"Temps moyen d’intervention (MTTA)", cta:'le temps moyen d’intervention (MTTA)', url:'https://altair-enterprise.fr/fonctionnalites/gmao/mtta-kpi-guide-complet/', desc:"Temps de prise en compte d'une alerte.", unit:'h', unit_display:'', inputs:[ {id:'detect', label:'Temps de Détection (total)', unitSel:true, unitDefault:'h', placeholder:'ex : 80'}, {id:'notify', label:'Temps de Notification (total)', unitSel:true, unitDefault:'h', placeholder:'ex : 40'}, {id:'takein', label:'Temps de Prise en Compte (total)', unitSel:true, unitDefault:'h', placeholder:'ex : 60'}, {id:'count', label:"Nombre d'interventions", placeholder:'ex : 120'} ], formula:(v)=> safeDiv(hoursFrom(v.detect.value,v.detect.unit)+hoursFrom(v.notify.value,v.notify.unit)+hoursFrom(v.takein.value,v.takein.unit), v.count.value), human:"(Détection + Notification + Prise en compte) / Nb d’interventions" }, // 15) Qualité maintenance (%) { key:'maint_quality', label:'Qualité maintenance', cta:'la qualité maintenance', url:'https://altair-enterprise.fr/fonctionnalites/gmao/qualite-maintenance/', desc:'Taux de succès du premier coup (First Time Fix).', unit:'%', unit_display:'', inputs:[ {id:'firstPass', label:'Interventions réussies du premier coup', placeholder:'ex : 135'}, {id:'total', label:'Total interventions réalisées', placeholder:'ex : 150'} ], formula:(v)=> safeDiv(v.firstPass.value, v.total.value), human:'Interventions 1er coup / Total interventions' }, // 16) Sécurité maintenance (%) { key:'safety', label:'Sécurité maintenance', cta:'la sécurité maintenance', url:'https://altair-enterprise.fr/fonctionnalites/gmao/securite-maintenance/', desc:'Part d’interventions sans incident sur la période.', unit:'%', unit_display:'', inputs:[ {id:'noIncident', label:'Interventions sans incident', placeholder:'ex : 980'}, {id:'total', label:'Interventions totales', placeholder:'ex : 1000'} ], formula:(v)=> safeDiv(v.noIncident.value, v.total.value), human:'Sans incident / Total interventions' }, // 17) Taux de conformité réglementaire (%) { key:'reg_compliance', label:'Taux de conformité réglementaire', cta:'le taux de conformité réglementaire', url:'https://altair-enterprise.fr/fonctionnalites/gmao/taux-de-conformite-reglementaire/', desc:'Interventions conformes / interventions auditées.', unit:'%', unit_display:'', inputs:[ {id:'conform', label:'Interventions conformes', placeholder:'ex : 48'}, {id:'audited', label:'Interventions auditées', placeholder:'ex : 50'} ], formula:(v)=> safeDiv(v.conform.value, v.audited.value), human:'Interventions conformes / Interventions auditées' }, // 18) Rotation des stocks (x/an) { key:'stock_rotation', label:'Rotation des stocks', cta:'la rotation des stocks', url:'https://altair-enterprise.fr/fonctionnalites/gmao/rotation-des-stock/', desc:'Fréquence de renouvellement des pièces détachées.', unit:'x', unit_display:' / an', inputs:[ {id:'cogs', label:'Consommation pièces (COGS) / an', placeholder:'ex : 180000'}, {id:'avgInv', label:'Valeur moyenne de stock', placeholder:'ex : 90000'} ], formula:(v)=> safeDiv(v.cogs.value, v.avgInv.value), human:'COGS / Stock moyen' }, // 19) Formation maintenance (h/technicien) { key:'training', label:'Formation maintenance', cta:'la formation maintenance', url:'https://altair-enterprise.fr/fonctionnalites/gmao/formation-maintenance/', desc:'Heures de formation par technicien (moyenne).', unit:'custom', unit_display:' h/technicien', inputs:[ {id:'hours', label:'Heures totales de formation', placeholder:'ex : 240'}, {id:'techs', label:'Nombre de techniciens', placeholder:'ex : 12'} ], formula:(v)=> safeDiv(v.hours.value, v.techs.value), human:'Heures totales / Nombre de techniciens' } ]; // ----- select options const kpiSelect = $('kpi'); KPIS.forEach(k=>{ const o=document.createElement('option'); o.value=k.key; o.textContent=k.label; kpiSelect.appendChild(o); }); // ----- render inputs function renderInputs(k){ const holder = $('inputs'); holder.innerHTML=''; const grid = document.createElement('div'); grid.className='row'; k.inputs.forEach(f=>{ const wrap = document.createElement('div'); const id = `f_${f.id}`; const unitId = `u_${f.id}`; wrap.innerHTML = `
${f.unitSel? `
heuresminutesjours
`:''}
`; grid.appendChild(wrap); }); holder.appendChild(grid); } // --- collecte sans déclencher de calcul function collectValues(k){ const vals={}; k.inputs.forEach(f=>{ const el = document.getElementById(`f_${f.id}`); const u = document.getElementById(`u_${f.id}`); vals[f.id] = { value: nz(el?.value) }; if(f.unitSel) vals[f.id].unit = u?.value || 'h'; }); return vals; } // --- calcule et affiche le résultat function doCompute(){ const k = KPIS.find(x=>x.key===kpiSelect.value); if(!k) return; const vals = collectValues(k); const res = k.formula(vals); let outText='—'; if(isFinite(res)){ if(k.key==='failure_rate'){ const rounded = Math.ceil(res*1000)/1000; // millième supérieur outText = rounded.toFixed(3).replace('.', ',') + (k.unit_display||''); } else if(k.unit==='custom'){ outText = nf2.format(res) + (k.unit_display||''); } else { outText = fmt(res, k.unit) + (k.unit_display||''); } } $('resLabel').textContent = k.label; $('resValue').textContent = outText; $('kpiDesc').textContent = k.desc; $('formula').textContent = 'Formule : ' + k.human; const cta = $('learn'); cta.textContent = `En savoir plus sur ${k.cta}`; cta.href = k.url; } // --- binder inputs (sans auto-calcule) function bindInputs(k){ k.inputs.forEach(f=>{ const el = document.getElementById(`f_${f.id}`); if(el){ el.addEventListener('input', ()=>{ if(el.value && String(el.value).length>11) el.value = String(el.value).slice(0,11); }); } if(f.unitSel){ const u = document.getElementById(`u_${f.id}`); if(u) u.addEventListener('change', ()=>{}); } }); } // --- init function init(){ const first = KPIS[0]; kpiSelect.value = first.key; renderInputs(first); bindInputs(first); // initialise le CTA & la desc sans calcul $('kpiDesc').textContent = first.desc; const cta = $('learn'); cta.textContent = `En savoir plus sur ${first.cta}`; cta.href = first.url; } kpiSelect.addEventListener('change', ()=>{ const k=KPIS.find(x=>x.key===kpiSelect.value); renderInputs(k); bindInputs(k); // reset affichage $('resValue').textContent='—'; $('formula').textContent='Formule : —'; $('kpiDesc').textContent = k.desc; const cta = $('learn'); cta.textContent = `En savoir plus sur ${k.cta}`; cta.href = k.url; }); // ---- compteur d’utilisations const LIMIT = 10; let count = parseInt(localStorage.getItem('altair_calc_count') || '0', 10); const modal = $('limit-modal'); function showModal(){ modal.style.display='flex'; } $('calc').addEventListener('click', function(e){ e.preventDefault(); if(count >= LIMIT){ showModal(); return; } doCompute(); count += 1; localStorage.setItem('altair_calc_count', String(count)); }); // ---- toggle dark (scopé à la carte) const toggle = $('toggle-dark'); const cardEl = document.querySelector('.card'); const pref = localStorage.getItem('altair_calc_theme'); if(pref==='dark'){ cardEl.classList.add('dark'); toggle.checked = true; } toggle.addEventListener('change', (e)=>{ cardEl.classList.toggle('dark', e.target.checked); localStorage.setItem('altair_calc_theme', e.target.checked ? 'dark' : 'light'); }); init(); });

2. Qu’est-ce que le Suivi Planning Préventif en maintenance ?

Le suivi du planning préventif est un indicateur de performance qui mesure la capacité d’une organisation à respecter et exécuter son programme de maintenance préventive selon les échéances planifiées.

Cet indicateur permet de quantifier la discipline opérationnelle dans l’exécution des tâches préventives. Il évalue trois dimensions essentielles de votre maintenance :

  • Fiabilité organisationnelle : votre capacité à tenir vos engagements temporels.

  • Maintenabilité optimisée : l’efficacité de votre planification préventive.

  • Excellence opérationnelle : la régularité de vos interventions programmées.

La mesure se fait généralement en pourcentage (%) et représente le ratio entre les interventions préventives réalisées dans les délais et le total des interventions programmées.

Le suivi du planning préventif reflète directement la maturité de votre organisation de maintenance et votre capacité à prévenir efficacement les défaillances des équipements.

Infographie des trois dimensions du Suivi Planning Préventif

3. Suivi Planning Préventif en situation réelle

En reprenant le cas de Martine, son planning préventif mensuel comptait 120 interventions programmées : révisions de compresseurs, graissages de machines, contrôles des systèmes de ventilation, vérifications de sécurité. Vendredi soir, son chef d’équipe lui annonce : « On a terminé 102 interventions sur les 120 prévues ce mois‑ci. »

Concrètement, que révèle ce chiffre sur la performance maintenance ? Les 18 interventions non réalisées représentent‑elles un retard facilement rattrapable ou le signe d’un dysfonctionnement organisationnel ?

Dans l’industrie pharmaceutique, reporter une maintenance préventive peut compromettre la conformité réglementaire et déclencher des arrêts de production coûteux.

Le suivi du planning préventif de Martine s’élève donc à 85 % (102/120). Selon les standards industriels, ce taux traduit une organisation correcte mais perfectible ; l’excellence se situe généralement au‑delà de 95 %.

Comment transformer cette mesure ponctuelle en un véritable levier d’amélioration continue de la maintenance préventive ?

Suivi Planning Préventif en situation réelle

4. Comment calculer le Suivi Planning Préventif ?

La formule du Suivi Planning Préventif est directe mais nécessite une collecte de données rigoureuse :

Suivi Planning Préventif (%) = (Interventions préventives réalisées dans les délais / Interventions préventives programmées) × 100

la formule Suivi Planning Préventif

Exemple de calcul détaillé :

Données collectées sur un mois :

Interventions préventives programmées : 85  Interventions réalisées dans les délais : 76

Interventions en retard : 6  Interventions annulées : 3

Calcul : Suivi Planning Préventif = (76 / 85) × 100 = 89,4%                                            

Variables explicatives :

Interventions programmées : Toutes les tâches préventives planifiées selon votre GMAO

Délais respectés : Interventions terminées dans la fenêtre temporelle définie

Tolérances : Généralement ±5% de la date prévue selon les équipements

Attention : Une intervention réalisée avec 10 jours de retard ne compte pas comme « dans les délais », même si elle est finalement exécutée.

5.  Optimisez votre planning préventif avec une gestion intelligente des ressources

Optimisez votre planning préventif
Altair vous permet de structurer un planning de maintenance préventive fiable et pilotable, en tenant compte des nombreuses contraintes du terrain.
Le planificateur dispose d’une vue détaillée des disponibilités, indisponibilités et créneaux déjà occupés de chaque technicien. Il peut ainsi affecter les bons de travail de manière réaliste, tout en anticipant les éventuels conflits de ressources.
Le logiciel prend également en compte :
  • les jours fériés et week-ends préparamétrés, avec la possibilité de rééchelonner automatiquement une intervention si elle tombe sur une date non travaillée ;
  • la disponibilité réelle des techniciens, selon leurs horaires, affectations et règles internes ;
  • une visualisation claire du planning, incluant les interventions planifiées et les tâches à affecter.
En combinant ces outils, Altair permet d’éviter les oublis, les doubles affectations ou les incohérences, qui peuvent compromettre l’exécution du préventif. En contexte bien organisé, cela permet de viser un taux d’accomplissement proche de 100 % — un véritable point fort du logiciel, reconnu par ses utilisateurs.

Avec Altair Enterprise, transformez vos données de maintenance en intelligence stratégique pour optimiser la performance de vos équipements.

6. Stratégies d’optimisation du Suivi Planning Préventif

L’amélioration de votre Suivi Planning Préventif nécessite une approche méthodique combinant organisation, ressources et outils de pilotage.

Planification réaliste : Basez vos échéances sur l’historique réel de vos interventions plutôt que sur les recommandations constructeur théoriques. Un planning optimiste génère mécaniquement des retards.

Fenêtres de tolérance : Définissez des plages temporelles réalistes selon la criticité des équipements – 48h pour les machines critiques, une semaine pour les équipements de confort.

Priorisation dynamique : Hiérarchisez vos interventions préventives selon l’impact production et sécurité. Mieux vaut 95% de respect sur les équipements critiques que 85% sur l’ensemble du parc.

Indicateurs associés : Surveillez simultanément votre Taux de Disponibilité et MTBF pour vérifier que l’amélioration de votre planning se traduit par une meilleure performance équipements.

L’objectif n’est pas d’atteindre 100% coûte que coûte, mais de maintenir un taux de respect élevé tout en préservant la réactivité face aux urgences. L’excellence opérationnelle se mesure à votre capacité d’arbitrer intelligemment entre préventif programmé et correctif imprévu.

Demander une démo personnalisée

Cet article vous a plu ? Abonnez-vous à notre newsletter

Nos derniers articles sur la GMAO

Dans un hôpital ou une clinique, l’indisponibilité d’un équipement critique désorganise tout le parcours de soins, du bloc opératoire à l’imagerie. Anticiper ces arrêts suppose de formaliser le suivi des interventions, la traçabilité des contrôles et la répartition des responsabilités entre les équipes biomédicales et techniques. Pour structurer cette démarche pas à pas, vous pouvez consulter notre dossier pratique sur la fiabilité des équipements biomédicaux.