Test RIASEC en ligne

Author: Gerald Vernay — · Updated:

Short summary: Le test RIASEC est un questionnaire en ligne gratuit et anonyme qui aide à identifier vos intérêts professionnels et environnements de travail adaptés. En quatre étapes, il génère un profil RIASEC et fournit des résultats visuels, des descriptions de métiers, et un export PDF. C'est un outil pédagogique pour explorer de nouvelles perspectives.

Quick overview

Site
Le Labo des CIP
Canonical URL
https://lelabodescip.fr/test-riasec-en-ligne/
LLM HTML version
https://lelabodescip.fr/test-riasec-en-ligne/llm
LLM JSON version
https://lelabodescip.fr/test-riasec-en-ligne/llm.json
Manifest
https://lelabodescip.fr/llm-endpoints-manifest.json
Estimated reading time
3 minutes (141 seconds)
Word count
469

Key points

Primary visual

Test RIASEC en ligne
Main illustration associated with the content.

Structured content

✨ Bienvenue dans le test RIASEC ✨
Ce questionnaire en ligne vous aide à mieux comprendre vos intérêts professionnels et à repérer les environnements de travail qui vous correspondent le mieux.
👉 Il n’y a pas de “bonne” ou de “mauvaise” réponse : l’important est d’être spontané et honnête.

À la fin, vous recevrez votre profil RIASEC (Réalisme, Investigateur, Artistique, Social, Entreprenant, Conventionnel) avec une interprétation et des exemples de métiers correspondants.

Ce que vous y trouverez :

✅ 100% gratuit & anonyme : vos données restent uniquement dans votre navigateur.

✅ 4 étapes claires : Activités, Professions, Aptitudes, Personnalité → pour un profil complet et nuancé.

✅ Des résultats concrets : un code Holland à 3 lettres, des graphiques visuels, des descriptions de profils et des métiers.

✅ Export PDF en 1 clic : pratique pour vos suivis, vos accompagnements et vos dossiers bénéficiaires.

Cet outil n’est pas une vérité absolue, mais une ressource pédagogique : un support de dialogue, un point de départ pour réfléchir, et parfois… ce petit déclic qui ouvre de nouvelles perspectives. ✨

