{"id":945,"date":"2026-05-19T12:05:14","date_gmt":"2026-05-19T10:05:14","guid":{"rendered":"https:\/\/www.site-e-work.fr\/shop\/?p=945"},"modified":"2026-05-19T16:32:12","modified_gmt":"2026-05-19T14:32:12","slug":"quiz-excel","status":"publish","type":"post","link":"https:\/\/www.site-e-work.fr\/shop\/2026\/05\/19\/quiz-excel\/","title":{"rendered":"Quiz Excel"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"945\" class=\"elementor elementor-945\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fa5a23e e-flex e-con-boxed e-con e-parent\" data-id=\"fa5a23e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a319f3f elementor-widget elementor-widget-html\" data-id=\"a319f3f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Syne:wght@400;600;700;800&family=Inter:wght@400;500&family=JetBrains+Mono:wght@500&display=swap');\r\n\r\n#exqz-root *, #exqz-root *::before, #exqz-root *::after {\r\n  box-sizing: border-box; margin: 0; padding: 0; font-family: inherit;\r\n}\r\n\r\n#exqz-root {\r\n  --exqz-bg:      #0A0C0E;\r\n  --exqz-bg2:     #111416;\r\n  --exqz-bg3:     #181C1F;\r\n  --exqz-surface: #1E2326;\r\n  --exqz-sur2:    #252B2F;\r\n  --exqz-text:    #EEE9E0;\r\n  --exqz-mid:     #8A9099;\r\n  --exqz-dim:     #505860;\r\n  --exqz-border:  #63A0E01F;\r\n  --exqz-bord2:   #63B4E040;\r\n  --exqz-green:   #4ade80;\r\n  --exqz-grn-d:   #4ade8020;\r\n  --exqz-grn-g:   #4ade8040;\r\n  --exqz-amber:   #f59e0b;\r\n  --exqz-amb-d:   #f59e0b20;\r\n  --exqz-amb-g:   #f59e0b40;\r\n  --exqz-red:     #f87171;\r\n  --exqz-red-d:   #f8717120;\r\n  --exqz-red-g:   #f8717140;\r\n  --exqz-accent:  #63AAE0;\r\n  --exqz-acc-d:   #63A0E01F;\r\n  --exqz-acc-g:   #63B4E040;\r\n  \/* Couleur active du niveau \u2014 modifi\u00e9e via classe JS *\/\r\n  --exqz-lvl:     #4ade80;\r\n  --exqz-lvl-d:   #4ade8020;\r\n  --exqz-lvl-g:   #4ade8040;\r\n  --exqz-ff-d:    'Syne', sans-serif;\r\n  --exqz-ff-b:    'Inter', sans-serif;\r\n  --exqz-ff-m:    'JetBrains Mono', monospace;\r\n\r\n  font-family: var(--exqz-ff-b);\r\n  background: var(--exqz-bg);\r\n  color: var(--exqz-text);\r\n  border-radius: 12px;\r\n  overflow: hidden;\r\n  width: 100%;\r\n  isolation: isolate;\r\n  line-height: 1.5;\r\n}\r\n\r\n\/* \u2500\u2500 Th\u00e8me par niveau \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n#exqz-root.exqz--lvl1 { --exqz-lvl:#4ade80; --exqz-lvl-d:#4ade8020; --exqz-lvl-g:#4ade8040; }\r\n#exqz-root.exqz--lvl2 { --exqz-lvl:#f59e0b; --exqz-lvl-d:#f59e0b20; --exqz-lvl-g:#f59e0b40; }\r\n#exqz-root.exqz--lvl3 { --exqz-lvl:#f87171; --exqz-lvl-d:#f8717120; --exqz-lvl-g:#f8717140; }\r\n\r\n\/* \u2500\u2500 TOPBAR \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n#exqz-root .exqz__topbar {\r\n  background: var(--exqz-bg2);\r\n  border-bottom: 1px solid var(--exqz-bord2);\r\n  display: flex; align-items: center;\r\n  padding: 0 1.5rem; gap: 1rem; height: 50px; flex-shrink: 0;\r\n}\r\n#exqz-root .exqz__logo {\r\n  font-family: var(--exqz-ff-d); font-size: 15px; font-weight: 700;\r\n  color: var(--exqz-accent); letter-spacing: .04em;\r\n}\r\n#exqz-root .exqz__topbar-sep { width:1px; height:20px; background:var(--exqz-bord2); flex-shrink:0; }\r\n#exqz-root .exqz__topbar-title {\r\n  font-family: var(--exqz-ff-d); font-size: 13px; font-weight: 500; color: var(--exqz-mid);\r\n}\r\n#exqz-root .exqz__topbar-right { margin-left: auto; }\r\n#exqz-root .exqz__topbar-pill {\r\n  font-family: var(--exqz-ff-d); font-size: 10px; font-weight: 700;\r\n  letter-spacing: .1em; text-transform: uppercase;\r\n  padding: 3px 10px; border-radius: 20px;\r\n  background: var(--exqz-lvl-d); color: var(--exqz-lvl);\r\n  border: 1px solid var(--exqz-lvl-g);\r\n  transition: all .3s;\r\n}\r\n\r\n\/* \u2500\u2500 TABS NIVEAUX \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n#exqz-root .exqz__tabs {\r\n  display: flex; background: var(--exqz-bg2);\r\n  border-bottom: 1px solid var(--exqz-bord2);\r\n}\r\n#exqz-root .exqz__tab {\r\n  flex: 1; padding: .85rem .5rem;\r\n  font-family: var(--exqz-ff-d); font-size: 12px; font-weight: 600;\r\n  letter-spacing: .04em; text-align: center;\r\n  background: transparent; border: none; border-bottom: 2px solid transparent;\r\n  color: var(--exqz-dim); cursor: pointer;\r\n  transition: all .2s; appearance: none; outline: none;\r\n}\r\n#exqz-root .exqz__tab:hover { color: var(--exqz-mid); background: var(--exqz-surface); }\r\n#exqz-root .exqz__tab.exqz--t1.exqz--active { color: var(--exqz-green); border-bottom-color: var(--exqz-green); background: var(--exqz-grn-d); }\r\n#exqz-root .exqz__tab.exqz--t2.exqz--active { color: var(--exqz-amber); border-bottom-color: var(--exqz-amber); background: var(--exqz-amb-d); }\r\n#exqz-root .exqz__tab.exqz--t3.exqz--active { color: var(--exqz-red);   border-bottom-color: var(--exqz-red);   background: var(--exqz-red-d); }\r\n#exqz-root .exqz__tab-icon { font-size: 16px; display: block; margin-bottom: 2px; }\r\n#exqz-root .exqz__tab-lbl  { display: block; }\r\n#exqz-root .exqz__tab-sub  { display: block; font-size: 10px; font-weight: 400; color: var(--exqz-dim); margin-top: 1px; }\r\n\r\n\/* \u2500\u2500 PROGRESS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n#exqz-root .exqz__prog-track { height: 3px; background: var(--exqz-surface); flex-shrink: 0; position:relative; }\r\n#exqz-root .exqz__prog-fill  {\r\n  height: 3px; background: var(--exqz-lvl);\r\n  width: 0; transition: width .4s cubic-bezier(.4,0,.2,1);\r\n}\r\n\r\n\/* \u2500\u2500 ZONE QUIZ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n#exqz-root .exqz__quiz-area { padding: 2rem 2.5rem; max-width: 680px; margin: 0 auto; }\r\n\r\n\/* Meta ligne *\/\r\n#exqz-root .exqz__meta {\r\n  display: flex; justify-content: space-between; align-items: center;\r\n  margin-bottom: 1.75rem;\r\n}\r\n#exqz-root .exqz__qnum {\r\n  font-family: var(--exqz-ff-d); font-size: 11px; font-weight: 700;\r\n  text-transform: uppercase; letter-spacing: .1em; color: var(--exqz-lvl);\r\n}\r\n#exqz-root .exqz__score-badge {\r\n  font-family: var(--exqz-ff-d); font-size: 12px; font-weight: 600;\r\n  color: var(--exqz-mid); padding: 3px 12px; border-radius: 20px;\r\n  background: var(--exqz-surface); border: 1px solid var(--exqz-bord2);\r\n}\r\n#exqz-root .exqz__score-badge span { color: var(--exqz-lvl); }\r\n\r\n\/* Question *\/\r\n#exqz-root .exqz__qcard {\r\n  background: var(--exqz-bg3); border: 1px solid var(--exqz-bord2);\r\n  border-radius: 12px; padding: 1.5rem 1.75rem; margin-bottom: 1.5rem;\r\n}\r\n#exqz-root .exqz__qtext {\r\n  font-size: 15px; color: var(--exqz-text); line-height: 1.75; font-weight: 500;\r\n}\r\n#exqz-root .exqz__qtext code {\r\n  font-family: var(--exqz-ff-m); font-size: 13px;\r\n  color: var(--exqz-green); background: var(--exqz-grn-d);\r\n  padding: 2px 7px; border-radius: 4px;\r\n}\r\n\r\n\/* Options *\/\r\n#exqz-root .exqz__opts { display: flex; flex-direction: column; gap: .65rem; margin-bottom: 1.25rem; }\r\n#exqz-root .exqz__opt {\r\n  display: flex; align-items: center; gap: 1rem;\r\n  background: var(--exqz-surface); border: 1px solid var(--exqz-bord2);\r\n  border-radius: 10px; padding: .85rem 1.1rem;\r\n  color: var(--exqz-mid); font-size: 14px;\r\n  cursor: pointer; text-align: left; width: 100%;\r\n  transition: all .15s; appearance: none; outline: none;\r\n  font-family: var(--exqz-ff-b); font-weight: 400; line-height: 1.5;\r\n}\r\n#exqz-root .exqz__opt:hover:not(:disabled) {\r\n  color: var(--exqz-text); border-color: var(--exqz-lvl-g);\r\n  background: var(--exqz-lvl-d);\r\n}\r\n#exqz-root .exqz__opt:disabled { cursor: default; }\r\n#exqz-root .exqz__opt.exqz--correct {\r\n  background: var(--exqz-grn-d); border-color: var(--exqz-green);\r\n  color: var(--exqz-green);\r\n}\r\n#exqz-root .exqz__opt.exqz--wrong {\r\n  background: var(--exqz-red-d); border-color: var(--exqz-red);\r\n  color: var(--exqz-red);\r\n}\r\n#exqz-root .exqz__opt-key {\r\n  min-width: 28px; height: 28px; border-radius: 7px;\r\n  background: var(--exqz-bg3); border: 1px solid var(--exqz-bord2);\r\n  display: flex; align-items: center; justify-content: center;\r\n  font-family: var(--exqz-ff-d); font-size: 11px; font-weight: 700;\r\n  color: var(--exqz-dim); flex-shrink: 0; transition: all .15s;\r\n}\r\n#exqz-root .exqz__opt:hover:not(:disabled) .exqz__opt-key { color: var(--exqz-lvl); border-color: var(--exqz-lvl-g); }\r\n#exqz-root .exqz__opt.exqz--correct .exqz__opt-key { background: var(--exqz-green); border-color: var(--exqz-green); color: #0a0c0e; }\r\n#exqz-root .exqz__opt.exqz--wrong   .exqz__opt-key { background: var(--exqz-red);   border-color: var(--exqz-red);   color: #0a0c0e; }\r\n#exqz-root .exqz__opt-text { flex: 1; }\r\n#exqz-root .exqz__opt-text code {\r\n  font-family: var(--exqz-ff-m); font-size: 12px;\r\n  color: var(--exqz-green); background: var(--exqz-grn-d);\r\n  padding: 1px 5px; border-radius: 4px;\r\n}\r\n\r\n\/* Feedback *\/\r\n#exqz-root .exqz__feedback {\r\n  border-radius: 10px; padding: .9rem 1.15rem; margin-bottom: 1.25rem;\r\n  font-size: 13.5px; line-height: 1.65; display: none;\r\n}\r\n#exqz-root .exqz__feedback.exqz--show { display: block; }\r\n#exqz-root .exqz__feedback.exqz--ok {\r\n  background: var(--exqz-grn-d); border: 1px solid var(--exqz-grn-g); color: var(--exqz-green);\r\n}\r\n#exqz-root .exqz__feedback.exqz--ok strong { color: var(--exqz-green); }\r\n#exqz-root .exqz__feedback.exqz--bad {\r\n  background: var(--exqz-red-d); border: 1px solid var(--exqz-red-g); color: var(--exqz-mid);\r\n}\r\n#exqz-root .exqz__feedback.exqz--bad strong { color: var(--exqz-red); }\r\n#exqz-root .exqz__feedback code {\r\n  font-family: var(--exqz-ff-m); font-size: 12px;\r\n  color: var(--exqz-green); background: var(--exqz-grn-d);\r\n  padding: 1px 5px; border-radius: 4px;\r\n}\r\n\r\n\/* Bouton suivant *\/\r\n#exqz-root .exqz__next-btn {\r\n  display: none; width: 100%; justify-content: center; align-items: center; gap: .5rem;\r\n  background: var(--exqz-lvl-d); border: 1px solid var(--exqz-lvl-g);\r\n  border-radius: 10px; padding: .85rem 1.5rem;\r\n  color: var(--exqz-lvl); font-family: var(--exqz-ff-d);\r\n  font-size: 14px; font-weight: 600; cursor: pointer;\r\n  transition: all .2s; appearance: none; outline: none; letter-spacing: .02em;\r\n}\r\n#exqz-root .exqz__next-btn:hover { filter: brightness(1.15); }\r\n\r\n\/* \u2500\u2500 \u00c9CRAN SCORE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n#exqz-root .exqz__score-screen {\r\n  display: none; flex-direction: column; align-items: center;\r\n  justify-content: center; text-align: center;\r\n  padding: 3rem 2rem; min-height: 420px; gap: 1.25rem;\r\n}\r\n#exqz-root .exqz__score-ring {\r\n  width: 140px; height: 140px; border-radius: 50%;\r\n  border: 3px solid var(--exqz-lvl);\r\n  box-shadow: 0 0 30px var(--exqz-lvl-g);\r\n  display: flex; flex-direction: column; align-items: center; justify-content: center;\r\n  background: var(--exqz-lvl-d);\r\n}\r\n#exqz-root .exqz__score-num {\r\n  font-family: var(--exqz-ff-d); font-size: 36px; font-weight: 800;\r\n  color: var(--exqz-lvl); line-height: 1;\r\n}\r\n#exqz-root .exqz__score-denom {\r\n  font-family: var(--exqz-ff-d); font-size: 13px; color: var(--exqz-mid); margin-top: 2px;\r\n}\r\n#exqz-root .exqz__stars { font-size: 28px; letter-spacing: .1em; }\r\n#exqz-root .exqz__score-msg {\r\n  font-family: var(--exqz-ff-d); font-size: 18px; font-weight: 700;\r\n  color: var(--exqz-text); max-width: 360px; line-height: 1.35;\r\n}\r\n#exqz-root .exqz__score-sub {\r\n  font-size: 13px; color: var(--exqz-mid); max-width: 340px; line-height: 1.6;\r\n}\r\n#exqz-root .exqz__score-actions { display: flex; gap: .75rem; flex-wrap: wrap; justify-content: center; margin-top: .5rem; }\r\n#exqz-root .exqz__sc-btn {\r\n  display: flex; align-items: center; gap: .4rem;\r\n  border-radius: 9px; padding: .7rem 1.4rem; font-family: var(--exqz-ff-d);\r\n  font-size: 13px; font-weight: 600; cursor: pointer;\r\n  transition: all .15s; appearance: none; outline: none; letter-spacing: .02em;\r\n}\r\n#exqz-root .exqz__sc-btn.exqz--retry {\r\n  background: var(--exqz-surface); border: 1px solid var(--exqz-bord2); color: var(--exqz-mid);\r\n}\r\n#exqz-root .exqz__sc-btn.exqz--retry:hover { color: var(--exqz-text); border-color: var(--exqz-lvl-g); }\r\n#exqz-root .exqz__sc-btn.exqz--next-lvl {\r\n  background: var(--exqz-lvl-d); border: 1px solid var(--exqz-lvl-g); color: var(--exqz-lvl);\r\n}\r\n#exqz-root .exqz__sc-btn.exqz--next-lvl:hover { filter: brightness(1.2); }\r\n\r\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n@media (max-width:600px) {\r\n  #exqz-root .exqz__quiz-area { padding: 1.5rem 1rem; }\r\n  #exqz-root .exqz__tab-sub { display: none; }\r\n  #exqz-root .exqz__topbar-sep,\r\n  #exqz-root .exqz__topbar-title { display: none; }\r\n  #exqz-root .exqz__qtext { font-size: 14px; }\r\n  #exqz-root .exqz__opt { font-size: 13px; padding: .7rem .9rem; gap: .75rem; }\r\n}\r\n<\/style>\r\n\r\n<!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\r\n<div id=\"exqz-root\" class=\"exqz--lvl1\" role=\"main\" aria-label=\"Quiz Excel interactif\">\r\n\r\n  <!-- TOPBAR -->\r\n  <header class=\"exqz__topbar\">\r\n    <span class=\"exqz__logo\">\u25c8 NIVEAU BTS<\/span>\r\n    <span class=\"exqz__topbar-sep\"><\/span>\r\n    <span class=\"exqz__topbar-title\">Quiz Excel \u2014 Fonctions avanc\u00e9es<\/span>\r\n    <div class=\"exqz__topbar-right\">\r\n      <span class=\"exqz__topbar-pill\" id=\"exqz-pill\">\ud83d\udcd7 Niveau d\u00e9butant<\/span>\r\n    <\/div>\r\n  <\/header>\r\n\r\n  <!-- ONGLETS NIVEAUX -->\r\n  <div class=\"exqz__tabs\" role=\"tablist\">\r\n    <button class=\"exqz__tab exqz--t1 exqz--active\" id=\"exqz-tab-1\"\r\n            onclick=\"exqzSetLevel(1)\" role=\"tab\" aria-selected=\"true\">\r\n      <span class=\"exqz__tab-icon\">\ud83d\udcd7<\/span>\r\n      <span class=\"exqz__tab-lbl\">D\u00e9butant<\/span>\r\n      <span class=\"exqz__tab-sub\">20 questions<\/span>\r\n    <\/button>\r\n    <button class=\"exqz__tab exqz--t2\" id=\"exqz-tab-2\"\r\n            onclick=\"exqzSetLevel(2)\" role=\"tab\" aria-selected=\"false\">\r\n      <span class=\"exqz__tab-icon\">\ud83d\udcd9<\/span>\r\n      <span class=\"exqz__tab-lbl\">Interm\u00e9diaire<\/span>\r\n      <span class=\"exqz__tab-sub\">20 questions<\/span>\r\n    <\/button>\r\n    <button class=\"exqz__tab exqz--t3\" id=\"exqz-tab-3\"\r\n            onclick=\"exqzSetLevel(3)\" role=\"tab\" aria-selected=\"false\">\r\n      <span class=\"exqz__tab-icon\">\ud83d\udcd5<\/span>\r\n      <span class=\"exqz__tab-lbl\">Avanc\u00e9<\/span>\r\n      <span class=\"exqz__tab-sub\">20 questions<\/span>\r\n    <\/button>\r\n  <\/div>\r\n\r\n  <!-- BARRE DE PROGRESSION -->\r\n  <div class=\"exqz__prog-track\" role=\"progressbar\" aria-valuenow=\"0\" aria-valuemin=\"0\" aria-valuemax=\"20\">\r\n    <div class=\"exqz__prog-fill\" id=\"exqz-prog\"><\/div>\r\n  <\/div>\r\n\r\n  <!-- ZONE QUIZ -->\r\n  <div class=\"exqz__quiz-area\" id=\"exqz-quiz-area\">\r\n    <div class=\"exqz__meta\">\r\n      <span class=\"exqz__qnum\" id=\"exqz-qnum\">Question 1 \/ 20<\/span>\r\n      <span class=\"exqz__score-badge\">Score : <span id=\"exqz-score-val\">0<\/span> \/ <span id=\"exqz-score-of\">0<\/span><\/span>\r\n    <\/div>\r\n\r\n    <div class=\"exqz__qcard\">\r\n      <p class=\"exqz__qtext\" id=\"exqz-qtext\">Chargement\u2026<\/p>\r\n    <\/div>\r\n\r\n    <div class=\"exqz__opts\" id=\"exqz-opts\">\r\n      <button class=\"exqz__opt\" id=\"exqz-opt-0\" onclick=\"exqzAnswer(0)\">\r\n        <span class=\"exqz__opt-key\">A<\/span><span class=\"exqz__opt-text\" id=\"exqz-ot-0\"><\/span>\r\n      <\/button>\r\n      <button class=\"exqz__opt\" id=\"exqz-opt-1\" onclick=\"exqzAnswer(1)\">\r\n        <span class=\"exqz__opt-key\">B<\/span><span class=\"exqz__opt-text\" id=\"exqz-ot-1\"><\/span>\r\n      <\/button>\r\n      <button class=\"exqz__opt\" id=\"exqz-opt-2\" onclick=\"exqzAnswer(2)\">\r\n        <span class=\"exqz__opt-key\">C<\/span><span class=\"exqz__opt-text\" id=\"exqz-ot-2\"><\/span>\r\n      <\/button>\r\n      <button class=\"exqz__opt\" id=\"exqz-opt-3\" onclick=\"exqzAnswer(3)\">\r\n        <span class=\"exqz__opt-key\">D<\/span><span class=\"exqz__opt-text\" id=\"exqz-ot-3\"><\/span>\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <div class=\"exqz__feedback\" id=\"exqz-feedback\"><\/div>\r\n\r\n    <button class=\"exqz__next-btn\" id=\"exqz-next\" onclick=\"exqzNext()\">\r\n      Question suivante \u2192\r\n    <\/button>\r\n  <\/div>\r\n\r\n  <!-- \u00c9CRAN SCORE FINAL -->\r\n  <div class=\"exqz__score-screen\" id=\"exqz-score-screen\">\r\n    <div class=\"exqz__score-ring\">\r\n      <span class=\"exqz__score-num\" id=\"exqz-snum\">0<\/span>\r\n      <span class=\"exqz__score-denom\" id=\"exqz-sdenom\">\/ 20<\/span>\r\n    <\/div>\r\n    <div class=\"exqz__stars\" id=\"exqz-stars\">\u2606\u2606\u2606<\/div>\r\n    <p class=\"exqz__score-msg\" id=\"exqz-smsg\">R\u00e9sultat<\/p>\r\n    <p class=\"exqz__score-sub\" id=\"exqz-ssub\"><\/p>\r\n    <div class=\"exqz__score-actions\">\r\n      <button class=\"exqz__sc-btn exqz--retry\" id=\"exqz-retry\" onclick=\"exqzRetry()\">\u21ba R\u00e9essayer ce niveau<\/button>\r\n      <button class=\"exqz__sc-btn exqz--next-lvl\" id=\"exqz-nxtlvl\" onclick=\"exqzNxtLvl()\" style=\"display:none\">Niveau suivant \u2192<\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n<\/div><!-- #exqz-root -->\r\n\r\n<script>\r\n(function () {\r\n\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   BANQUE DE QUESTIONS\r\n   Structure : { q: \"texte HTML\", c: \"bonne r\u00e9ponse\", e: \"explication\", w: [\"faux1\",\"faux2\",\"faux3\"] }\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\nvar QUESTIONS = {\r\n\r\n\/* \u2500\u2500 NIVEAU 1 \u2014 D\u00c9BUTANT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n1: [\r\n  {\r\n    q: \"Quel signe doit obligatoirement commencer toute formule Excel ?\",\r\n    c: \"Le signe <code>=<\/code>\", e: \"Sans le <code>=<\/code>, Excel interpr\u00e8te la saisie comme du texte brut et n'effectue aucun calcul.\",\r\n    w: [\"Le symbole <code>#<\/code>\",\"Le symbole <code>@<\/code>\",\"Le symbole <code>&<\/code>\"]\r\n  },\r\n  {\r\n    q: \"Quelle fonction permet d'additionner toutes les valeurs d'une plage ?\",\r\n    c: \"<code>SOMME(A1:A10)<\/code>\", e: \"SOMME() est la fonction de base pour additionner. Elle accepte des plages, des cellules s\u00e9par\u00e9es et des valeurs directes.\",\r\n    w: [\"<code>ADDITION(A1:A10)<\/code>\",\"<code>TOTAL(A1:A10)<\/code>\",\"<code>CALCULER(A1:A10)<\/code>\"]\r\n  },\r\n  {\r\n    q: \"Que retourne la formule <code>=MAX(4 ; 9 ; 2 ; 7)<\/code> ?\",\r\n    c: \"9\", e: \"MAX() retourne la valeur la plus grande parmi tous ses arguments. Ici, 9 est le plus grand des quatre nombres.\",\r\n    w: [\"22 (la somme)\",\"4 (premier argument)\",\"7 (dernier argument)\"]\r\n  },\r\n  {\r\n    q: \"Que retourne la formule <code>=MIN(4 ; 9 ; 2 ; 7)<\/code> ?\",\r\n    c: \"2\", e: \"MIN() retourne la valeur la plus petite. Parmi 4, 9, 2 et 7, c'est bien 2 qui est le minimum.\",\r\n    w: [\"4\",\"7\",\"9\"]\r\n  },\r\n  {\r\n    q: \"Quelle fonction retourne automatiquement la date du jour (se recalcule \u00e0 chaque ouverture) ?\",\r\n    c: \"<code>AUJOURDHUI()<\/code>\", e: \"AUJOURDHUI() ne prend aucun argument (les parenth\u00e8ses restent vides) et retourne la date du jour au format date Excel.\",\r\n    w: [\"<code>MAINTENANT()<\/code> qui inclut aussi l'heure\",\"<code>DATE()<\/code> qui n\u00e9cessite des arguments\",\"<code>JOUR()<\/code> qui extrait le num\u00e9ro du jour\"]\r\n  },\r\n  {\r\n    q: \"Comment rend-on une r\u00e9f\u00e9rence de cellule <strong>absolue<\/strong> (qui ne bouge pas lors d'une copie) ?\",\r\n    c: \"On ajoute le symbole <code>$<\/code> devant la colonne et la ligne : <code>$A$1<\/code>\", e: \"Le $ 'fige' la partie de la r\u00e9f\u00e9rence qui le pr\u00e9c\u00e8de. $A$1 fige colonne ET ligne.\",\r\n    w: [\"On entoure la r\u00e9f\u00e9rence de crochets : <code>[A1]<\/code>\",\"On \u00e9crit la r\u00e9f\u00e9rence en majuscules dans le nom de plage\",\"On ajoute un <code>!<\/code> devant la r\u00e9f\u00e9rence\"]\r\n  },\r\n  {\r\n    q: \"Quelle touche du clavier permet de basculer rapidement une r\u00e9f\u00e9rence entre relative, absolue et mixte ?\",\r\n    c: \"<code>F4<\/code>\", e: \"Apr\u00e8s avoir cliqu\u00e9 sur une r\u00e9f\u00e9rence dans la barre de formule, F4 alterne : A1 \u2192 $A$1 \u2192 A$1 \u2192 $A1 \u2192 A1\u2026\",\r\n    w: [\"<code>F2<\/code> qui active le mode \u00e9dition\",\"<code>F5<\/code> qui ouvre 'Atteindre'\",\"<code>F9<\/code> qui recalcule la feuille\"]\r\n  },\r\n  {\r\n    q: \"Que signifie l'erreur <code>#N\/A<\/code> affich\u00e9e dans une cellule ?\",\r\n    c: \"La valeur recherch\u00e9e est introuvable (Not Available)\", e: \"#N\/A appara\u00eet typiquement quand RECHERCHEV ne trouve pas la valeur cherch\u00e9e dans la premi\u00e8re colonne.\",\r\n    w: [\"La formule contient une erreur de syntaxe\",\"La cellule r\u00e9f\u00e9renc\u00e9e a \u00e9t\u00e9 supprim\u00e9e\",\"Le r\u00e9sultat est trop grand pour \u00eatre affich\u00e9\"]\r\n  },\r\n  {\r\n    q: \"Quelle fonction compte le nombre de cellules <strong>non vides<\/strong> dans une plage ?\",\r\n    c: \"<code>NBVAL()<\/code>\", e: \"NBVAL compte tout ce qui n'est pas vide : texte, nombres, dates, valeurs logiques. NB() ne compte que les nombres.\",\r\n    w: [\"<code>NB()<\/code> qui ne compte que les nombres\",\"<code>NB.VIDE()<\/code> qui compte les cellules vides\",\"<code>COMPTE()<\/code> qui n'existe pas en fran\u00e7ais\"]\r\n  },\r\n  {\r\n    q: \"Quelle fonction compte uniquement les cellules contenant des <strong>valeurs num\u00e9riques<\/strong> ?\",\r\n    c: \"<code>NB()<\/code>\", e: \"NB() (COUNT en anglais) ignore le texte, les cellules vides et les erreurs. Seuls les nombres et les dates sont compt\u00e9s.\",\r\n    w: [\"<code>NBVAL()<\/code> qui compte tout ce qui n'est pas vide\",\"<code>NB.SI()<\/code> qui n\u00e9cessite un crit\u00e8re\",\"<code>NOMBRE()<\/code> qui n'existe pas\"]\r\n  },\r\n  {\r\n    q: \"Comment doit-on \u00e9crire une cha\u00eene de texte dans une formule Excel ?\",\r\n    c: \"Entre guillemets droits : <code>\\\"texte\\\"<\/code>\", e: \"Les guillemets droits (\\\") d\u00e9limitent le texte. Les guillemets typographiques (\\u201C\\u201D) ne sont pas reconnus par Excel.\",\r\n    w: [\"Entre apostrophes : <code>'texte'<\/code>\",\"Entre crochets : <code>[texte]<\/code>\",\"Sans d\u00e9limiteur, directement : <code>texte<\/code>\"]\r\n  },\r\n  {\r\n    q: \"Que retourne la formule <code>=NBCAR(\\\"Bonjour\\\")<\/code> ?\",\r\n    c: \"7\", e: \"NBCAR compte le nombre de caract\u00e8res de la cha\u00eene. B-o-n-j-o-u-r = 7 caract\u00e8res.\",\r\n    w: [\"6\",\"8\",\"5\"]\r\n  },\r\n  {\r\n    q: \"Quel op\u00e9rateur permet de <strong>concat\u00e9ner<\/strong> (assembler) deux cha\u00eenes de texte dans Excel ?\",\r\n    c: \"Le symbole <code>&<\/code>\", e: \"=A1 & \\\" \\\" & B1 assemble le contenu de A1, un espace, et le contenu de B1. On peut aussi utiliser CONCATENER().\",\r\n    w: [\"Le symbole <code>+<\/code> (r\u00e9serv\u00e9 aux additions)\",\"Le symbole <code>*<\/code> (multiplication)\",\"Le symbole <code>|<\/code> (n'existe pas dans Excel)\"]\r\n  },\r\n  {\r\n    q: \"Que retourne la formule <code>=2^4<\/code> ?\",\r\n    c: \"16 (2 \u00e0 la puissance 4)\", e: \"L'op\u00e9rateur ^ calcule une puissance. 2^4 = 2\u00d72\u00d72\u00d72 = 16.\",\r\n    w: [\"8 (2\u00d74)\",\"6 (2+4)\",\"24\"]\r\n  },\r\n  {\r\n    q: \"Que fait la fonction <code>=SUPPRESPACE(\\\" Jean  Dupont \\\")<\/code> ?\",\r\n    c: \"Retourne <code>\\\"Jean Dupont\\\"<\/code> \u2014 supprime les espaces en d\u00e9but, fin, et les doubles espaces\", e: \"SUPPRESPACE ne laisse qu'un seul espace entre les mots et supprime ceux en d\u00e9but et fin de cha\u00eene.\",\r\n    w: [\"Supprime TOUS les espaces \u2192 <code>\\\"JeanDupont\\\"<\/code>\",\"Compte le nombre d'espaces dans la cha\u00eene\",\"Remplace les espaces par des underscores\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=MOD(10 ; 3)<\/code> ?\",\r\n    c: \"1 (le reste de la division enti\u00e8re de 10 par 3)\", e: \"10 \u00f7 3 = 3 avec un reste de 1. MOD() retourne uniquement ce reste. Utile pour d\u00e9tecter si un nombre est pair (MOD(n;2)=0).\",\r\n    w: [\"3 (le quotient de la division)\",\"0,33 (la division d\u00e9cimale)\",\"30 (10\u00d73)\"]\r\n  },\r\n  {\r\n    q: \"Quelle extension poss\u00e8de un fichier Excel standard (format modern) ?\",\r\n    c: \".xlsx\", e: \".xlsx est le format XML d'Excel depuis 2007. Le .xls est l'ancien format binaire (Excel 97-2003).\",\r\n    w: [\".xls (ancien format avant 2007)\",\".xlm (format macro obsol\u00e8te)\",\".exl (n'existe pas)\"]\r\n  },\r\n  {\r\n    q: \"Que retourne la formule <code>=ARRONDI(3,567 ; 2)<\/code> ?\",\r\n    c: \"3,57 (arrondi \u00e0 2 d\u00e9cimales)\", e: \"ARRONDI(nombre ; nb_chiffres) arrondit math\u00e9matiquement. Ici, le 3\u00e8me chiffre (7 \u2265 5) fait monter le 6 \u00e0 7.\",\r\n    w: [\"3,56 (arrondi vers le bas)\",\"3,6 (une seule d\u00e9cimale)\",\"4 (arrondi \u00e0 l'entier)\"]\r\n  },\r\n  {\r\n    q: \"Quelle fonction calcule la <strong>valeur absolue<\/strong> d'un nombre (supprime le signe n\u00e9gatif) ?\",\r\n    c: \"<code>ABS()<\/code>\", e: \"ABS(-15) = 15. Tr\u00e8s utile pour calculer des \u00e9carts sans tenir compte du sens (exc\u00e9dent ou d\u00e9ficit).\",\r\n    w: [\"<code>ENT()<\/code> qui supprime les d\u00e9cimales\",\"<code>POSITIF()<\/code> qui n'existe pas\",\"<code>VALEUR()<\/code> qui convertit du texte en nombre\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=MOYENNE(2 ; 4 ; 6 ; 8)<\/code> ?\",\r\n    c: \"5\", e: \"MOYENNE additionne tous les arguments (2+4+6+8=20) et divise par le nombre d'arguments (4). 20\u00f74 = 5.\",\r\n    w: [\"4 (la m\u00e9diane)\",\"20 (la somme)\",\"6\"]\r\n  }\r\n],\r\n\r\n\/* \u2500\u2500 NIVEAU 2 \u2014 INTERM\u00c9DIAIRE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n2: [\r\n  {\r\n    q: \"Quelle est la syntaxe <strong>correcte<\/strong> de la fonction SI ?\",\r\n    c: \"<code>SI(test_logique ; valeur_si_vrai ; valeur_si_faux)<\/code>\", e: \"L'ordre est imp\u00e9ratif : d'abord le test, puis ce qu'on retourne si c'est vrai, enfin si c'est faux.\",\r\n    w: [\"<code>SI(valeur_si_vrai ; test_logique ; valeur_si_faux)<\/code>\",\"<code>SI(test_logique ; valeur_si_faux ; valeur_si_vrai)<\/code>\",\"<code>SI(condition ; r\u00e9sultat)<\/code> \u2014 2 arguments uniquement\"]\r\n  },\r\n  {\r\n    q: \"Que retourne exactement <code>=SI(5 > 3 ; \\\"Oui\\\" ; \\\"Non\\\")<\/code> ?\",\r\n    c: \"Oui\", e: \"5 > 3 est vrai (VRAI), donc Excel retourne le deuxi\u00e8me argument : la cha\u00eene \\\"Oui\\\".\",\r\n    w: [\"Non\",\"VRAI (la valeur logique)\",\"5 (la valeur test\u00e9e)\"]\r\n  },\r\n  {\r\n    q: \"La fonction <code>ET()<\/code> retourne VRAI uniquement si :\",\r\n    c: \"Toutes les conditions pass\u00e9es en argument sont vraies\", e: \"ET() est un ET logique strict : une seule condition fausse suffit \u00e0 ce que ET() retourne FAUX.\",\r\n    w: [\"Au moins une condition est vraie (c'est OU())\",\"Aucune condition n'est vraie\",\"La premi\u00e8re condition est vraie\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=OU(FAUX ; FAUX ; FAUX)<\/code> ?\",\r\n    c: \"FAUX \u2014 OU() retourne FAUX seulement si toutes les conditions sont fausses\", e: \"OU() retourne VRAI d\u00e8s qu'au moins un argument est vrai. Ici tous sont faux, donc le r\u00e9sultat est FAUX.\",\r\n    w: [\"VRAI\",\"0\",\"#VALEUR!\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=ET(VRAI ; FAUX ; VRAI)<\/code> ?\",\r\n    c: \"FAUX \u2014 un seul FAUX suffit \u00e0 ce que ET() retourne FAUX\", e: \"ET() exige que TOUS les arguments soient vrais. Le FAUX au milieu suffit \u00e0 faire retourner FAUX.\",\r\n    w: [\"VRAI\",\"2 (nombre de VRAI)\",\"IND\u00c9FINI\"]\r\n  },\r\n  {\r\n    q: \"Dans <code>RECHERCHEV<\/code>, dans quelle colonne la valeur cherch\u00e9e doit-elle <strong>toujours<\/strong> se trouver ?\",\r\n    c: \"Dans la premi\u00e8re colonne de la table_matrice\", e: \"C'est la contrainte principale de RECHERCHEV : il cherche toujours dans la 1\u00e8re colonne. Pour chercher ailleurs, on utilise INDEX+EQUIV.\",\r\n    w: [\"Dans n'importe quelle colonne au choix\",\"Dans la colonne sp\u00e9cifi\u00e9e par le 3\u00e8me argument\",\"Dans la derni\u00e8re colonne de la table\"]\r\n  },\r\n  {\r\n    q: \"Dans <code>RECHERCHEV<\/code>, quelle valeur doit-on mettre en 4\u00e8me argument pour une <strong>correspondance exacte<\/strong> ?\",\r\n    c: \"<code>FAUX<\/code> (ou 0)\", e: \"FAUX force la correspondance exacte. VRAI (ou 1) active la correspondance approch\u00e9e, qui suppose que les donn\u00e9es sont tri\u00e9es.\",\r\n    w: [\"<code>VRAI<\/code> (ou 1)\",\"<code>2<\/code>\",\"<code>-1<\/code>\"]\r\n  },\r\n  {\r\n    q: \"Que fait la fonction <code>SIERREUR(formule ; valeur_si_erreur)<\/code> ?\",\r\n    c: \"Retourne valeur_si_erreur si formule produit une erreur, sinon retourne le r\u00e9sultat normal\", e: \"SIERREUR capture toutes les erreurs (#N\/A, #REF!, #VALEUR!\u2026) et les remplace par une valeur propre.\",\r\n    w: [\"Retourne VRAI si la formule contient une erreur\",\"Affiche une bo\u00eete de dialogue d'erreur personnalis\u00e9e\",\"Corrige automatiquement les erreurs de formule\"]\r\n  },\r\n  {\r\n    q: \"Quelle est la syntaxe correcte de <code>SOMME.SI<\/code> ?\",\r\n    c: \"<code>SOMME.SI(plage_crit\u00e8re ; crit\u00e8re ; plage_somme)<\/code>\", e: \"La plage \u00e0 sommer est en 3\u00e8me position dans SOMME.SI. Attention : dans SOMME.SI.ENS, elle est en 1\u00e8re position !\",\r\n    w: [\"<code>SOMME.SI(crit\u00e8re ; plage_crit\u00e8re ; plage_somme)<\/code>\",\"<code>SOMME.SI(plage_somme ; crit\u00e8re ; plage_crit\u00e8re)<\/code>\",\"<code>SOMME.SI(plage_somme ; plage_crit\u00e8re ; crit\u00e8re)<\/code>\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=GRANDE.VALEUR({3 ; 8 ; 2 ; 5 ; 1} ; 2)<\/code> ?\",\r\n    c: \"5 (la 2\u00e8me plus grande valeur)\", e: \"GRANDE.VALEUR(plage ; k) retourne la k-i\u00e8me plus grande valeur. Le classement des valeurs donne : 8, 5, 3, 2, 1. Donc la 2\u00e8me est 5.\",\r\n    w: [\"8 (la 1\u00e8re plus grande)\",\"3 (la 3\u00e8me plus grande)\",\"2 (la 4\u00e8me plus grande)\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=GAUCHE(\\\"Informatique\\\" ; 5)<\/code> ?\",\r\n    c: \"Infor\", e: \"GAUCHE extrait les n premiers caract\u00e8res depuis la gauche. I-n-f-o-r = les 5 premiers caract\u00e8res.\",\r\n    w: [\"Informa (7 caract\u00e8res)\",\"atiqu (5 caract\u00e8res depuis la droite)\",\"matiq\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=DROITE(\\\"Excel\\\" ; 2)<\/code> ?\",\r\n    c: \"el\", e: \"DROITE extrait les n derniers caract\u00e8res. \\\"Excel\\\" a 5 lettres ; les 2 derni\u00e8res sont e-l.\",\r\n    w: [\"Ex (les 2 premiers)\",\"ce (les 2 du milieu)\",\"xe\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=MILIEU(\\\"Bonjour\\\" ; 4 ; 3)<\/code> ?\",\r\n    c: \"jou\", e: \"MILIEU(texte ; d\u00e9but ; nb_cars) extrait nb_cars caract\u00e8res \u00e0 partir de la position d\u00e9but. Position 4 = 'j', puis j-o-u.\",\r\n    w: [\"njo (position 3, 3 car.)\",\"our (positions 5-7)\",\"onj (position 2, 3 car.)\"]\r\n  },\r\n  {\r\n    q: \"Laquelle de ces fonctions est <strong>sensible \u00e0 la casse<\/strong> (distingue majuscules et minuscules) ?\",\r\n    c: \"<code>TROUVE()<\/code>\", e: \"TROUVE() est sensible \u00e0 la casse : chercher 'excel' et 'Excel' donne des r\u00e9sultats diff\u00e9rents. CHERCHE() est insensible.\",\r\n    w: [\"<code>CHERCHE()<\/code> qui est insensible\",\"<code>NBCAR()<\/code> qui ne cherche pas\",\"<code>GAUCHE()<\/code>\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=NOMPROPRE(\\\"jean-pierre dupont\\\")<\/code> ?\",\r\n    c: \"Jean-Pierre Dupont\", e: \"NOMPROPRE met en majuscule la premi\u00e8re lettre de chaque mot et apr\u00e8s chaque signe de ponctuation comme le tiret.\",\r\n    w: [\"JEAN-PIERRE DUPONT (MAJUSCULE)\",\"jean-pierre dupont (inchang\u00e9)\",\"Jean-pierre dupont (tiret ignor\u00e9)\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=SUBSTITUE(\\\"Bonjour\\\" ; \\\"o\\\" ; \\\"0\\\")<\/code> ?\",\r\n    c: \"B0nj0ur (tous les 'o' remplac\u00e9s par '0')\", e: \"SUBSTITUE remplace toutes les occurrences par d\u00e9faut. Pour ne remplacer que la 1\u00e8re, ajouter un 4\u00e8me argument : SUBSTITUE(texte;\\\"o\\\";\\\"0\\\";1).\",\r\n    w: [\"B0njour (seulement le 1er)\",\"Bonjour (aucun changement)\",\"0 (valeur num\u00e9rique)\"]\r\n  },\r\n  {\r\n    q: \"Quelle formule permet de <strong>compter<\/strong> le nombre de cellules contenant exactement \\\"Paris\\\" dans A1:A100 ?\",\r\n    c: \"<code>=NB.SI(A1:A100 ; \\\"Paris\\\")<\/code>\", e: \"NB.SI(plage ; crit\u00e8re) compte les cellules qui satisfont le crit\u00e8re. Le texte doit \u00eatre entre guillemets.\",\r\n    w: [\"<code>=NBVAL(A1:A100 ; \\\"Paris\\\")<\/code> \u2014 NBVAL ne prend pas de crit\u00e8re\",\"<code>=COMPTER(A1:A100 ; \\\"Paris\\\")<\/code> \u2014 n'existe pas\",\"<code>=NB.VIDE(A1:A100 ; \\\"Paris\\\")<\/code> \u2014 compte les vides\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=RANG(8 ; {3;8;2;5} ; 0)<\/code> ?\",\r\n    c: \"1 \u2014 8 est le plus grand (ordre d\u00e9croissant, 0)\", e: \"RANG(valeur ; plage ; ordre). Avec ordre=0, le plus grand a le rang 1. 8 est bien le maximum \u2192 rang 1.\",\r\n    w: [\"2\",\"4 (position dans le tableau)\",\"8\"]\r\n  },\r\n  {\r\n    q: \"Quelle fonction Excel calcule automatiquement une <strong>moyenne conditionnelle<\/strong> ?\",\r\n    c: \"<code>MOYENNE.SI()<\/code>\", e: \"MOYENNE.SI(plage_crit\u00e8re ; crit\u00e8re ; plage_moyenne) calcule la moyenne uniquement des cellules qui satisfont le crit\u00e8re.\",\r\n    w: [\"<code>SI.MOYENNE()<\/code> \u2014 n'existe pas\",\"<code>MOYENNE.COND()<\/code> \u2014 n'existe pas\",\"<code>SOMME.SI()\/NB.SI()<\/code> \u2014 fonctionne mais est moins \u00e9l\u00e9gant\"]\r\n  },\r\n  {\r\n    q: \"Comment \u00e9crire un crit\u00e8re de comparaison dans <code>NB.SI<\/code> pour compter les cellules <strong>sup\u00e9rieures \u00e0 50<\/strong> ?\",\r\n    c: \"<code>=NB.SI(A1:A100 ; \\\">50\\\")<\/code> \u2014 l'op\u00e9rateur entre guillemets\", e: \"Quand le crit\u00e8re inclut un op\u00e9rateur (>, <, >=, <=, <>), il doit \u00eatre entre guillemets sous forme de texte.\",\r\n    w: [\"<code>=NB.SI(A1:A100 ; >50)<\/code> \u2014 sans guillemets\",\"<code>=NB.SI(A1:A100 ; SUPERIEUR(50))<\/code>\",\"<code>=NB.SI(A1:A100 ; A1>50)<\/code>\"]\r\n  }\r\n],\r\n\r\n\/* \u2500\u2500 NIVEAU 3 \u2014 AVANC\u00c9 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n3: [\r\n  {\r\n    q: \"Quel est l'avantage principal de la combinaison <code>INDEX+EQUIV<\/code> par rapport \u00e0 <code>RECHERCHEV<\/code> ?\",\r\n    c: \"INDEX+EQUIV peut retourner une valeur \u00e0 gauche de la colonne de recherche, ce que RECHERCHEV ne peut pas faire\", e: \"RECHERCHEV ne cherche qu'\u00e0 droite. INDEX+EQUIV permet de chercher dans n'importe quelle colonne et retourner dans n'importe quelle autre direction.\",\r\n    w: [\"INDEX+EQUIV est disponible depuis Excel 97 contrairement \u00e0 RECHERCHEV\",\"INDEX+EQUIV est syst\u00e9matiquement plus rapide sur toutes les plages\",\"INDEX+EQUIV n'a pas besoin de figer la table avec $\"]\r\n  },\r\n  {\r\n    q: \"Dans <code>SOMME.SI.ENS<\/code>, o\u00f9 se trouve la <strong>plage \u00e0 sommer<\/strong> dans la syntaxe ?\",\r\n    c: \"En premier argument, avant toutes les plages de crit\u00e8res\", e: \"SOMME.SI.ENS(plage_somme ; plage_crit1 ; crit\u00e8re1 ; plage_crit2 ; crit\u00e8re2\u2026). C'est l'inverse de SOMME.SI o\u00f9 la plage_somme est en 3\u00e8me !\",\r\n    w: [\"En dernier argument, apr\u00e8s tous les crit\u00e8res\",\"En deuxi\u00e8me argument, apr\u00e8s le premier crit\u00e8re\",\"L'ordre n'a pas d'importance dans SOMME.SI.ENS\"]\r\n  },\r\n  {\r\n    q: \"Quelle formule calcule correctement le <strong>num\u00e9ro de trimestre<\/strong> d'une date en A1 ?\",\r\n    c: \"<code>=\\\"T\\\"&ENT((MOIS(A1)-1)\/3)+1<\/code>\", e: \"MOIS()-1 donne 0-11, divis\u00e9 par 3 donne 0-3,67, ENT() donne 0-3, +1 donne 1-4. On pr\u00e9fixe avec \\\"T\\\" pour obtenir T1, T2, T3, T4.\",\r\n    w: [\"<code>=ENT(MOIS(A1)\/4)+1<\/code> \u2014 calcul incorrect\",\"<code>=MOIS(A1)\/3<\/code> \u2014 retourne un d\u00e9cimal\",\"<code>=TRIMESTRE(A1)<\/code> \u2014 fonction qui n'existe pas\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=DATEDIF(A1 ; B1 ; \\\"YM\\\")<\/code> ?\",\r\n    c: \"Le nombre de mois complets restants <em>apr\u00e8s d\u00e9duction des ann\u00e9es enti\u00e8res<\/em>\", e: \"\\\"YM\\\" est utile pour afficher \\\"X ans et Y mois\\\". Ex : si l'\u00e9cart est 2 ans et 5 mois, DATEDIF retourne 5 (les mois r\u00e9siduels).\",\r\n    w: [\"Le nombre total de mois entre A1 et B1\",\"Le nombre d'ann\u00e9es et de mois entre les deux dates\",\"L'\u00e9cart en ann\u00e9es entre A1 et B1\"]\r\n  },\r\n  {\r\n    q: \"Quelle est la diff\u00e9rence entre <code>$A1<\/code> et <code>A$1<\/code> ?\",\r\n    c: \"<code>$A1<\/code> fige la colonne A (elle ne bouge pas lors d'une copie horizontale) ; <code>A$1<\/code> fige la ligne 1 (elle ne bouge pas lors d'une copie verticale)\", e: \"Le $ fige toujours ce qui le suit. $A = colonne A fixe. $1 = ligne 1 fixe. Tr\u00e8s utile pour les tables de multiplication ou les grilles tarifaires.\",\r\n    w: [\"<code>$A1<\/code> fige la ligne ; <code>A$1<\/code> fige la colonne \u2014 c'est l'inverse\",\"<code>$A1<\/code> et <code>A$1<\/code> sont strictement identiques\",\"<code>$A1<\/code> fige tout ; <code>A$1<\/code> ne fige rien\"]\r\n  },\r\n  {\r\n    q: \"Que fait exactement <code>=MIN(MAX(A1 ; 0) ; 100)<\/code> ?\",\r\n    c: \"Retourne la valeur de A1 born\u00e9e entre 0 et 100 (jamais n\u00e9gative, jamais sup\u00e9rieure \u00e0 100)\", e: \"MAX(A1;0) emp\u00eache les valeurs n\u00e9gatives. MIN(r\u00e9sultat;100) plafonne \u00e0 100. Combin\u00e9s, ils cr\u00e9ent un corridor [0;100].\",\r\n    w: [\"Retourne 0 si A1 est n\u00e9gatif et 100 si A1 est positif\",\"Retourne le minimum entre 0 et 100 ind\u00e9pendamment de A1\",\"G\u00e9n\u00e8re une erreur #VALEUR! si A1 n'est pas num\u00e9rique\"]\r\n  },\r\n  {\r\n    q: \"Depuis quelle version d'Excel la fonction <code>SI.CONDITIONS<\/code> est-elle disponible ?\",\r\n    c: \"Excel 2019\", e: \"SI.CONDITIONS (IFS en anglais) remplace avantageusement les SI imbriqu\u00e9s. Elle n'est pas disponible dans Excel 2016 ou ant\u00e9rieur.\",\r\n    w: [\"Excel 2016\",\"Excel 2013\",\"Microsoft 365 uniquement (pas Excel 2019 autonome)\"]\r\n  },\r\n  {\r\n    q: \"<code>NB.JOURS.OUVRES(date_d\u00e9but ; date_fin)<\/code> exclut automatiquement :\",\r\n    c: \"Les samedis et dimanches \u2014 les jours f\u00e9ri\u00e9s peuvent \u00eatre exclus en ajoutant une liste en 3\u00e8me argument optionnel\", e: \"NB.JOURS.OUVRES ne conna\u00eet pas automatiquement les jours f\u00e9ri\u00e9s fran\u00e7ais. Il faut fournir une plage contenant leurs dates.\",\r\n    w: [\"Uniquement les dimanches\",\"Tous les jours f\u00e9ri\u00e9s fran\u00e7ais automatiquement\",\"Les samedis, dimanches et tous les jours f\u00e9ri\u00e9s l\u00e9gaux\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=EQUIV(\\\"Excel\\\" ; {\\\"Word\\\";\\\"Excel\\\";\\\"PowerPoint\\\"} ; 0)<\/code> ?\",\r\n    c: \"2 (la position de \\\"Excel\\\" dans le tableau)\", e: \"EQUIV retourne la position (rang) de la valeur dans la plage, pas la valeur elle-m\u00eame. C'est ce r\u00e9sultat qu'INDEX utilise ensuite.\",\r\n    w: [\"VRAI (valeur bool\u00e9enne)\",\"\\\"Excel\\\" (la valeur trouv\u00e9e)\",\"1 (premi\u00e8re occurrence)\"]\r\n  },\r\n  {\r\n    q: \"Quelle formule extrait correctement le <strong>pr\u00e9nom<\/strong> d'une cellule A1 contenant <code>\\\"Marie Dupont\\\"<\/code> ?\",\r\n    c: \"<code>=GAUCHE(A1 ; CHERCHE(\\\" \\\" ; A1) - 1)<\/code>\", e: \"CHERCHE(\\\" \\\";A1) trouve la position de l'espace (6). GAUCHE(A1;6-1) extrait les 5 premiers caract\u00e8res : \\\"Marie\\\".\",\r\n    w: [\"<code>=GAUCHE(A1 ; 5)<\/code> \u2014 ne fonctionne que si tous les pr\u00e9noms ont 5 lettres\",\"<code>=MILIEU(A1 ; 1 ; CHERCHE(\\\" \\\";A1))<\/code> \u2014 inclut l'espace\",\"<code>=STXT(A1 ; 1 ; TROUVE(\\\"Dupont\\\";A1))<\/code> \u2014 cherche le nom, pas l'espace\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=MOD(17 ; 5)<\/code> ?\",\r\n    c: \"2 (reste de la division : 17 = 3 \u00d7 5 + 2)\", e: \"17 divis\u00e9 par 5 donne 3 avec un reste de 2. MOD est souvent utilis\u00e9 pour identifier les lignes paires\/impaires avec MOD(LIGNE();2).\",\r\n    w: [\"3 (le quotient)\",\"12 (17-5)\",\"3,4 (la division d\u00e9cimale)\"]\r\n  },\r\n  {\r\n    q: \"Quelle est la bonne formule pour obtenir une date <strong>20 jours ouvr\u00e9s<\/strong> apr\u00e8s aujourd'hui ?\",\r\n    c: \"<code>=SERIE.JOUR.OUVRE(AUJOURDHUI() ; 20)<\/code>\", e: \"SERIE.JOUR.OUVRE(date_d\u00e9part ; nb_jours) calcule une date en sautant les weekends. On peut aussi exclure les jours f\u00e9ri\u00e9s avec un 3\u00e8me argument.\",\r\n    w: [\"<code>=AUJOURDHUI() + 20<\/code> \u2014 compte les jours calendaires, pas ouvr\u00e9s\",\"<code>=NB.JOURS.OUVRES(AUJOURDHUI() ; 20)<\/code> \u2014 compte des jours, ne donne pas une date\",\"<code>=OUVRE.JOURS(20 ; AUJOURDHUI())<\/code> \u2014 arguments invers\u00e9s et n'existe pas ainsi\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=ENT(7,9)<\/code> ?\",\r\n    c: \"7 \u2014 ENT arrondit <em>toujours vers l'entier inf\u00e9rieur<\/em>, m\u00eame pour des positifs\", e: \"ENT() diff\u00e8re d'ARRONDI.INF() pour les n\u00e9gatifs : ENT(-7,9)=-8 (vers le bas) ; ARRONDI.INF(-7,9;0)=-7 (vers z\u00e9ro).\",\r\n    w: [\"8 (arrondi classique)\",\"8,0 (avec d\u00e9cimale)\",\"#VALEUR! car 7,9 n'est pas entier\"]\r\n  },\r\n  {\r\n    q: \"Pourquoi faut-il figer la <code>table_matrice<\/code> avec <code>$<\/code> dans <code>RECHERCHEV<\/code> ?\",\r\n    c: \"Pour que la plage du tableau de r\u00e9f\u00e9rence ne se d\u00e9cale pas quand on copie la formule vers le bas ou vers la droite\", e: \"Sans $, en copiant la formule de C2 \u00e0 C3, la table glisse de A1:D100 \u00e0 A2:D101, excluant la ligne d'en-t\u00eate et provoquant des erreurs.\",\r\n    w: [\"Pour acc\u00e9l\u00e9rer le calcul sur de grandes plages\",\"Pour \u00e9viter l'erreur #REF! due \u00e0 une r\u00e9f\u00e9rence circulaire\",\"Pour permettre la recherche dans plusieurs feuilles simultan\u00e9ment\"]\r\n  },\r\n  {\r\n    q: \"Quelle fonction est le <strong>successeur moderne<\/strong> de RECHERCHEV dans Excel 2021 et Microsoft 365 ?\",\r\n    c: \"<code>RECHERCHEX()<\/code> (XLOOKUP en anglais)\", e: \"RECHERCHEX cherche dans n'importe quelle direction, retourne si introuvable sans SIERREUR, et peut retourner plusieurs colonnes \u00e0 la fois.\",\r\n    w: [\"<code>RECHERCHEH()<\/code> \u2014 cherche en horizontal, pas un successeur\",\"<code>INDEX.EQUIV()<\/code> \u2014 combinaison de deux fonctions, pas une nouvelle fonction\",\"<code>TROUVE()<\/code> \u2014 cherche du texte dans une cha\u00eene\"]\r\n  },\r\n  {\r\n    q: \"Pourquoi faut-il \u00e9viter <code>RECHERCHEV<\/code> avec <code>VRAI<\/code> (correspondance approch\u00e9e) sur des donn\u00e9es non tri\u00e9es ?\",\r\n    c: \"Il peut retourner des r\u00e9sultats incorrects car il suppose que la premi\u00e8re colonne est tri\u00e9e par ordre croissant\", e: \"Avec VRAI, RECHERCHEV utilise une recherche binaire qui suppose un tri croissant. Sur donn\u00e9es non tri\u00e9es, il peut retourner n'importe quelle valeur sans erreur.\",\r\n    w: [\"Il g\u00e9n\u00e8re syst\u00e9matiquement l'erreur #N\/A sur donn\u00e9es non tri\u00e9es\",\"Il est 10 fois plus lent que la correspondance exacte\",\"Il ne fonctionne qu'avec des donn\u00e9es num\u00e9riques\"]\r\n  },\r\n  {\r\n    q: \"Que retourne <code>=PETITE.VALEUR({8 ; 3 ; 1 ; 5 ; 2} ; 3)<\/code> ?\",\r\n    c: \"3 (la 3\u00e8me plus petite valeur)\", e: \"Classement croissant : 1, 2, 3, 5, 8. La 3\u00e8me plus petite est donc 3. PETITE.VALEUR est l'inverse de GRANDE.VALEUR.\",\r\n    w: [\"5 (la 3\u00e8me en position dans la liste)\",\"1 (la plus petite)\",\"2 (la 2\u00e8me)\"]\r\n  },\r\n  {\r\n    q: \"Quelle formule calcule l'<strong>\u00e2ge exact en ann\u00e9es<\/strong> d'une personne dont la date de naissance est en A1 ?\",\r\n    c: \"<code>=DATEDIF(A1 ; AUJOURDHUI() ; \\\"Y\\\")<\/code>\", e: \"DATEDIF avec \\\"Y\\\" compte les ann\u00e9es compl\u00e8tes r\u00e9volues. C'est plus pr\u00e9cis que ANNEE(AUJOURDHUI())-ANNEE(A1) qui ne tient pas compte du jour d'anniversaire.\",\r\n    w: [\"<code>=ANNEE(AUJOURDHUI())-ANNEE(A1)<\/code> \u2014 ne tient pas compte du jour d'anniversaire\",\"<code>=ENT((AUJOURDHUI()-A1)\/365)<\/code> \u2014 impr\u00e9cis \u00e0 cause des ann\u00e9es bissextiles\",\"<code>=ANNEE(A1-AUJOURDHUI())<\/code> \u2014 argument n\u00e9gatif, erreur garantie\"]\r\n  },\r\n  {\r\n    q: \"Que fait <code>=TEXTE(A1 ; \\\"dd\/mm\/yyyy\\\")<\/code> quand A1 contient une date Excel ?\",\r\n    c: \"Convertit la date en texte format\u00e9 (ex : <code>\\\"15\/06\/2024\\\"<\/code>)\", e: \"TEXTE() formate n'importe quelle valeur num\u00e9rique en cha\u00eene de texte. Pour les dates : dd=jour, mm=mois, yyyy=ann\u00e9e \u00e0 4 chiffres.\",\r\n    w: [\"Extrait le num\u00e9ro du jour (fonction JOUR() ferait \u00e7a)\",\"V\u00e9rifie si A1 est bien au format date\",\"Retourne le nombre 44927 (valeur interne de la date)\"]\r\n  },\r\n  {\r\n    q: \"Quel est le r\u00e9sultat de <code>=SIERREUR(RECHERCHEV(\\\"ZZZ\\\";A1:C100;2;FAUX) ; \\\"Introuvable\\\")<\/code> quand \\\"ZZZ\\\" n'existe pas dans la colonne A ?\",\r\n    c: \"\\\"Introuvable\\\" \u2014 SIERREUR intercepte le #N\/A et retourne la valeur de remplacement\", e: \"Sans SIERREUR, la cellule afficherait #N\/A. SIERREUR permet d'afficher un message propre, une cellule vide (\\\"\\\") ou une valeur par d\u00e9faut.\",\r\n    w: [\"#N\/A \u2014 SIERREUR ne capture pas les erreurs RECHERCHEV\",\"VRAI \u2014 SIERREUR retourne VRAI en cas d'erreur\",\"0 \u2014 SIERREUR retourne toujours 0 par d\u00e9faut\"]\r\n  }\r\n]\r\n\r\n}; \/* fin QUESTIONS *\/\r\n\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   \u00c9TAT\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\nvar lvl      = 1;\r\nvar idx      = 0;\r\nvar score    = 0;\r\nvar answered = false;\r\nvar shuffled = [];   \/* options de la question courante, dans l'ordre affich\u00e9 *\/\r\n\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   UTILITAIRES\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\nfunction gid(id) { return document.getElementById(id); }\r\n\r\nfunction shuffle(arr) {\r\n  var a = arr.slice();\r\n  for (var i = a.length - 1; i > 0; i--) {\r\n    var j = Math.floor(Math.random() * (i + 1));\r\n    var t = a[i]; a[i] = a[j]; a[j] = t;\r\n  }\r\n  return a;\r\n}\r\n\r\nfunction lvlLabel(l) {\r\n  return l === 1 ? '\ud83d\udcd7 Niveau D\u00e9butant' : l === 2 ? '\ud83d\udcd9 Niveau Interm\u00e9diaire' : '\ud83d\udcd5 Niveau Avanc\u00e9';\r\n}\r\n\r\nfunction lvlNextLabel(l) {\r\n  return l === 2 ? '\ud83d\udcd9 Interm\u00e9diaire' : '\ud83d\udcd5 Avanc\u00e9';\r\n}\r\n\r\nfunction scoreMsg(s, total) {\r\n  var pct = s \/ total;\r\n  if (pct >= 0.90) return { title: 'Excellent ! \ud83c\udf89', sub: 'Ma\u00eetrise parfaite de ce niveau. Tu es pr\u00eat(e) pour la suite !' };\r\n  if (pct >= 0.75) return { title: 'Tr\u00e8s bien ! \ud83d\udc4d', sub: 'Belle ma\u00eetrise avec quelques points \u00e0 consolider.' };\r\n  if (pct >= 0.55) return { title: 'Correct !', sub: 'Des bases solides, mais quelques notions m\u00e9ritent une r\u00e9vision.' };\r\n  if (pct >= 0.40) return { title: 'Insuffisant', sub: 'Relis le cours correspondant \u00e0 ce niveau et r\u00e9essaie.' };\r\n  return { title: '\u00c0 retravailler \ud83d\udcda', sub: 'Retourne au cours avant de r\u00e9essayer ce niveau !' };\r\n}\r\n\r\nfunction starsFor(s, total) {\r\n  var pct = s \/ total;\r\n  var n = pct >= 0.80 ? 3 : pct >= 0.50 ? 2 : 1;\r\n  return '\u2b50'.repeat(n) + '\u2606'.repeat(3 - n);\r\n}\r\n\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   GESTION DES NIVEAUX\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\nfunction applyLevelTheme(l) {\r\n  var root = document.getElementById('exqz-root');\r\n  root.classList.remove('exqz--lvl1','exqz--lvl2','exqz--lvl3');\r\n  root.classList.add('exqz--lvl'+l);\r\n  gid('exqz-pill').textContent = lvlLabel(l);\r\n  [1,2,3].forEach(function(n) {\r\n    var tab = gid('exqz-tab-'+n);\r\n    if (n === l) { tab.classList.add('exqz--active'); tab.setAttribute('aria-selected','true'); }\r\n    else         { tab.classList.remove('exqz--active'); tab.setAttribute('aria-selected','false'); }\r\n  });\r\n}\r\n\r\nfunction setLevel(l) {\r\n  lvl = l; idx = 0; score = 0; answered = false;\r\n  applyLevelTheme(l);\r\n  gid('exqz-score-screen').style.display = 'none';\r\n  gid('exqz-quiz-area').style.display    = 'block';\r\n  showQuestion();\r\n}\r\n\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   AFFICHAGE D'UNE QUESTION\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\nfunction showQuestion() {\r\n  var data = QUESTIONS[lvl];\r\n  var q    = data[idx];\r\n  answered = false;\r\n\r\n  \/* Meta *\/\r\n  gid('exqz-qnum').textContent       = 'Question ' + (idx + 1) + ' \/ ' + data.length;\r\n  gid('exqz-score-val').textContent  = score;\r\n  gid('exqz-score-of').textContent   = idx;\r\n\r\n  \/* Progress *\/\r\n  var pct = Math.round(idx \/ data.length * 100);\r\n  var prog = gid('exqz-prog');\r\n  prog.style.width = pct + '%';\r\n  var track = prog.parentElement;\r\n  if (track) track.setAttribute('aria-valuenow', idx);\r\n\r\n  \/* Question *\/\r\n  gid('exqz-qtext').innerHTML = q.q;\r\n\r\n  \/* Options m\u00e9lang\u00e9es *\/\r\n  var opts = shuffle(\r\n    [{ text: q.c, correct: true, explain: q.e }]\r\n    .concat(q.w.map(function(w) { return { text: w, correct: false, explain: q.e }; }))\r\n  );\r\n  shuffled = opts;\r\n\r\n  var labels = ['A','B','C','D'];\r\n  opts.forEach(function(opt, i) {\r\n    var btn = gid('exqz-opt-' + i);\r\n    var txt = gid('exqz-ot-'  + i);\r\n    btn.className = 'exqz__opt';\r\n    btn.disabled  = false;\r\n    txt.innerHTML = opt.text;\r\n  });\r\n\r\n  \/* Feedback et bouton suivant *\/\r\n  var fb = gid('exqz-feedback');\r\n  fb.className  = 'exqz__feedback';\r\n  fb.innerHTML  = '';\r\n  var nb = gid('exqz-next');\r\n  nb.style.display = 'none';\r\n  nb.textContent = (idx < data.length - 1) ? 'Question suivante \u2192' : 'Voir mon score \u2192';\r\n}\r\n\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   R\u00c9PONSE\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\nfunction handleAnswer(i) {\r\n  if (answered) return;\r\n  answered = true;\r\n\r\n  var opt       = shuffled[i];\r\n  var isCorrect = opt.correct;\r\n  var fb        = gid('exqz-feedback');\r\n\r\n  if (isCorrect) {\r\n    score++;\r\n    gid('exqz-opt-' + i).className = 'exqz__opt exqz--correct';\r\n    fb.className = 'exqz__feedback exqz--show exqz--ok';\r\n    fb.innerHTML = '<strong>\u2713 Bonne r\u00e9ponse !<\/strong> ' + opt.explain;\r\n  } else {\r\n    gid('exqz-opt-' + i).className = 'exqz__opt exqz--wrong';\r\n    var correctText = '';\r\n    shuffled.forEach(function(o, j) {\r\n      if (o.correct) {\r\n        gid('exqz-opt-' + j).className = 'exqz__opt exqz--correct';\r\n        correctText = o.text;\r\n      }\r\n    });\r\n    fb.className = 'exqz__feedback exqz--show exqz--bad';\r\n    fb.innerHTML = '<strong>\u2717 Incorrect.<\/strong> La bonne r\u00e9ponse \u00e9tait : <strong>' + correctText + '<\/strong><br><small style=\"color:var(--exqz-mid);margin-top:.35rem;display:block\">' + opt.explain + '<\/small>';\r\n  }\r\n\r\n  \/* D\u00e9sactiver tous les boutons *\/\r\n  for (var j = 0; j < 4; j++) gid('exqz-opt-' + j).disabled = true;\r\n\r\n  \/* Mise \u00e0 jour score affich\u00e9 *\/\r\n  gid('exqz-score-val').textContent = score;\r\n  gid('exqz-score-of').textContent  = idx + 1;\r\n\r\n  \/* Bouton suivant *\/\r\n  gid('exqz-next').style.display = 'flex';\r\n}\r\n\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   QUESTION SUIVANTE \/ SCORE FINAL\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\nfunction nextQuestion() {\r\n  idx++;\r\n  if (idx >= QUESTIONS[lvl].length) {\r\n    showScore();\r\n  } else {\r\n    showQuestion();\r\n  }\r\n}\r\n\r\nfunction showScore() {\r\n  gid('exqz-quiz-area').style.display    = 'none';\r\n  gid('exqz-score-screen').style.display = 'flex';\r\n  gid('exqz-prog').style.width           = '100%';\r\n\r\n  var total = QUESTIONS[lvl].length;\r\n  var info  = scoreMsg(score, total);\r\n  var stars = starsFor(score, total);\r\n\r\n  gid('exqz-snum').textContent   = score;\r\n  gid('exqz-sdenom').textContent = '\/ ' + total;\r\n  gid('exqz-stars').textContent  = stars;\r\n  gid('exqz-smsg').textContent   = info.title;\r\n  gid('exqz-ssub').textContent   = info.sub;\r\n\r\n  \/* Bouton niveau suivant *\/\r\n  var nxtBtn = gid('exqz-nxtlvl');\r\n  if (lvl < 3) {\r\n    nxtBtn.style.display = 'flex';\r\n    nxtBtn.textContent   = lvlNextLabel(lvl + 1) + ' \u2192';\r\n  } else {\r\n    nxtBtn.style.display = 'none';\r\n  }\r\n}\r\n\r\nfunction retry() { setLevel(lvl); }\r\n\r\n\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\r\n   EXPOSITION GLOBALE (onclick inline)\r\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/\r\nwindow.exqzSetLevel = setLevel;\r\nwindow.exqzAnswer   = handleAnswer;\r\nwindow.exqzNext     = nextQuestion;\r\nwindow.exqzRetry    = retry;\r\nwindow.exqzNxtLvl   = function() { setLevel(lvl + 1); };\r\n\r\n\/* \u2500\u2500 D\u00e9marrage s\u00e9curis\u00e9 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n   setTimeout 0 : pousse l'ex\u00e9cution APR\u00c8S que le widget\r\n   Elementor a fini d'ins\u00e9rer le HTML dans le DOM.\r\n   Sans \u00e7a, getElementById() retourne null \u2192 TypeError \u2192 crash.\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\nfunction safeInit() {\r\n  if (!document.getElementById('exqz-qtext')) {\r\n    setTimeout(safeInit, 80); \/* r\u00e9essaie si le DOM n'est pas pr\u00eat *\/\r\n    return;\r\n  }\r\n  try { setLevel(1); } catch(e) { console.error('[Quiz Excel] init error:', e); }\r\n}\r\nsetTimeout(safeInit, 0);\r\n\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u25c8 NIVEAU BTS Quiz Excel \u2014 Fonctions avanc\u00e9es \ud83d\udcd7 Niveau d\u00e9butant \ud83d\udcd7 D\u00e9butant 20 questions \ud83d\udcd9 Interm\u00e9diaire 20 questions \ud83d\udcd5 Avanc\u00e9 20 questions Question 1 \/ 20 Score : 0 \/ 0 Chargement\u2026 A B C D Question suivante \u2192 0 \/ 20 \u2606\u2606\u2606 R\u00e9sultat \u21ba R\u00e9essayer ce niveau Niveau suivant \u2192<\/p>\n","protected":false},"author":1,"featured_media":837,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-945","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classe"],"_links":{"self":[{"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/posts\/945","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/comments?post=945"}],"version-history":[{"count":10,"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/posts\/945\/revisions"}],"predecessor-version":[{"id":1056,"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/posts\/945\/revisions\/1056"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/media\/837"}],"wp:attachment":[{"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/media?parent=945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/categories?post=945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.site-e-work.fr\/shop\/wp-json\/wp\/v2\/tags?post=945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}