---
title: "Coach examen pratique permis B – suivi des 36 compétences – Permis Online"
canonical: "https://permis-online.be/outils/coach-examen-pratique/"
source: "https://permis-online.be/outils/coach-examen-pratique/"
author: "Wenceslas Dasnois"
author_role: "Fondateur de Permis Online"
author_credentials: "Fondateur de l'Observatoire du Permis Belge (vérification des statistiques officielles du permis, 3 régions)"
publisher: "Permis Online"
published: "2026-03-11"
modified: "2026-03-12"
language: "fr"
word_count: 130
---

# Coach examen pratique permis B – suivi des 36 compétences – Permis Online

---

# Coach Examen Pratique

Suis ta progression et prépare chaque compétence pour réussir ton examen pratique du permis B en Belgique.

0%0 / 36compétences maîtrisées
## Outils complémentaires

[Planificateur de Réussite Organise ton planning de révision pour le permis.](/outils/planificateur-de-reussite/)[Simulateur Budget Calcule le coût total de ton permis de conduire.](/outils/simulateur-budget-duree/)[Assistant Parcours Découvre les parcours d'examen de ton centre.](/outils/assistant-parcours-permis/)Réinitialiser la progression ?Toutes tes coches, notes et séances seront effacées. Cette action est irréversible.Séance de conduiteCompétences travailléesNotes de séanceMon bilan de progression'; panel.appendChild(barWrap); cat.items.forEach(function(item){ var isPriority = state[item.id].stars <= 1 && state[item.id].stars >= 0 && !state[item.id].checked; var isPinned = !!pins[item.id]; var el = document.createElement('div'); var cls = 'cp-item'; if(state[item.id].checked) cls += ' cp-item--checked'; if(isPriority && state[item.id].stars <= 1) cls += ' cp-item--priority'; if(isPinned) cls += ' cp-item--pinned'; el.className = cls; el.dataset.id = item.id; var diffClass = 'cp-detail-tag--' + item.diff; var diffLabel = item.diff.charAt(0).toUpperCase() + item.diff.slice(1); el.innerHTML = '' + '' + '' + '' + '' + '' + item.label + '' + '\u26a0 À travailler' + 'Prochaine séance' + '' + buildStars(state[item.id].stars) + '' + '' + '' + '' + '' + 'Conseil' + '' + diffLabel + '' + '' + item.tip + '' + '' + 'Erreur fréquente' + item.err + '' + '' + ' ' + item.time + ' de pratique' + '' + '' + ''; panel.appendChild(el); }); var noRes = document.createElement('div'); noRes.className = 'cp-no-results'; noRes.style.display = 'none'; noRes.textContent = 'Aucune compétence trouvée.'; noRes.dataset.noResults = ci; panel.appendChild(noRes); panelsEl.appendChild(panel); }); function buildStars(rating){ var html = ''; for(var i = 1; i <= 3; i++){ var filled = i <= rating; html += ''; } return html; } var searchInput = document.getElementById('cpSearch'); var searchClear = document.getElementById('cpSearchClear'); var filterBtns = document.querySelectorAll('.cp-filter-btn'); function applyFilters(){ var query = searchQuery.toLowerCase().trim(); CATEGORIES.forEach(function(cat, ci){ var panel = document.getElementById('cp-panel-' + ci); var items = panel.querySelectorAll('.cp-item'); var visibleCount = 0; items.forEach(function(el){ var id = el.dataset.id; var item = ITEM_MAP; if(!item) return; var show = true; if(query && item.label.toLowerCase().indexOf(query) === -1){ show = false; } if(activeFilter === 'weak'){ if(state.stars > 1 || state.checked) show = false; } else if(activeFilter === 'pinned'){ if(!pins) show = false; } el.classList.toggle('cp-item--hidden', !show); if(show) visibleCount++; }); var noRes = panel.querySelector(''); if(noRes) noRes.style.display = visibleCount === 0 ? 'block' : 'none'; }); } searchInput.addEventListener('input', function(){ searchQuery = this.value; searchClear.style.display = searchQuery ? 'block' : 'none'; applyFilters(); }); searchClear.addEventListener('click', function(){ searchInput.value = ''; searchQuery = ''; searchClear.style.display = 'none'; applyFilters(); }); filterBtns.forEach(function(btn){ btn.addEventListener('click', function(){ filterBtns.forEach(function(b){ b.classList.remove('cp-filter-btn--active'); }); this.classList.add('cp-filter-btn--active'); activeFilter = this.dataset.filter; applyFilters(); }); }); var tabs = document.querySelectorAll('.cp-tab'); tabs.forEach(function(tab){ tab.addEventListener('click', function(){ var idx = parseInt(this.dataset.idx); tabs.forEach(function(t){ t.classList.remove('cp-tab--active'); t.setAttribute('aria-selected','false'); }); this.classList.add('cp-tab--active'); this.setAttribute('aria-selected','true'); document.querySelectorAll('.cp-panel').forEach(function(p,i){ p.classList.toggle('cp-panel--active', i === idx); }); }); }); panelsEl.addEventListener('change', function(e){ if(e.target.type !== 'checkbox') return; var item = e.target.closest('.cp-item'); var id = item.dataset.id; state.checked = e.target.checked; item.classList.toggle('cp-item--checked', e.target.checked); updatePriorityFlag(item, id); saveState(); recordActivity(); updateProgress(); }); panelsEl.addEventListener('click', function(e){ var star = e.target.closest('.cp-star'); if(!star) return; var item = star.closest('.cp-item'); var id = item.dataset.id; var val = parseInt(star.dataset.val); state.stars = (state.stars === val) ? 0 : val; var starsWrap = item.querySelector('.cp-stars'); starsWrap.innerHTML = buildStars(state.stars); updatePriorityFlag(item, id); saveState(); recordActivity(); applyFilters(); }); function updatePriorityFlag(el, id){ var isPriority = state.stars <= 1 && !state.checked; el.classList.toggle('cp-item--priority', isPriority); } panelsEl.addEventListener('click', function(e){ var pinBtn = e.target.closest('.cp-pin-btn'); if(!pinBtn) return; var id = pinBtn.dataset.pin; var item = pinBtn.closest('.cp-item'); if(pins){ delete pins; pinBtn.classList.remove('cp-pin-btn--active'); pinBtn.textContent = '+ Prochaine séance'; item.classList.remove('cp-item--pinned'); } else { pins = true; pinBtn.classList.add('cp-pin-btn--active'); pinBtn.textContent = '\u2605 Épinglé'; item.classList.add('cp-item--pinned'); } savePins(); applyFilters(); }); panelsEl.addEventListener('click', function(e){ var btn = e.target.closest('.cp-expand-btn'); if(!btn) return; var detail = btn.closest('.cp-item').querySelector('.cp-item-detail'); detail.classList.toggle('cp-item-detail--open'); btn.classList.toggle('cp-expand-btn--open'); }); panelsEl.addEventListener('click', function(e){ if(e.target.classList.contains('cp-item-label')){ var btn = e.target.closest('.cp-item-row').querySelector('.cp-expand-btn'); btn.click(); } }); document.querySelector('.cp-reset-btn').addEventListener('click', function(){ document.getElementById('cpDialog').classList.add('cp-dialog-overlay--open'); }); document.getElementById('cpDialogCancel').addEventListener('click', function(){ document.getElementById('cpDialog').classList.remove('cp-dialog-overlay--open'); }); document.getElementById('cpDialogConfirm').addEventListener('click', function(){ document.getElementById('cpDialog').classList.remove('cp-dialog-overlay--open'); state = defaultState(); pins = {}; sessions = []; saveState(); savePins(); saveSessions(); try { localStorage.removeItem(STREAK_KEY); } catch(e){} panelsEl.querySelectorAll('.cp-item').forEach(function(el){ el.classList.remove('cp-item--checked','cp-item--priority','cp-item--pinned'); el.classList.add('cp-item--priority'); el.querySelector('input[type="checkbox"]').checked = false; el.querySelector('.cp-stars').innerHTML = buildStars(0); var pinBtn = el.querySelector('.cp-pin-btn'); if(pinBtn){ pinBtn.classList.remove('cp-pin-btn--active'); pinBtn.textContent = '+ Prochaine séance'; } }); document.getElementById('cpStreakBanner').style.display = 'none'; celebratedCats = {}; updateProgress(); applyFilters(); }); document.getElementById('cpDialog').addEventListener('click', function(e){ if(e.target === this) this.classList.remove('cp-dialog-overlay--open'); }); function checkCelebration(){ CATEGORIES.forEach(function(cat, ci){ var allChecked = true; cat.items.forEach(function(it){ if(!state[it.id].checked) allChecked = false; }); var tabEl = tabs; if(allChecked && cat.items.length > 0){ tabEl.classList.add('cp-tab--complete'); if(!celebratedCats){ celebratedCats = true; showCelebration(cat.name); } } else { tabEl.classList.remove('cp-tab--complete'); celebratedCats = false; } }); } function showCelebration(catName){ var el = document.getElementById('cpCelebrate'); var msg = document.getElementById('cpCelebrateMsg'); msg.textContent = catName + ' terminé à 100% ! Bravo !'; el.classList.add('cp-celebrate--show'); setTimeout(function(){ el.classList.remove('cp-celebrate--show'); }, 3000); } var sessionModal = document.getElementById('cpSessionModal'); var sessionSkillsEl = document.getElementById('cpSessionSkills'); var sessionNotesEl = document.getElementById('cpSessionNotes'); var sessionHistoryEl = document.getElementById('cpSessionHistory'); document.getElementById('cpSessionBtn').addEventListener('click', function(){ sessionSelected = []; sessionNotesEl.value = ''; renderSessionSkills(); renderSessionHistory(); sessionModal.classList.add('cp-modal-overlay--open'); }); document.getElementById('cpSessionClose').addEventListener('click', function(){ sessionModal.classList.remove('cp-modal-overlay--open'); }); sessionModal.addEventListener('click', function(e){ if(e.target === this) this.classList.remove('cp-modal-overlay--open'); }); function renderSessionSkills(){ var html = ''; CATEGORIES.forEach(function(cat){ cat.items.forEach(function(item){ var sel = sessionSelected.indexOf(item.id) !== -1; html += ''; }); }); sessionSkillsEl.innerHTML = html; } sessionSkillsEl.addEventListener('click', function(e){ var btn = e.target.closest('.cp-session-skill'); if(!btn) return; var sid = btn.dataset.sid; var idx = sessionSelected.indexOf(sid); if(idx !== -1){ sessionSelected.splice(idx, 1); btn.classList.remove('cp-session-skill--sel'); } else { sessionSelected.push(sid); btn.classList.add('cp-session-skill--sel'); } }); document.getElementById('cpSessionSave').addEventListener('click', function(){ if(sessionSelected.length === 0) return; var entry = { date: new Date().toISOString(), skills: sessionSelected.slice(), notes: sessionNotesEl.value.trim() }; sessions.unshift(entry); if(sessions.length > 50) sessions = sessions.slice(0, 50); saveSessions(); recordActivity(); renderSessionHistory(); sessionSelected = []; sessionNotesEl.value = ''; renderSessionSkills(); }); function renderSessionHistory(){ if(sessions.length === 0){ sessionHistoryEl.innerHTML = 'Aucune séance enregistrée'; return; } var html = 'Historique des séances (' + sessions.length + ')'; sessions.forEach(function(s, i){ var d = new Date(s.date); var dateStr = d.toLocaleDateString('fr-BE', {day:'numeric',month:'long',year:'numeric'}) + ' à ' + d.toLocaleTimeString('fr-BE',{hour:'2-digit',minute:'2-digit'}); html += ''; html += ''; html += '' + dateStr + ''; html += ''; s.skills.forEach(function(sid){ var it = ITEM_MAP; html += '' + (it ? it.label : sid) + ''; }); html += ''; if(s.notes){ html += '' + escapeHtml(s.notes) + ''; } html += ''; }); sessionHistoryEl.innerHTML = html; } sessionHistoryEl.addEventListener('click', function(e){ var delBtn = e.target.closest(''); if(!delBtn) return; var idx = parseInt(delBtn.dataset.delidx); sessions.splice(idx, 1); saveSessions(); renderSessionHistory(); }); function escapeHtml(str){ var div = document.createElement('div'); div.textContent = str; return div.innerHTML; } var bilanModal = document.getElementById('cpBilanModal'); document.getElementById('cpBilanBtn').addEventListener('click', function(){ generateBilan(); bilanModal.classList.add('cp-modal-overlay--open'); }); document.getElementById('cpBilanClose').addEventListener('click', function(){ bilanModal.classList.remove('cp-modal-overlay--open'); }); bilanModal.addEventListener('click', function(e){ if(e.target === this) this.classList.remove('cp-modal-overlay--open'); }); document.getElementById('cpBilanPrint').addEventListener('click', function(){ window.print(); }); function generateBilan(){ var content = document.getElementById('cpBilanContent'); var catData = []; var strengths = []; var weaknesses = []; var totalStars = 0; var totalMax = TOTAL * 3; var totalChecked = 0; CATEGORIES.forEach(function(cat){ var catStars = 0; cat.items.forEach(function(it){ var s = state[it.id]; catStars += s.stars; totalStars += s.stars; if(s.checked) totalChecked++; if(s.stars >= 3) strengths.push(it.label); if(s.stars <= 1 && !s.checked) weaknesses.push(it.label); }); catData.push({ name: cat.name, avg: cat.items.length > 0 ? catStars / (cat.items.length * 3) : 0 }); }); var readiness = Math.round((totalStars / totalMax * 60) + (totalChecked / TOTAL * 40)); if(readiness > 100) readiness = 100; var radarSvg = buildRadarChart(catData); var html = ''; html += ''; html += '' + readiness + '%'; html += 'Estimation de préparation à l\'examen'; html += ''; html += '' + radarSvg + ''; html += ''; html += ' Points forts (' + strengths.length + ')'; if(strengths.length > 0){ html += '- ' + s + '

'; } else { html += 'Aucune compétence à 3 étoiles pour le moment.'; } html += ''; html += ''; html += ' Points à travailler (' + weaknesses.length + ')'; if(weaknesses.length > 0){ html += '- ' + s + '

'; } else { html += 'Bravo ! Aucun point faible détecté.'; } html += ''; content.innerHTML = html; } function buildRadarChart(catData){ var cx = 160, cy = 140, maxR = 110; var n = catData.length; var angleStep = (2 * Math.PI) / n; var levels = [0.33, 0.66, 1.0]; var svg = ''; return svg; } function updateProgress(){ var totalChecked = 0; CATEGORIES.forEach(function(cat, ci){ var catChecked = 0; cat.items.forEach(function(it){ if(state[it.id].checked) { catChecked++; totalChecked++; } }); var badge = tabs.querySelector('.cp-tab-badge'); badge.textContent = catChecked + '/' + cat.items.length; var panel = document.getElementById('cp-panel-' + ci); var catFill = panel.querySelector('.cp-cat-bar-fill'); var catCount = panel.querySelector('.cp-cat-count'); catFill.style.width = (catChecked / cat.items.length * 100) + '%'; catCount.textContent = catChecked; }); var pct = Math.round(totalChecked / TOTAL * 100); document.getElementById('cpCompleted').textContent = totalChecked; document.querySelector('.cp-donut-pct').textContent = pct + '%'; var circumference = 2 * Math.PI * 52; var offset = circumference - (pct / 100 * circumference); document.querySelector('.cp-donut-fill').style.strokeDashoffset = offset; document.querySelector('.cp-stat-bar-fill').style.width = pct + '%'; checkCelebration(); } updateProgress(); updateStreak(); applyFilters(); })();

---

*Source: [Coach examen pratique permis B – suivi des 36 compétences – Permis Online](https://permis-online.be/outils/coach-examen-pratique/) · Published 2026-03-11 · Updated 2026-03-12*
*Author: Wenceslas Dasnois (Fondateur de Permis Online · Fondateur de l'Observatoire du Permis Belge (vérification des statistiques officielles du permis, 3 régions)) · Permis Online*