Test RIASEC — Le Labo des CIP :root{ --ink:#0f172a; --muted:#64748b; --bg:#ffffff; --panel:#f8fafc; --line:#e5e7eb; --accent:#39ff14; --accent-ink:#083b12; --danger:#ef4444; --ok:#16a34a; --card:#ffffff; --shadow:0 8px 24px rgba(0,0,0,.08); } *{box-sizing:border-box} html,body{height:100%} body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,Helvetica,Arial;color:var(--ink);background:var(--bg);line-height:1.5} header.appbar{position:sticky;top:0;z-index:40;background:#fff;border-bottom:1px solid var(--line)} .appbar .wrap{max-width:1100px;margin:auto;display:flex;align-items:center;gap:16px;padding:10px 16px} .appbar img.logo{width:36px;height:36px;border-radius:8px} .appbar .brand{font-weight:800} main{max-width:1100px;margin:24px auto;padding:0 16px} .intro,.card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:20px} h1,h2,h3{margin:0 0 10px} h1{font-size:1.6rem} h2{font-size:1.25rem} h3{font-size:1.05rem} p{margin:.5em 0} .actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:12px} button,.btn{appearance:none;border:0;border-radius:10px;padding:10px 14px;font-weight:700;cursor:pointer} .btn-accent{background:var(--accent);color:#052e0e} .btn-ghost{background:#fff;border:1px solid var(--line)} .btn-danger{background:var(--danger);color:#fff} .toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:12px 0} .progress{height:10px;background:#eef2f7;border-radius:999px;overflow:hidden;border:1px solid var(--line)} .progress span{display:block;height:100%;background:var(--accent)} .grid{display:grid;gap:14px} @media(min-width:900px){ .grid-2{grid-template-columns:1fr 1fr} } .badge{display:inline-block;background:#ecfdf5;border:1px solid #bbf7d0;color:#064e3b;border-radius:999px;padding:2px 8px;font-size:.8rem} .note{font-size:.9rem;color:var(--muted)} .hint{border-left:4px solid var(--accent);background:#f6fff4;padding:10px;border-radius:8px} .toggle{display:flex;align-items:center;gap:8px} .hidden{display:none !important} .wizard-step{margin-top:16px} .part-title{display:flex;align-items:center;gap:10px;margin:4px 0 10px} .part-title .dot{width:10px;height:10px;border-radius:999px;background:var(--accent)} .bloc{border:1px dashed var(--line);border-radius:12px;padding:14px;background:#fff} .bloc h4{margin:0 0 8px} .items{display:grid;gap:8px} .item{display:flex;align-items:flex-start;gap:10px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px} .item label{flex:1} .apt-scale{display:flex;gap:6px} .apt-scale input{accent-color:var(--accent)} .footer-nav{display:flex;justify-content:space-between;gap:12px;margin-top:16px} .error{color:#991b1b;background:#fef2f2;border:1px solid #fecaca;padding:8px;border-radius:8px;margin:10px 0} .result-head{display:flex;align-items:center;gap:10px;justify-content:space-between} .code{font-size:1.8rem;font-weight:900;letter-spacing:.1em} .bars{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin:12px 0} .bar{background:#eef2f7;border-radius:8px;position:relative;height:120px;display:flex;align-items:flex-end} .bar span{display:block;width:100%;background:var(--accent)} .bar small{position:absolute;bottom:-20px;left:50%;transform:translateX(-50%);font-weight:700} .profile{border:1px solid var(--line);border-radius:12px;padding:12px;background:#fff} .avatar{width:48px;height:48px;border-radius:12px;background:#eaffea;border:2px solid var(--accent);display:flex;align-items:center;justify-content:center;font-size:26px} .jobs{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px} .jobs .badge{background:#eef2ff;border:1px solid #c7d2fe;color:#1e3a8a} .print-only{display:none} @media print { header.appbar, .footer-nav, .toolbar, .intro, .controls, .toggle, .error { display:none !important; } .print-only{display:block} body{background:#fff} .card{box-shadow:none;border-color:#ddd;page-break-inside:avoid} .bars{page-break-inside:avoid} @page{size:A4;margin:14mm} }
Le Labo des CIP — Test RIASEC
Version pédagogique

Test RIASEC (Holland) — Bienvenue 👋

Comment ça marche

Le test mesure vos affinités avec 6 types : Réaliste, Investigateur, Artistique, Social, Entreprenant, Conventionnel.

  • Partie 1 — Activités : cochez ce que vous aimez.
  • Partie 2 — Professions : cochez les métiers qui vous plairaient.
  • Partie 3 — Aptitudes : notez 1 (faible) à 3 (fort) — obligatoire.
  • Partie 4 — Personnalité : cochez ce qui vous décrit.

👉 Le **code RIASEC** (3 lettres) et les **listes de métiers correspondants** apparaîtront à la fin.

Paramètres

Aucune donnée n’est envoyée en ligne. Tout reste sur votre appareil.

/* ========================= Données du questionnaire (extraites du PDF fourni) ========================= */ const DATA = { // PARTIE 1 — ACTIVITÉS (15 items par lettre) activities: { R: [ "Planter, entretenir des arbres, des arbustes, des fleurs ou cultiver le sol.", "Effectuer des réparations électriques ou électroniques.", "Faire de la couture.", "Réparer des automobiles.", "Fabriquer des objets avec du bois.", "Conduire un camion ou un tracteur.", "Faire des déménagements.", "Entretenir ou réparer de la plomberie ou des systèmes de ventilation.", "Travailler avec des animaux et en prendre soin.", "Travailler à l’extérieur (exposé à la pluie, au soleil, au froid).", "Travailler avec de la machinerie.", "Préparer des repas, des banquets.", "Travailler avec des outils tels que tournevis, ciseaux, pince, etc.", "Effectuer des travaux de peinture.", "Suivre un cours de dessin mécanique." ], I: [ "Lire des revues scientifiques ou spécialisées.", "Faire des expériences sur le comportement des animaux.", "Effectuer des analyses en laboratoire.", "Suivre des cours de sciences.", "Établir un diagnostic de maladie chez des patients.", "Expérimenter de nouvelles cultures végétales.", "Créer une nouvelle source d’énergie.", "Concevoir un barrage électrique, un pont, une autoroute, etc.", "Résoudre des problèmes mathématiques.", "Faire des recherches scientifiques pour satisfaire ma curiosité.", "Produire un rapport sur l’évolution économique d’une région.", "Concevoir un plan de reboisement.", "Planifier des soins ou des traitements à donner à des patients.", "Faire des recherches sur les civilisations anciennes.", "Faire de la programmation informatique." ], A: [ "Écrire des romans, des articles de journaux.", "Dessiner des meubles, des plans de maison, des décors, etc.", "Interpréter ou mettre en scène une pièce de théâtre.", "Jouer dans un orchestre.", "Créer des pièces d’artisanat.", "Imaginer de nouvelles façons de faire les choses.", "Embellir l’environnement.", "Créer une nouvelle coupe de cheveux ou de nouveau vêtement.", "Faire de la photographie publicitaire ou artistique.", "Concevoir et réaliser des arrangements de fleurs.", "Imaginer une bande dessinée.", "Peindre des tableaux pour une exposition.", "Décorer des vitrines de magasins.", "Écrire des critiques de pièces de théâtre, de films, de livres, etc.", "Apprendre des langues." ], S: [ "S’engager dans des organismes sociaux ou communautaires.", "Rencontrer des gens pour les aider à résoudre leurs problèmes personnels.", "Travailler dans une garderie d’enfants.", "Enseigner aux enfants, aux adolescents, aux adultes.", "Aider les gens à prendre conscience de leurs possibilités.", "Animer un groupe.", "Agir comme hôte / hôtesse lors d’un congrès.", "Tenir un kiosque d’information.", "Offrir un service d’aide téléphonique.", "Consulter les gens sur leurs besoins (sondage, enquête, etc.).", "S’occuper des personnes handicapées physiquement.", "Soigner un malade.", "Aider les délinquants à se réhabiliter.", "Organiser des loisirs.", "Échanger des idées avec d’autres personnes." ], E: [ "Vendre un produit ou une idée.", "Mettre sur pied son propre commerce.", "Donner des conférences.", "Acheter pour le compte d’un grand magasin.", "Marchander.", "Diriger du personnel.", "Défendre une cause.", "Faire de la sélection de candidats.", "S’engager à fond dans des activités sociales au travail ou dans son quartier.", "Diriger une entreprise financière.", "Lancer un nouveau produit.", "Fonder une association de protection de l’environnement, ou une activité de récupération.", "Gérer un projet spécial.", "Faire de la politique (municipal, scolaire, provincial).", "Lancer une campagne de publicité." ], C: [ "Établir des comptes-rendus des dépenses.", "Préparer des procès-verbaux de réunions.", "Tenir une caisse dans un établissement commercial ou financier.", "Faire un inventaire et passer des commandes.", "Manipuler un appareil à traitement de textes.", "Maintenir un système de classement (archives, bibliothèque, bureau, etc.)", "Garder mon espace de travail en ordre.", "Faire des opérations mathématiques pour préparer des rapports.", "S’adonner à des activités régulières.", "Classer des lettres, des rapports, des dossiers.", "Recevoir et faire des appels téléphoniques.", "Vérifier des rapports financiers.", "Faire fonctionner des machines de bureau.", "Effectuer des tâches clairement définies.", "Dactylographier ou réviser des lettres ou des rapports." ] }, // PARTIE 2 — PROFESSIONS professions: { R: [ "Mécanicien/mécanicienne d’auto","Éleveur/éleveuse de bétail","Technicien/technicienne dentaire", "Travailleur/travailleuse de la construction (menuiserie)","Couturier/couturière en usine", "Technicien/technicienne en aménagement de la faune","Horloger/horlogère", "Technicien/technicienne du meuble et du bois ouvré (ébéniste)","Plombier/plombière", "Technicien/technicienne en mécanique du bâtiment","Conducteur/conductrice d’autobus", "Technicien/technicienne en entretien d’aéronefs","Réparateur/réparatrice de télévision", "Ingénieur/ingénieure civil","Cuisinier/cuisinière" ], I: [ "Ingénieur/ingénieure en chimie/physique","Technicien/technicienne en laboratoire médical", "Chercheur/chercheuse scientifique","Technicien/technicienne en radiologie", "Biologiste","Technicien/technicienne en informatique","Médecin ou vétérinaire", "Technicien/technicienne en transformation des produits forestiers","Météorologiste", "Astronome","Technicien/technicienne en dessin conception mécanique","Économiste", "Technicien/technicienne en procédés métallurgiques","Botaniste", "Technicien/technicienne en chimie analytique" ], A: [ "Musicien/musicienne","Écrivain/écrivaine","Fleuriste","Journaliste", "Décorateur/décoratrice d’intérieur","Compositeur/compositrice","Mannequin","Photographe", "Graphiste","Directeur de publicité","Architecte","Interprète", "Chanteur/chanteuse","Comédien/comédienne","Professeur de dessin" ], S: [ "Infirmier/infirmière auxiliaire","Agent/agente à l’aide sociale","Travailleur/travailleuse sociale", "Barman/barmaid","Professeur à l’élémentaire","Technicien/technicienne en loisirs", "Technicien/technicienne en garderie d’enfants","Orthophoniste/orthopédagogue", "Esthéticien/esthéticienne","Technicien/technicienne policier/policière", "Médecin généraliste","Directeur/directrice du personnel","Bibliothécaire", "Technicien/technicienne en hygiène dentaire","Technicien/technicienne en réadaptation physique" ], E: [ "Agent/agente de publicité (marketing)","Avocat/avocate","Agent/agente de bord", "Chef de rayons de supermarché","Commis-vendeur/vendeuse","Directeur/directrice d’une entreprise", "Politicien/politicienne","Directeur/directrice des ventes","Vendeur/vendeuse d’assurances", "Gérant/gérante d’hôtel","Technicien/technicienne en tourisme","Propriétaire d’un commerce", "Courtier/courtière en immeubles","Acheteur/acheteuse","Agent/agente de voyage" ], C: [ "Commis-comptable","Technicien/technicienne en finance (comptabilité)","Opérateur/opératrice en informatique", "Secrétaire de service juridique/médical","Archiviste médical","Commis aux renseignements", "Bibliotechnicien/bibliotechnicienne","Expert/experte en impôt","Caissier/caissière de banque", "Réceptionniste","Commis au service de la paie","Gérant/gérante du service de crédits", "Commis de bureau","Sténodactylo / opérateur(-trice) de saisie","Technicien/technicienne judiciaire (greffes)" ] }, // PARTIE 3 — APTITUDES (10 items par lettre, notation 1/2/3) aptitudes: { R: [ "Ma capacité à soulever des poids lourds est…", "Utiliser des outils, objets, machines avec précision…", "Conduire un gros véhicule (camion, autobus)…", "Lire des plans…", "Coordination œil-main pour manipuler…", "Comprendre le fonctionnement mécanique/électrique de base…", "Rapidité de mes réflexes…", "Faire des réparations…", "M’occuper d’élevage d’animaux…", "Installer/manipuler divers outils, machines ou appareils…" ], I: [ "Aptitudes en mathématiques…","Capacités en sciences (bio/physique/chimie)…", "Me concentrer sur une tâche abstraite…","Capacité d’analyse…","Capacité de synthèse…", "Rédiger clairement un texte…","Comprendre rapidement des directives…", "Apprendre de nouveaux sujets facilement…","Résoudre des problèmes abstraits…", "Faire des travaux de laboratoire…" ], A: [ "Se représenter la forme d’objets en 2D/3D…","Apprendre des langues (dont langue maternelle)…", "Aptitude en arts plastiques…","Aptitude arts de la scène (théâtre/danse/musique)…", "Inventer, créer, concevoir…","Accepter la critique…","Travailler par moi-même…", "Exprimer concrètement mes idées créatrices…","Tolérer l’insécurité…", "Observer de légères différences de forme ou de teinte…" ], S: [ "Travailler en équipe…","Sens de l’organisation…","Intuition (prévoir/deviner)…", "Animer des interactions de groupe…","Maintenir des relations suivies…", "Empathie (touché par les émotions des autres tout en restant objectif)…", "Réagir correctement selon les situations (équilibre émotionnel)…", "Aider, comprendre, écouter…","Expliquer les choses clairement…", "Communiquer avec les autres…" ], E: [ "M’exprimer en public…","Vendre…","Sens des affaires…","Diriger/mener les autres…", "Prendre une décision seul…","Me faire valoir en société…","Défendre une cause…", "Être le premier à proposer/faire…","Persuader les gens…", "Rester enthousiaste/énergique même en situation difficile…" ], C: [ "Me conformer aux règles établies…","Travailler avec précision…", "Disposer les choses selon leur place…","Aptitude en français…","Travailler avec les chiffres…", "Observer les détails…","M’adapter à un travail routinier…", "Tenir des dossiers et registres à jour…","Comprendre et exécuter des instructions…", "Comprendre les structures administratives…" ] }, // PARTIE 4 — PERSONNALITÉ (10 items par lettre) personality: { R: [ "Je suis conformiste, je me plie facilement aux règlements.", "J’évite de me faire remarquer.", "J’aime les choses matérielles, concrètes.", "Je me montre persistant(e).", "Esprit d’équipe pratique, je préfère agir.", "Naturel réservé : il faut me demander mon opinion.", "Je ménage/prends soin de mes biens.", "Je suis stable dans mes opinions et amitiés.", "Je me présente toujours au naturel.", "Je suis franc(he) et sincère." ], I: [ "J’analyse idées et événements.", "J’ai l’esprit critique.", "Je suis très curieux(se).", "Je tiens à mon indépendance.", "On me voit comme intellectuel(le) plutôt qu’émotif/ve.", "J’ai l’esprit inventif (solutions originales).", "Je suis méthodique et rationnel(le).", "J’aime la précision.", "Je reste réservé(e) dans l’expression.", "Avant une décision, je réunis un maximum d’information." ], A: [ "Mes amis me considèrent compliqué(e).", "Je manque souvent d’ordre.", "Je fais preuve d’originalité et d’imagination.", "Je suis d’un caractère impulsif.", "Mes émotions sont intenses.", "Je tends à idéaliser et viser la perfection.", "Je pense/agis souvent de façon non conformiste.", "J’exprime mes sentiments via arts/musique/poésie, etc.", "Les lendemains ne m’inquiètent pas.", "J’ai besoin de liberté d’action." ], S: [ "Je préfère régler les problèmes par la discussion et l’entente.", "Je sais me montrer souple, conciliant(e).", "On me dit bienveillant(e) et compréhensif/ve.", "Les gens peuvent compter sur ma coopération.", "On me dit sociable et sympathique.", "Je suis serviable.", "J’accepte et assume des responsabilités.", "On me considère généreux(se).", "Je suis perspicace/clairvoyant(e).", "Je montre de la délicatesse dans l’action et l’expression." ], E: [ "L’ambition ne m’effraie pas.", "Je suis optimiste.", "Je suis sociable et populaire.", "Je défends mes opinions.", "Il m’arrive d’être autoritaire.", "L’aventure m’attire.", "Je suis sûr(e) de moi.", "Mes impulsions guident souvent ma conduite.", "J’aime être responsable d’activités.", "En situation tendue, je prends l’initiative nécessaire." ], C: [ "Je suis maître de moi, d’un calme exemplaire.", "J’obéis facilement aux règlements et aux ordres.", "Je suis persistant(e) et consciencieux(se).", "Je m’efforce d’être compétent(e).", "L’esprit concret et pratique me guide.", "J’agis méthodiquement.", "Je travaille avec soin.", "J’aime exécuter des tâches semblables d’un jour à l’autre.", "Je suis timide et garde mes sentiments pour moi.", "J’aime recevoir des instructions bien claires." ] }, interpretations: { R: "Pragmatique, concret, aime le terrain, les outils et le “faire”. Environnement structuré, activités pratiques.", I: "Curieux, analytique, aime comprendre et résoudre des problèmes abstraits. Monde des idées et des sciences.", A: "Créatif, intuitif, expressif. Besoin de liberté, peu de routine. S’épanouit dans l’originalité.", S: "Orienté vers l’aide, l’éducation, le soin. Coopératif, communicant, empathique.", E: "Influent, ambitieux, motivé par le challenge. Aime décider, convaincre, organiser.", C: "Rigoureux, méthodique, précis. Aime l’ordre, les procédures, la fiabilité." } }; // Pour les métiers à l’affichage final, on prendra ceux de DATA.professions[lettre] /* ========================= État et utilitaires ========================= */ const LETTERS = ["R","I","A","S","E","C"]; const STATE = { step: 0, order: { // ordre aléatoire des blocs par partie activities: [], professions: [], aptitudes: [], personality: [] }, answers: { activities: {R:new Set(),I:new Set(),A:new Set(),S:new Set(),E:new Set(),C:new Set()}, professions:{R:new Set(),I:new Set(),A:new Set(),S:new Set(),E:new Set(),C:new Set()}, aptitudes: {R:Array(10).fill(0),I:Array(10).fill(0),A:Array(10).fill(0),S:Array(10).fill(0),E:Array(10).fill(0),C:Array(10).fill(0)}, personality:{R:new Set(),I:new Set(),A:new Set(),S:new Set(),E:new Set(),C:new Set()} }, user:{name:"",email:""}, shuffleItems:false, consentSave:true }; const $ = sel => document.querySelector(sel); function shuffle(a){ return a.map(v=>[Math.random(),v]).sort((x,y)=>x[0]-y[0]).map(x=>x[1]); } function saveLocal(){ if(!STATE.consentSave) return; localStorage.setItem("riasec_state_v2", JSON.stringify({ step:STATE.step, order:STATE.order, answers:{ activities:Object.fromEntries(Object.entries(STATE.answers.activities).map(([k,v])=>[k,[...v]])), professions:Object.fromEntries(Object.entries(STATE.answers.professions).map(([k,v])=>[k,[...v]])), aptitudes:STATE.answers.aptitudes, personality:Object.fromEntries(Object.entries(STATE.answers.personality).map(([k,v])=>[k,[...v]])) }, user:STATE.user, shuffleItems:STATE.shuffleItems, consentSave:STATE.consentSave })); } function loadLocal(){ const raw = localStorage.getItem("riasec_state_v2"); if(!raw) return false; try{ const s = JSON.parse(raw); STATE.step = s.step||0; STATE.order = s.order||STATE.order; // sets STATE.answers.activities = Object.fromEntries(Object.entries(s.answers.activities).map(([k,arr])=>[k,new Set(arr)])); STATE.answers.professions= Object.fromEntries(Object.entries(s.answers.professions).map(([k,arr])=>[k,new Set(arr)])); STATE.answers.aptitudes = s.answers.aptitudes||STATE.answers.aptitudes; STATE.answers.personality= Object.fromEntries(Object.entries(s.answers.personality).map(([k,arr])=>[k,new Set(arr)])); STATE.user = s.user||STATE.user; STATE.shuffleItems = !!s.shuffleItems; STATE.consentSave = s.consentSave!==false; $("#shuffleItems").checked = STATE.shuffleItems; $("#consentSave").checked = STATE.consentSave; $("#userName").value = STATE.user.name||""; $("#userEmail").value = STATE.user.email||""; return true; }catch(e){ console.warn(e); return false; } } function exportJSON(){ const blob = new Blob([localStorage.getItem("riasec_state_v2")||"{}"],{type:"application/json"}); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = "riasec-state.json"; a.click(); URL.revokeObjectURL(a.href); } function importJSON(){ const inp = document.createElement("input"); inp.type="file"; inp.accept="application/json"; inp.onchange = () => { const f = inp.files[0]; if(!f) return; const reader = new FileReader(); reader.onload = () => { try{ localStorage.setItem("riasec_state_v2", reader.result); location.reload(); }catch(e){ alert("JSON invalide"); } }; reader.readAsText(f); }; inp.click(); } function resetAll(hard=false){ localStorage.removeItem("riasec_state_v2"); if(hard){ location.reload(); return; } // soft reset STATE.step=0; STATE.order={activities:[],professions:[],aptitudes:[],personality:[]}; for(const p of ["activities","professions","personality"]) for(const L of LETTERS) STATE.answers[p][L]=new Set(); for(const L of LETTERS) STATE.answers.aptitudes[L]=Array(10).fill(0); STATE.user={name:"",email:""}; STATE.shuffleItems=$("#shuffleItems").checked; STATE.consentSave=$("#consentSave").checked; $("#userName").value=""; $("#userEmail").value=""; goStep(0); } /* ========================= Rendu des étapes ========================= */ function partLayout(title,key,itemsByLetter,isAptitudes=false){ const letters = STATE.order[key]; const toggle = STATE.shuffleItems; const wrap = document.createElement("div"); wrap.className="card"; wrap.innerHTML = `

${title}

${isAptitudes? "Notez chaque item de 1 (faible) à 3 (fort). Toutes les notes sont obligatoires pour poursuivre." : "Cochez librement ce qui vous correspond."}

`; letters.forEach(L=>{ const bloc = document.createElement("div"); bloc.className="bloc"; bloc.innerHTML = `

${L} — ${legend(L)}

`; const container = bloc.querySelector(".items"); let items = itemsByLetter[L].map((txt,idx)=>({txt,idx})); if(toggle) items = shuffle(items); items.forEach(({txt,idx})=>{ const row = document.createElement("div"); row.className="item"; if(isAptitudes){ const current = STATE.answers.aptitudes[L][idx]||0; row.innerHTML = `
${[1,2,3].map(v=>` `).join("")}
`; row.addEventListener("change", e=>{ const val = parseInt(e.target.value||"0",10); const origIndex = idx; // idx correspond à l’index réel (donné dans DATA) STATE.answers.aptitudes[L][origIndex]=val; saveLocal(); updateProgress(); }); } else { const setRef = STATE.answers[key][L]; const checked = setRef.has(idx); const id = `${key}_${L}_${idx}`; row.innerHTML = ` `; row.querySelector("input").addEventListener("change", e=>{ if(e.target.checked) setRef.add(idx); else setRef.delete(idx); saveLocal(); updateProgress(); }); } container.appendChild(row); }); wrap.appendChild(bloc); }); return wrap; } function legend(L){ return ({ R:"Réaliste", I:"Investigateur", A:"Artistique", S:"Social", E:"Entreprenant", C:"Conventionnel" })[L] || L; } function renderStep1(){ const host = $("#step1"); host.innerHTML=""; host.appendChild(partLayout("Partie 1 — Activités","activities",DATA.activities,false)); host.appendChild(navFooter(1)); } function renderStep2(){ const host = $("#step2"); host.innerHTML=""; host.appendChild(partLayout("Partie 2 — Professions","professions",DATA.professions,false)); host.appendChild(navFooter(2)); } function renderStep3(){ const host = $("#step3"); host.innerHTML=""; host.appendChild(partLayout("Partie 3 — Aptitudes (obligatoire)","aptitudes",DATA.aptitudes,true)); host.appendChild(navFooter(3)); } function renderStep4(){ const host = $("#step4"); host.innerHTML=""; host.appendChild(partLayout("Partie 4 — Personnalité","personality",DATA.personality,false)); host.appendChild(navFooter(4,true)); } function navFooter(step,isLast=false){ const f = document.createElement("div"); f.className="footer-nav"; const prev = document.createElement("button"); prev.className="btn btn-ghost"; prev.textContent="← Étape précédente"; prev.onclick=()=>goStep(step-1); const next = document.createElement("button"); next.className="btn btn-accent"; next.textContent=isLast?"Voir le récapitulatif →":"Étape suivante →"; next.onclick=()=>proceed(step,isLast); f.append(prev,next); const err = document.createElement("div"); err.className="error hidden"; err.id=`err_${step}`; err.textContent="Merci de compléter toutes les notes d’aptitudes (1 à 3) avant de continuer."; const wrap = document.createElement("div"); wrap.append(f,err); return wrap; } function proceed(step,isLast){ // Validation : aptitudes complètes if(step===3){ for(const L of LETTERS){ if(STATE.answers.aptitudes[L].some(v=>!v)){ // 0 = non noté $(`#err_${step}`).classList.remove("hidden"); return; } } } $(`#err_${step}`)?.classList.add("hidden"); if(isLast){ showResults(); goStep("results"); } else goStep(step+1); } /* ========================= Résultats ========================= */ function computeScores(){ const s = {R:0,I:0,A:0,S:0,E:0,C:0}; // Activités / Professions / Personnalité : nombre de coches for(const part of ["activities","professions","personality"]){ for(const L of LETTERS) s[L]+=STATE.answers[part][L].size; } // Aptitudes : somme des notes (1..3) for(const L of LETTERS) s[L]+=STATE.answers.aptitudes[L].reduce((a,b)=>a+(b||0),0); return s; } function top3(scores){ return Object.entries(scores) .sort((a,b)=>b[1]-a[1]) .slice(0,3).map(([k])=>k).join(""); } function jobsFor(letter,limit=6){ const list = DATA.professions[letter]||[]; return list.slice(0,limit); } function profileCard(letter){ const wrap = document.createElement("div"); wrap.className="profile"; const emoji = ({R:"🛠️",I:"🔬",A:"🎨",S:"🤝",E:"🚀",C:"🗂️"})[letter]||"✅"; const title = `${letter} — ${legend(letter)}`; const jobs = jobsFor(letter,6).map(j=>`${j}`).join(""); wrap.innerHTML = `
${emoji}

${title}

${DATA.interpretations[letter]}

${jobs}
`; return wrap; } function showResults(){ const scores = computeScores(); const code = top3(scores); // header infos const dateStr = new Date().toLocaleDateString("fr-FR"); $("#resDate").textContent = dateStr; $("#resUser").textContent = (STATE.user.name||"—"); $("#printDate").textContent = dateStr; $("#printCode").textContent = code || "—"; $("#resCode").textContent = code || "—"; // bars const bars = $("#bars"); bars.innerHTML=""; LETTERS.forEach(L=>{ const outer = document.createElement("div"); outer.className="bar"; const height = Math.min(100, scores[L]*4); // échelle simple outer.innerHTML = `${L}`; bars.appendChild(outer); }); // profiles (pour chaque lettre du code) const prof = $("#profiles"); prof.innerHTML=""; code.split("").forEach(L=>prof.appendChild(profileCard(L))); saveLocal(); } /* ========================= Progression & navigation ========================= */ function updateProgress(){ // calcul “approximatif” de complétion const totalApt = 60; // 6x10 const filledApt = LETTERS.reduce((acc,L)=>acc+STATE.answers.aptitudes[L].filter(Boolean).length,0); // nombre de coches (3 parties x 6x15) const totalChecks = 3*6*15; // 270 const checked = ["activities","professions","personality"].reduce((acc,part)=>acc+LETTERS.reduce((a,L)=>a+STATE.answers[part][L].size,0),0); const pct = Math.round( (filledApt/totalApt*0.6 + checked/totalChecks*0.4) * 100 ); $("#progressBar").style.width = Math.min(100, pct)+"%"; $("#progressPct").textContent = Math.min(100, pct)+"%"; } function goStep(n){ // cacher tout ["step0","controls","step1","step2","step3","step4","results"].forEach(id=>$("#"+id).classList.add("hidden")); if(n===0){ $("#step0").classList.remove("hidden"); STATE.step=0; saveLocal(); return; } $("#controls").classList.remove("hidden"); if(n===1){ $("#stepLabel").textContent="Partie 1 — Activités"; renderStep1(); $("#step1").classList.remove("hidden"); } else if(n===2){ $("#stepLabel").textContent="Partie 2 — Professions"; renderStep2(); $("#step2").classList.remove("hidden"); } else if(n===3){ $("#stepLabel").textContent="Partie 3 — Aptitudes (obligatoire)"; renderStep3(); $("#step3").classList.remove("hidden"); } else if(n===4){ $("#stepLabel").textContent="Partie 4 — Personnalité"; renderStep4(); $("#step4").classList.remove("hidden"); } else if(n==="results"){ $("#stepLabel").textContent="Récapitulatif & Profil"; $("#results").classList.remove("hidden"); } STATE.step=n; saveLocal(); updateProgress(); } /* ========================= Résumé à copier & PDF ========================= */ function buildSummaryText(){ const scores = computeScores(); const code = top3(scores)||"—"; const dateStr = new Date().toLocaleDateString("fr-FR"); function topLine(letter){ const jobs = jobsFor(letter,6).join("; "); return `${letter} — ${legend(letter)} : ${DATA.interpretations[letter]} | Métiers : ${jobs}`; } return [ `Le Labo des CIP — Test RIASEC`, `Date : ${dateStr} | Nom : ${STATE.user.name||"—"} | Email : ${STATE.user.email||"—"}`, `Code RIASEC : ${code}`, topLine(code[0]||"R"), topLine(code[1]||"I"), topLine(code[2]||"A"), `Scores : R=${scores.R} | I=${scores.I} | A=${scores.A} | S=${scores.S} | E=${scores.E} | C=${scores.C}` ].join("\n"); } async function copySummary(){ const btn = $("#btnCopy"); const text = buildSummaryText(); try{ await navigator.clipboard.writeText(text); btn.textContent = "Copié ✔"; }catch(e){ const ta = document.createElement("textarea"); ta.value = text; document.body.appendChild(ta); ta.select(); try{ document.execCommand("copy"); btn.textContent="Copié ✔"; } catch(e2){ alert("Impossible de copier automatiquement. Sélectionnez et copiez manuellement."); } finally{ document.body.removeChild(ta); } } setTimeout(()=>btn.textContent="Copier le résumé",1600); } function generatePDF(){ // s’assure que la section résultats est visible if(STATE.step!=="results"){ showResults(); goStep("results"); } // lance la boîte de dialogue d’impression (PDF) window.print(); } /* ========================= Initialisation & évènements ========================= */ function initOrder(){ // ordre aléatoire des 6 lettres, par partie (stable pour la session) for(const part of ["activities","professions","aptitudes","personality"]){ STATE.order[part] = shuffle(LETTERS.slice()); } } function bind(){ $("#btnStart").onclick = ()=>{ STATE.shuffleItems = $("#shuffleItems").checked; STATE.consentSave = $("#consentSave").checked; initOrder(); saveLocal(); goStep(1); }; $("#btnExport").onclick = exportJSON; $("#btnImport").onclick = importJSON; $("#btnReset").onclick = ()=>resetAll(true); $("#btnPDF").onclick = generatePDF; $("#btnCopy").onclick = copySummary; $("#btnRestart").onclick = ()=>resetAll(true); $("#userName").oninput = e=>{ STATE.user.name = e.target.value||""; saveLocal(); }; $("#userEmail").oninput = e=>{ STATE.user.email = e.target.value||""; saveLocal(); }; } document.addEventListener("DOMContentLoaded", ()=>{ bind(); if(!loadLocal()){ // première visite // rien } else { // si l’état sauvegardé avait déjà un ordre, ok, sinon on l’initialise if(!STATE.order.activities?.length) initOrder(); // revenir là où on en était goStep(STATE.step||0); } updateProgress(); });

Topics and keywords

Themes: KitLab, Labonautes ad, outils, Outils pour accompagner

Keywords: outils, OutilsCIP

License & attribution

License: CC BY-ND 4.0.

Attribution required: yes.

Manifest: https://lelabodescip.fr/llm-endpoints-manifest.json

LLM Endpoints plugin version 1.1.2.