From 36607734949d1736c36ed7b9f3a12a74d7a8ce86 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 15 Mar 2021 03:01:24 +0000
Subject: CTAN sync 202103150301

---
 .../contrib/profcollege/latex/ProfCollege.sty      | 5976 +++++++++++++-------
 1 file changed, 3959 insertions(+), 2017 deletions(-)

(limited to 'macros/latex/contrib/profcollege/latex/ProfCollege.sty')

diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
index 121428955b..215caf5503 100644
--- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty
+++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
@@ -1,65 +1,11 @@
 % Author     : Christophe Poulain
 % Licence    : Released under the LaTeX Project Public License v1.3c
 % or later, see http://www.latex-project.org/lppl.txtf
-%%%%%%%
-% 90 : Reprise d'une partie de la doc. Quelques ajouts.
-% 87-88 : amélioration \Thales. \Labyrinthe.
-% 85 : passage à lua.
-% 75 : plein de choses que j'ai oubliées :(
-% 71 : Possibilité de choisir les fontes pour les figures MP
-% 70 : Ajout de la commande \calculatrice. Coupure des calculs longs
-% pour la moyenne et médiane. Egalités remarquables pour le
-% développement. Tableau vide pour les stats.
-% 67 : préparation au dépôt sur ctan.org
-% 66 : Ajout de la commande \Ratio.
-% 62 : Refonte des commandes !\Result! - Ajout d'une commande \Result
-% dans SommeAngles. Rectification espace dans \Distri avec Reduction active.
-% 61 : Simplication d'une fraction en version longue :) - Ajout
-% d'options à la commande \lstinline!\Stat!. Ajout d'options à la
-% commande \lstinline!\Thales!.
-% 60 : Nouvelle présentation de la résolution d'une équation. Reprise
-% et ajout d'une clé à la commande \SommeAngles.
-% 59 : amélioration de la macro \Pythagore pour pouvoir enchaîner les
-% calculs. Amélioration de la macro \Reperage pour améliorer
-% la gestion de l'affichage sur les droites graduées.
-% 58 : ajout d'un affichage des angles dans les diagrammes circulaires.
-% 57 : ajout de la commande \Fraction. Ajout d'un VF dans la macro \QCM
-% 56 : ajout de commandes "utiles" :) / Modification de \SommeAngles
-% pour éviter les conflits.
-% 55 : ajout d'une clé \Cle{Longue} dans la commande \Décomposition
-% 54 : adaptations mineures :) à gmp
-% 53 : ajout de la commande \QFlash
-% 52 : ajout de la macro \QCM
-% 51 : ajout de la macro \Relie
-% 50 : Changement des clés.
-% 37 : Reprise de la macro \Distri pour qu'elle accepte des valeurs
-%décimales.
-% 36 : Ajout d'un développement numérique. Reprise de la décomposition
-% des nombres premiers (pour éviter conflit entre \newcount\c et la
-% commande \c... Suppression de "spurious blank"
-% 35 : Ajout d'une quatrième  version de présentation de la résolution
-% d'une  équation -  Nouvelle macro :  Puissances. Ajout  d'une option
-% \EFacteurs pour les  équations produit nul. Amélioration (rédaction)
-% de \FonctionAffine - Ajout de la couleur de fond paramétrable dans
-% les fleches PH et BH de \Propor
-% 34 : Ajout de la commande \ResultatTrigo, \ResultatThalesx... Suppression de spurious blank. Corrections typographiques. Reprise de l'affichage de la moyenne dans la commande \Stat
-% 33 : MAJ Distri : Problème d'espace en utilisant les nombres négatifs (1ere étape).
-% 32 : MAJ Pythagore : Ajout de la clé PUnite - Possibilité de récupérer la valeur numérique obtenue par la macro Pythagore - Justification des textes dans les bulles. Ajout d'un FlecheCoefDebut dans \Propor.
-% 31 : MAJ Pourcentage. Correction quelques bugs. Correction de \og spurious blank\fg. Oubli du RequirePackage{multido} :(
-% 29 : MAJ Trigo (figure reprise pour utiliser \num de siunitx)
-% 28 : Mise à jour de \Propor : flèches inversées \FlechesPH et \FlechesPB, homogénéité des flèches. Pourcentage.
-% 27 : ajout du repérage
-% 26 : ajout des schémas de proba + MAJ avec geometriesyr16 + MAJ Nombre premier.
-% 25 : ajout des formules
-% 24 : ajout d'une option pour les équations $X^2=a$
-% 23 : ajout d'une option pour les équations produit.
-% 22 : ajout d'une option TColonnes dans la macro Tableaux
-% 21 : Ajout d'une vérification dans la macro \ResolEquation - Correction de quelques bugs dans la résolution d'équation.
-% 20: ajout d'une macro simpliste (car pas beaucoup d'utilité) sur les fonctions.
-% 19 : Modification AAntécédent dans Affine + Amélioration Pythagore (Cas des triangles rectangles isocèles, dans le calcul de la longueur d'un côté)
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfCollege}[2021/01/30 v0.90 Aide pour l'utilisation de LaTeX au collège]
+\ProvidesPackage{ProfCollege}[2021/03/10 v0.95 Aide pour l'utilisation de LaTeX au collège]
+
+\RequirePackage{verbatim}
 
 \RequirePackage{mathtools}%Amélioration des rendus
 \RequirePackage{amssymb}
@@ -77,6 +23,14 @@
 \newcommand\speed[1]{\SI{#1}{\kmh}}
 \newcommand\Speed[1]{\SI[per-mode=symbol]{#1}{\kmh}}
 
+\DeclareSIUnit{\are}{a}
+\DeclareSIUnit{\annee}{an}
+\DeclareSIUnit{\mois}{mois}
+\DeclareSIUnit{\jour}{j}
+\DeclareSIUnit{\quintal}{q}
+\DeclareSIUnit{\octet}{o}
+\DeclareSIUnit{\fahrenheit}{\degree F}
+
 \RequirePackage[table,svgnames]{xcolor}%Gestion des couleurs
 \RequirePackage{xstring}%Gestion de chaines de caractères
 \RequirePackage{simplekv}%Gestion de paramètres sous forme de clés
@@ -90,24 +44,24 @@
 
 \if@shellescape
 \RequirePackage[shellescape,latex]{gmp}%inclusion de figures metapost "à la volée"%
-\gmpoptions{everymp={prologues:=3; input PfC-LaTeX; input PfC-Svgnames; input PfC-Constantes; input PfC-Geometrie;}}
+\gmpoptions{everymp={prologues:=3; input PfC-LaTeX; input PfC-Svgnames; input PfC-Constantes; input PfC-Geometrie; input PfC-Afficheur;}}
 \usempxclass{article}
+\usempxpackage{ProfCollege}
 \usempxpackage[utf8]{inputenc}
 \usempxpackage[T1]{fontenc}
 \usempxpackage{fourier}
 \usempxpackage[french]{babel}
 \usempxpackage{pifont}
-\usempxpackage[locale=FR]{siunitx}
 \else
 \RequirePackage[latex]{gmp}%inclusion de figures metapost "à la volée"%
-\gmpoptions{everymp={prologues:=3; input PfC-LaTeX; input PfC-Svgnames; input PfC-Constantes; input PfC-Geometrie;}}
+\gmpoptions{everymp={prologues:=3; input PfC-LaTeX; input PfC-Svgnames; input PfC-Constantes; input PfC-Geometrie; input PfC-Afficheur;}}
 \usempxclass{article}
+\usempxpackage{ProfCollege}
 \usempxpackage[utf8]{inputenc}
 \usempxpackage[T1]{fontenc}
 \usempxpackage{fourier}
 \usempxpackage[french]{babel}
 \usempxpackage{pifont}
-\usempxpackage[locale=FR]{siunitx}
 \fi
 
 \RequirePackage{xintexpr}
@@ -138,17 +92,15 @@
 \RequirePackage{stackengine}
 \RequirePackage[thicklines]{cancel}
 
-%\ifpdftex
-%\RequirePackage[babel=true,kerning=true]{microtype}%Pour gérer le souci du ; dans tikz avec pdftex...
-%\fi
+\RequirePackage{nicematrix}%pour le tableur
 
 % https://stackoverflow.com/questions/3391103/how-to-make-the-grayed-round-box-using-tiks
 \RequirePackage{environ}
+%
 
-%%% 80
 \ifluatex
 \RequirePackage{luamplib}
-\everymplib{input PfC-Svgnames; input PfC-Constantes; input PfC-Geometrie; beginfig(1);}
+\everymplib{input PfC-Svgnames; input PfC-Constantes; input PfC-Geometrie; input PfC-Afficheur; beginfig(1);}
 \everyendmplib{endfig;}
 \fi
 
@@ -180,9 +132,9 @@
       \hfil\crcr #1\crcr}}\,}
 \catcode`\@=12
 
-%%%%%%%%%%%%%%%%%%%%%
+%%%
 %% Commandes "utiles"
-%%%%%%%%%%%%%%%%%%%%%
+%%%
 %encadrer avec des "sommets arrondis"
 \newsavebox{\logobox}
 
@@ -217,9 +169,28 @@
   }
 }
 
-%%%%%%%%%%%%%%%%%
+\newcommand\MultiCol[2]{%
+  \setsepchar[*]{/}%
+  \readlist*\ListeNombreCol{#1}%
+  \setsepchar[*]{§}%
+  \readlist*\ListeContenuCol{#2}%
+  \xintFor* ##1 in {\xintSeq {1}{\ListeNombreCollen}}\do{%
+    \begin{minipage}{\ListeNombreCol[##1]\linewidth}
+      \ListeContenuCol[##1]
+    \end{minipage}%
+    \xintifboolexpr{##1<\ListeNombreCollen}{\hfill}{}%
+  }%
+}%
+
+\newcommand\Demain{%
+  \advance\day by 1%
+  \today%
+  \advance\day by -1%
+}
+
+%%%
 % Tables Addition-Multiplication
-%%%%%%%%%%%%%%%%%
+%%%
 \setKVdefault[Tables]{Addition=false,Multiplication=true,Seul=false,Debut=0,Fin=10,Couleur=white}
 
 % pour mémoire
@@ -303,7 +274,6 @@
   }%
 }%
 
-
 \newcommand\Tables[2][]{%
   \useKVdefault[Tables]%
   \setKV[Tables]{#1}%
@@ -322,15 +292,82 @@
   }%
 }%
 
-%%%%%%%%%%%%%%
+%%%
+% Rangement des nombres
+%%%
+\setKVdefault[ClesRgt]{Croissant,Decroissant=false,Strict,Fraction=false,Details=false}
+
+\DTLgnewdb{mtnumedb}%
+\DTLgnewdb{mtnumeretourdb}%
+
+\newcommand\Rangement[2][]{%
+  \useKVdefault[ClesRgt]%
+  \setKV[ClesRgt]{#1}%
+  \ifboolKV[ClesRgt]{Fraction}{%
+    \setsepchar[*]{,*/}%\ignoreemptyitems%
+    \readlist*\ListeRgt{#2}%
+    % on cherche le dénominateur commun
+    \ppcm=1\relax
+    \foreachitem\x\in\ListeRgt{%
+      \PPCM{\fpeval{\ListeRgt[\xcnt,2]}}{\fpeval{\the\ppcm}}%
+    }%
+    % On crée la liste des rangements.
+    \DTLcleardb{mtnumedb}%
+    % on les trie pour les ranger par ordre croissant
+    \foreachitem\x\in\ListeRgt{%
+      \DTLnewrow{mtnumedb}%
+      \itemtomacro\ListeRgt[\xcnt,1]\y%
+      \DTLnewdbentry{mtnumedb}{Numeric}{\fpeval{\y*\the\ppcm/\ListeRgt[\xcnt,2]}}%
+    }%
+    % On trie
+    \ifboolKV[ClesRgt]{Decroissant}{%
+      % On trie la liste
+      \dtlsort{Numeric=descending}{mtnumedb}{\dtlicompare}%
+      \ifboolKV[ClesRgt]{Details}{\ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=Numeric}{\frac{\num{\numeroDonnee}}{\num{\the\ppcm}}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{>}{\geqslant}}}}}{%
+        \ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=Numeric}{\Simplification{\numeroDonnee}{\ppcm}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{>}{\geqslant}}}}%
+      }
+    }{%
+      % On trie la liste
+      \dtlsort{Numeric}{mtnumedb}{\dtlicompare}%
+      \ifboolKV[ClesRgt]{Details}{%
+        \ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=Numeric}{\frac{\num{\numeroDonnee}}{\num{\the\ppcm}}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}%
+      }{%
+        \ensuremath{\DTLforeach{mtnumedb}{\numeroDonnee=Numeric}{\Simplification{\numeroDonnee}{\ppcm}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}%
+      }
+    }%
+  }{%
+    \setsepchar{,}\ignoreemptyitems%
+    \readlist*\ListeRgt{#2}%
+    % on crée la base de données des valeurs
+    \DTLcleardb{mtdb}%
+    % on les trie pour les ranger par ordre croissant
+    \foreachitem\x\in\ListeRgt{%
+      \DTLnewrow{mtdb}%
+      \itemtomacro\ListeRgt[\xcnt]\y%
+      \DTLnewdbentry{mtdb}{Numeric}{\y}%
+    }%
+    % 
+    \ifboolKV[ClesRgt]{Decroissant}{%
+      % On trie la liste
+      \dtlsort{Numeric=descending}{mtdb}{\dtlicompare}%
+      \ensuremath{\DTLforeach{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{>}{\geqslant}}}}%
+    }{%
+      % On trie la liste
+      \dtlsort{Numeric}{mtdb}{\dtlicompare}%
+      \ensuremath{\DTLforeach{mtdb}{\numeroDonnee=Numeric}{\num{\numeroDonnee}\DTLiflastrow{}{\ifboolKV[ClesRgt]{Strict}{<}{\leqslant}}}}%
+    }%
+  }
+}%
+
+%%%
 % Labyrinthe
-%%%%%%%%%%%%%%
+%%%
 \setKVdefault[Labyrinthe]{Lignes=6,Colonnes=3,Longueur=4,Hauteur=2,Passages=false,EcartH=1,EcartV=1,CouleurF=gray!50,Texte=\color{black}}
 
 \newcommand\Labyrinthe[3][]{%
   \useKVdefault[Labyrinthe]%
   \setKV[Labyrinthe]{#1}%
-  \setsepchar[*]{,*/}%\ignoreemptyitems%
+  \setsepchar[*]{,*/}%
   \readlist*\ListeLaby{#2}%
   \ifboolKV[Labyrinthe]{Passages}{%
     \readlist*\ListeLabySol{#3}%
@@ -393,21 +430,21 @@
       définitions de {\ttfamily Colonnes} et {\ttfamily Lignes} !}}%
 }
 
-%%%%%%%%%%%%%%%
+%%%
 % Calculatrice
-%%%%%%%%%%%%%%%
+%%%
 %https://tex.stackexchange.com/questions/290321/mimicking-a-calculator-inputs-and-screen
-\definecolor{lightorange}{rgb}{0.9,0.4,0}
-\definecolor{lightestorange}{rgb}{1,0.8,0.5}
-\definecolor{darkorange}{rgb}{0.2,0.1,0}
-
-\colorlet{blackened}{black!90!white}
-\colorlet{blackish}{black!70!white}
-\colorlet{greyish}{black!60!white}
-\colorlet{whiteish}{white}
-\colorlet{orangeish}{yellow!90!red}
-\colorlet{greenish}{green!16!gray}
-\colorlet{redish}{red!80!black}
+\definecolor{lightorange}{rgb}{0.9,0.4,0}%
+\definecolor{lightestorange}{rgb}{1,0.8,0.5}%
+\definecolor{darkorange}{rgb}{0.2,0.1,0}%
+
+\colorlet{blackened}{black!90!white}%
+\colorlet{blackish}{black!70!white}%
+\colorlet{greyish}{black!60!white}%
+\colorlet{whiteish}{white}%
+\colorlet{orangeish}{yellow!90!red}%
+\colorlet{greenish}{green!16!gray}%
+\colorlet{redish}{red!80!black}%
 
 \tcbset{calbackground/.style={
     enhanced,
@@ -427,7 +464,7 @@
     colbacklower=greenish,
     colframe=white,
     autoparskip,
-  }}
+  }}%
 
 \newtcbox{\KY}[1][]{
   enhanced,
@@ -444,7 +481,7 @@
   fontupper=\footnotesize\sffamily,
   coltext=orangeish,
   before upper=\vrule width 0pt height 2ex depth 1ex\relax,
-}
+}%
 
 \newtcbox{\KYm}[1][]{
   enhanced,
@@ -462,7 +499,7 @@
   coltext=orangeish,
   before upper=\vrule width 0pt height 2ex depth 1ex\relax$,
   after upper=$,
-}
+}%
 
 \newtcbox{\KN}{
   enhanced,
@@ -479,9 +516,7 @@
   fontupper=\footnotesize\sffamily,
   coltext=whiteish,
   before upper=\vrule width 0pt height 2ex depth 1ex\relax,
-}
-
-\parindent0pt
+}%
 
 \newtcolorbox{calc}[1][]{%
   enhanced,bicolor,
@@ -504,13 +539,13 @@
     at (frame.north east) {#1};}
 }
 
-\def\MPCalculatrice#1#2{
+\def\MPCalculatrice#1#2#3{
   % #1 Calcul %2 réponse
   \ifluatex
    \mplibforcehmode
   \begin{mplibcode}
     input PfC-Calculatrice;
-    LCD(#1)(#2);
+    LCD(#1)(#2)(#3);
   \end{mplibcode}
   \else
   \begin{mpost}[mpsettings={input PfC-Calculatrice;}]
@@ -519,7 +554,7 @@
   \fi
 }
 
-\setKVdefault[ClesCalculatrice]{Ecran=false}
+\setKVdefault[ClesCalculatrice]{Ecran=false,NbLignes=0}
 
 \newcommand\Calculatrice[2][]{%
   \setstackgap{L}{0.775\baselineskip}%
@@ -528,7 +563,7 @@
   \ifboolKV[ClesCalculatrice]{Ecran}{%
     \setsepchar[*]{,*/}%
     \readlist\ListeCalc{#2}%
-    \MPCalculatrice{\ListeCalc[1,1]}{\ListeCalc[1,2]}%
+    \MPCalculatrice{\ListeCalc[1,1]}{\ListeCalc[1,2]}{\useKV[ClesCalculatrice]{NbLignes}}%
   }{%
     \setsepchar[*]{,*/}%
     \readlist\ListeCalc{#2}%
@@ -538,34 +573,49 @@
   \setstackgap{L}{\baselineskip}%
 }%
 
-
-%%%%%%%%%%%%%%%%
-%%% Questions Flash
-%%%%%%%%%%%%%%%%
+%%%
+% Questions Flash
+%%%
 \tcbset{Expression/.style={colback=white,valign=center,left=0mm,right=0mm,top=1mm,bottom=1mm,colframe=white}}%
 \tcbset{ExpressionSerie1/.style={colback=\useKV[ClesFlash]{Couleur1},left=0mm,right=0mm,top=1mm,bottom=1mm}}%
 \tcbset{ExpressionSerie2/.style={colback=\useKV[ClesFlash]{Couleur2},left=0mm,right=0mm,top=1mm,bottom=1mm}}%
 \tcbset{ExpressionSerie3/.style={colback=\useKV[ClesFlash]{Couleur3},left=0mm,right=0mm,top=1mm,bottom=1mm}}
 \tcbset{ExpressionSerie4/.style={colback=\useKV[ClesFlash]{Couleur4},left=0mm,right=0mm,top=1mm,bottom=1mm}}
-\tcbset{BoiteExpression/.style={enhanced,nobeforeafter,tcbox raise
-        base,colback=white,right=3.5mm,left=3.5mm,halign=center,colframe=black}}
+\tcbset{BoiteExpression/.style={enhanced,nobeforeafter,tcbox raise base,colback=white,right=3.5mm,left=3.5mm,halign=center,colframe=black}}
 \newtcolorbox{CadreNombre}[1][]{%
   Expression,#1}
 
-\setKVdefault[ClesFlash]{Hauteur=0.2\textheight,Simple=false,Intrus=false,Kahout=false,Daily=false,Expression=false,Mental=false,Mesure=false,Heure=false,Decimal=false,Operation=Multiplie,Numeration=false,Evaluation=false,Pause=false,Couleur1=blue!10,Couleur2=orange!10,Couleur3=green!10,Couleur4=yellow!10}
+\setKVdefault[ClesFlash]{Hauteur=0.2\textheight,Simple=false,Intrus=false,Kahout=false,Daily=false,Expression=false,Mental=false,Mesure=false,Heure=false,Decimal=false,Operation=Multiplie,Numeration=false,Evaluation=false,Pause=false,Couleur1=blue!10,Couleur2=orange!10,Couleur3=green!10,Couleur4=yellow!10,Numerique=false,Seul=false}
 
 \newlength{\HauteurFlash}
 
-\tikzset{
-  arrow/.style={
-    draw,
-    minimum height=1.25cm,
-    inner sep=0.25em,
-    shape=signal,
-    signal from=west,
-    signal to=east,
-    signal pointer angle=150,
-  }
+\def\MPAfficheur#1#2#3{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    u:=0.5u;
+    draw Afficheur(#1 div10,0);
+    draw Afficheur(#1 mod10,0) shifted(u*(1,0));
+    draw Afficheur(10,0) shifted(u*(2,0));
+    draw Afficheur(#2 div10,0) shifted(u*(3,0));
+    draw Afficheur(#2 mod10,0) shifted(u*(4,0));
+    draw Afficheur(10,0) shifted(u*(5,0));
+    draw Afficheur(#3 div10,0) shifted(u*(6,0));
+    draw Afficheur(#3 mod10,0) shifted(u*(7,0));
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    u:=0.5u;
+    draw Afficheur(#1 div10,0);
+    draw Afficheur(#1 mod10,0) shifted(u*(1,0));
+    draw Afficheur(10,0) shifted(u*(2,0));
+    draw Afficheur(#2 div10,0) shifted(u*(3,0));
+    draw Afficheur(#2 mod10,0) shifted(u*(4,0));
+    draw Afficheur(10,0) shifted(u*(5,0));
+    draw Afficheur(#3 div10,0) shifted(u*(6,0));
+    draw Afficheur(#3 mod10,0) shifted(u*(7,0));
+  \end{mpost}
+  \fi
 }
 
 \def\MPHorloge#1#2#3{
@@ -683,7 +733,7 @@
 
 \newcommand\QFHeure{%
   \begin{CadreNombre}
-    {\Large L'HEURE DU JOUR est : }\raisebox{-0.9cm}{\MPHorloge{\NbHeures}{\NbMinutes}{\NbSecondes}}
+    {\Large L'HEURE DU JOUR est : }\ifboolKV[ClesFlash]{Numerique}{\raisebox{-0.3cm}{\MPAfficheur{\NbHeures}{\NbMinutes}{\NbSecondes}}}{\raisebox{-0.9cm}{{\MPHorloge{\NbHeures}{\NbMinutes}{\NbSecondes}}}}
     \ifboolKV[ClesFlash]{Pause}{\pause}{}
     \begin{tcolorbox}[ExpressionSerie1]
       $\square$ \textbf{\ListeFlash[1,2] :}
@@ -734,26 +784,37 @@
   \end{CadreNombre}
 }
 
+\tikzset{
+  arrow/.style={
+    draw,
+    minimum height=1.25cm,
+    inner sep=0.25em,
+    shape=signal,
+    signal from=west,
+    signal to=east,
+    signal pointer angle=150,
+  }
+}
+
 \newcommand\QFDaily{%
-    \begin{tikzpicture}
-      \begin{scope}[start chain=transition going right,node
-        distance=-\pgflinewidth]
-        \foreach \s in {1,...,\ListeFlashlen}{%
-          \xintifboolexpr{\s = 1}{%
-            \node[arrow,on chain] {\Huge\bfseries\ListeFlash[\s]};
-            \ifboolKV[ClesFlash]{Pause}{\pause}{}
+  \begin{tikzpicture}%
+    \begin{scope}[start chain=transition going right,node distance=-\pgflinewidth]%
+      \foreach \s in {1,...,\ListeFlashlen}{%
+        \xintifboolexpr{\s = 1}{%
+          \node[arrow,on chain] {\Huge\bfseries\ListeFlash[\s]};%
+          \ifboolKV[ClesFlash]{Pause}{\pause}{}%
+        }{%
+          \xintifboolexpr{\s = \ListeFlashlen}{%
+            \node[arrow,on chain] {\Huge\bfseries?};%
           }{%
-            \xintifboolexpr{\s = \ListeFlashlen}{%
-              \node[arrow,on chain] {\Huge\bfseries?};
-            }{%
-              \node[arrow,on chain] {\ListeFlash[\s]};
-              \ifboolKV[ClesFlash]{Pause}{\pause}{}
-            }
-          }
-        }
-      \end{scope}
-    \end{tikzpicture}
-}
+            \node[arrow,on chain] {\ListeFlash[\s]};%
+            \ifboolKV[ClesFlash]{Pause}{\pause}{}%
+          }%
+        }%
+      }%
+    \end{scope}%
+  \end{tikzpicture}%
+}%
 
 \newcommand\QFDecimal{%
   \begin{CadreNombre}
@@ -761,7 +822,7 @@
     \tcbox[BoiteExpression]{\num{\ListeFlash[1,1]}}
     \ifboolKV[ClesFlash]{Pause}{\pause}{}
     \begin{tcolorbox}[ExpressionSerie1]
-      $\square$ \textbf{\'Ecriture en fraction décimale :}
+      $\square$ \textbf{\'Ecris-le en fraction décimale :}
       \tcbox[BoiteExpression]{$\dfrac{\phantom{1000000}}{\phantom{1000000}}$}
     \end{tcolorbox}
     \ifboolKV[ClesFlash]{Pause}{\pause}{}
@@ -845,264 +906,296 @@
   \end{CadreNombre}
 }
 
+\newcommand\BoiteFlash[1]{%
+  \ifx\bla#1\bla%
+  \tcbox[BoiteExpression]{\phantom{10000000}}%
+  \else
+  \tcbox[BoiteExpression]{#1}%
+  \fi
+}
+
+\newcommand\QFVide{%
+  \begin{CadreNombre}
+    {\ListeFlash[1]}
+    \xintFor* ##1 in {\xintSeq {1}{\ListeFlashlen-1}}\do{%
+      \ifboolKV[ClesFlash]{Pause}{\pause}{}
+      \begin{tcolorbox}[ExpressionSerie##1]
+        \ListeFlash[1+##1]
+      \end{tcolorbox}
+    }
+  \end{CadreNombre}
+}
+
 \newcommand\QFlash[2][]{%
-  \useKVdefault[ClesFlash]
-  \setKV[ClesFlash]{#1}
-  \setlength{\HauteurFlash}{\useKV[ClesFlash]{Hauteur}}
-  \colorlet{CouleurUn}{\useKV[ClesFlash]{Couleur1}}
-  \colorlet{CouleurDeux}{\useKV[ClesFlash]{Couleur2}}
-  \colorlet{CouleurTrois}{\useKV[ClesFlash]{Couleur3}}
-  \colorlet{CouleurQuatre}{\useKV[ClesFlash]{Couleur4}}
+  \useKVdefault[ClesFlash]%
+  \setKV[ClesFlash]{#1}%
+  \setlength{\HauteurFlash}{\useKV[ClesFlash]{Hauteur}}%
+  \colorlet{CouleurUn}{\useKV[ClesFlash]{Couleur1}}%
+  \colorlet{CouleurDeux}{\useKV[ClesFlash]{Couleur2}}%
+  \colorlet{CouleurTrois}{\useKV[ClesFlash]{Couleur3}}%
+  \colorlet{CouleurQuatre}{\useKV[ClesFlash]{Couleur4}}%
   \ifboolKV[ClesFlash]{Evaluation}{%
-    \ifboolKV[ClesFlash]{Numeration}{%
-      \setsepchar[*]{,*/}%
+    \ifboolKV[ClesFlash]{Seul}{%
+      \setsepchar[*]{/}%
       \readlist*\ListeFlash{#2}%
-      \QFNumeration%
+      \QFVide%
     }{%
-      \ifboolKV[ClesFlash]{Heure}{%
+      \ifboolKV[ClesFlash]{Numeration}{%
         \setsepchar[*]{,*/}%
         \readlist*\ListeFlash{#2}%
-        \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]%
-        \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]%
-        \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]%
-        \QFHeure%
+        \QFNumeration%
       }{%
-        \ifboolKV[ClesFlash]{Mesure}{%
+        \ifboolKV[ClesFlash]{Heure}{%
           \setsepchar[*]{,*/}%
           \readlist*\ListeFlash{#2}%
-          \QFMesure%
+          \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]%
+          \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]%
+          \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]%
+          \QFHeure%
         }{%
-          \ifboolKV[ClesFlash]{Daily}{%
-            \setsepchar[*]{/}%
+          \ifboolKV[ClesFlash]{Mesure}{%
+            \setsepchar[*]{,*/}%
             \readlist*\ListeFlash{#2}%
-            \QFDaily%
+            \QFMesure%
           }{%
-            \ifboolKV[ClesFlash]{Decimal}{%
-              \setsepchar[*]{,*/}%
+            \ifboolKV[ClesFlash]{Daily}{%
+              \setsepchar[*]{/}%
               \readlist*\ListeFlash{#2}%
-              \begin{frame}
-                \QFDecimal%
-              \end{frame}
+              \QFDaily%
             }{%
-              \ifboolKV[ClesFlash]{Mental}{%
+              \ifboolKV[ClesFlash]{Decimal}{%
                 \setsepchar[*]{,*/}%
                 \readlist*\ListeFlash{#2}%
-                \QFMental%
+                \QFDecimal%
               }{%
-                \ifboolKV[ClesFlash]{Expression}{%
+                \ifboolKV[ClesFlash]{Mental}{%
                   \setsepchar[*]{,*/}%
                   \readlist*\ListeFlash{#2}%
-                  \QFExpression%
+                  \QFMental%
                 }{%
-                  \setsepchar[*]{/}%
-                  \readlist*\ListeFlash{#2}%
-                  \ifboolKV[ClesFlash]{Simple}{%
-                    \ListeFlash[1]
-                    \begin{tcolorbox}[valign=center]
-                      \ListeFlash[2]
-                    \end{tcolorbox}
+                  \ifboolKV[ClesFlash]{Expression}{%
+                    \setsepchar[*]{,*/}%
+                    \readlist*\ListeFlash{#2}%
+                    \QFExpression%
                   }{%
-                    \setsepchar[*]{*/}%
+                    \setsepchar[*]{/}%
                     \readlist*\ListeFlash{#2}%
-                    \ifboolKV[ClesFlash]{Kahout}{%
-                      \setsepchar[*]{*/}%
-                      \readlist*\ListeFlash{#2}%
-                      \begin{tcolorbox}[halign=center,valign=center]
-                        \ListeFlash[1,1]
+                    \ifboolKV[ClesFlash]{Simple}{%
+                      \ListeFlash[1]
+                      \begin{tcolorbox}[valign=center]
+                        \ListeFlash[2]
                       \end{tcolorbox}
-                      % \par
-                      \begin{multicols}{4}
-                        \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center]
-                          \ListeFlash[1,2]
-                        \end{tcolorbox}
-                        % \hfill%
-                        \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center]
-                          \ListeFlash[1,3]
-                        \end{tcolorbox}
-                        % \hfill%
-                        \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center]
-                          \ListeFlash[1,4]
-                        \end{tcolorbox}
-                        % \hfill%
-                        \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center]
-                          \ListeFlash[1,5]
-                        \end{tcolorbox}
-                      \end{multicols}
                     }{%
                       \setsepchar[*]{*/}%
                       \readlist*\ListeFlash{#2}%
-                      \begin{tcolorbox}[halign=center,valign=center]
-                        \ListeFlash[1,1]
-                      \end{tcolorbox}
-                      \begin{multicols}{4}
-                        \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center]
-                          \ListeFlash[1,2]
-                        \end{tcolorbox}
-                        \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center]
-                          \ListeFlash[1,3]
-                        \end{tcolorbox}
-                        \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center]
-                          \ListeFlash[1,4]
+                      \ifboolKV[ClesFlash]{Kahout}{%
+                        \setsepchar[*]{*/}%
+                        \readlist*\ListeFlash{#2}%
+                        \begin{tcolorbox}[halign=center,valign=center]
+                          \ListeFlash[1,1]
                         \end{tcolorbox}
-                        \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center]
-                          \ListeFlash[1,5]
+                        % \par
+                        \begin{multicols}{4}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center]
+                            \ListeFlash[1,2]
+                          \end{tcolorbox}
+                          % \hfill%
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center]
+                            \ListeFlash[1,3]
+                          \end{tcolorbox}
+                          % \hfill%
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center]
+                            \ListeFlash[1,4]
+                          \end{tcolorbox}
+                          % \hfill%
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center]
+                            \ListeFlash[1,5]
+                          \end{tcolorbox}
+                        \end{multicols}
+                      }{%
+                        \setsepchar[*]{*/}%
+                        \readlist*\ListeFlash{#2}%
+                        \begin{tcolorbox}[halign=center,valign=center]
+                          \ListeFlash[1,1]
                         \end{tcolorbox}
-                      \end{multicols}
+                        \begin{multicols}{4}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                            \ListeFlash[1,2]
+                          \end{tcolorbox}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                            \ListeFlash[1,3]
+                          \end{tcolorbox}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center]
+                            \ListeFlash[1,4]
+                          \end{tcolorbox}
+                          \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                            \ListeFlash[1,5]
+                          \end{tcolorbox}
+                        \end{multicols}
+                      }%
                     }%
                   }%
                 }%
               }%
-            }
+            }%
           }%
         }%
       }%
     }%
   }{%
-    \ifboolKV[ClesFlash]{Numeration}{%
-      \setsepchar[*]{,*/}%
+    \ifboolKV[ClesFlash]{Seul}{%
+      \setsepchar[*]{/}%
       \readlist*\ListeFlash{#2}%
       \begin{frame}
-        \QFNumeration%
+        \QFVide%
       \end{frame}
     }{%
-      \ifboolKV[ClesFlash]{Heure}{%
+      \ifboolKV[ClesFlash]{Numeration}{%
         \setsepchar[*]{,*/}%
         \readlist*\ListeFlash{#2}%
-        \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]%
-        \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]%
-        \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]%
         \begin{frame}
-          \QFHeure%
+          \QFNumeration%
         \end{frame}
       }{%
-        \ifboolKV[ClesFlash]{Mesure}{%
+        \ifboolKV[ClesFlash]{Heure}{%
           \setsepchar[*]{,*/}%
           \readlist*\ListeFlash{#2}%
+          \StrMid{\ListeFlash[1,1]}{1}{2}[\NbHeures]%
+          \StrMid{\ListeFlash[1,1]}{3}{4}[\NbMinutes]%
+          \StrMid{\ListeFlash[1,1]}{5}{6}[\NbSecondes]%
           \begin{frame}
-            \QFMesure%
+            \QFHeure%
           \end{frame}
         }{%
-          \ifboolKV[ClesFlash]{Daily}{%
-            \setsepchar[*]{/}%
+          \ifboolKV[ClesFlash]{Mesure}{%
+            \setsepchar[*]{,*/}%
             \readlist*\ListeFlash{#2}%
             \begin{frame}
-              \QFDaily
+              \QFMesure%
             \end{frame}
           }{%
-            \ifboolKV[ClesFlash]{Decimal}{%
-              \setsepchar[*]{,*/}%
+            \ifboolKV[ClesFlash]{Daily}{%
+              \setsepchar[*]{/}%
               \readlist*\ListeFlash{#2}%
               \begin{frame}
-                \QFDecimal%
+                \QFDaily%
               \end{frame}
             }{%
-              \ifboolKV[ClesFlash]{Mental}{%
+              \ifboolKV[ClesFlash]{Decimal}{%
                 \setsepchar[*]{,*/}%
                 \readlist*\ListeFlash{#2}%
                 \begin{frame}
-                  \QFMental%
+                  \QFDecimal%
                 \end{frame}
-              }{
-                \ifboolKV[ClesFlash]{Expression}{%
+              }{%
+                \ifboolKV[ClesFlash]{Mental}{%
                   \setsepchar[*]{,*/}%
                   \readlist*\ListeFlash{#2}%
                   \begin{frame}
-                    \QFExpression%
+                    \QFMental%
                   \end{frame}
                 }{%
-                  \setsepchar[*]{/}%
-                  \readlist*\ListeFlash{#2}%
-                  \ifboolKV[ClesFlash]{Simple}{%
+                  \ifboolKV[ClesFlash]{Expression}{%
+                    \setsepchar[*]{,*/}%
+                    \readlist*\ListeFlash{#2}%
                     \begin{frame}
-                      \ListeFlash[1]
-                      \begin{tcolorbox}[valign=center]
-                        \ListeFlash[2]
-                      \end{tcolorbox}
+                      \QFExpression%
                     \end{frame}
                   }{%
-                    \setsepchar[*]{,*/}%
+                    \setsepchar[*]{/}%
                     \readlist*\ListeFlash{#2}%
-                    \ifboolKV[ClesFlash]{Kahout}{%
-                      \setsepchar[*]{*/}%
-                      \readlist*\ListeFlash{#2}%
+                    \ifboolKV[ClesFlash]{Simple}{%
                       \begin{frame}
+                        \ListeFlash[1]
                         \begin{tcolorbox}[valign=center]
-                          \ListeFlash[1,1]
+                          \ListeFlash[2]
                         \end{tcolorbox}
-                        \vfill
-                        \ifboolKV[ClesFlash]{Pause}{\pause}{}
-                        \begin{columns}[T]
-                          \begin{column}{0.45\linewidth}
-                            \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center]
-                              \ListeFlash[1,2]
-                            \end{tcolorbox}
-                          \end{column}
-                          \ifboolKV[ClesFlash]{Pause}{\pause}{}
-                          \begin{column}{0.45\linewidth}
-                            \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center]
-                              \ListeFlash[1,3]
-                            \end{tcolorbox}
-                          \end{column}
-                        \end{columns}
-                        \bigskip
-                        \ifboolKV[ClesFlash]{Pause}{\pause}{}
-                        \begin{columns}[T]
-                          \begin{column}{0.45\linewidth}
-                            \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center]
-                              \ListeFlash[1,4]
-                            \end{tcolorbox}
-                          \end{column}
-                          \ifboolKV[ClesFlash]{Pause}{\pause}{}
-                          \begin{column}{0.45\linewidth}
-                            \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center]
-                              \ListeFlash[1,5]
-                            \end{tcolorbox}
-                          \end{column}
-                        \end{columns}
                       \end{frame}
                     }{%
-                      \setsepchar[*]{*/}%
+                      \setsepchar[*]{,*/}%
                       \readlist*\ListeFlash{#2}%
-                      \begin{frame}
-                        \begin{tcolorbox}[valign=center]
-                          \ListeFlash[1,1]
-                        \end{tcolorbox}
-                        \vfill
-                        \ifboolKV[ClesFlash]{Pause}{\pause}{}
-                        \begin{columns}[T]
-                          \begin{column}{0.45\linewidth}
-                            \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center]
-                              \ListeFlash[1,2]
-                            \end{tcolorbox}
-                          \end{column}
+                      \ifboolKV[ClesFlash]{Kahout}{%
+                        \setsepchar[*]{*/}%
+                        \readlist*\ListeFlash{#2}%
+                        \begin{frame}
+                          \begin{tcolorbox}[valign=center]
+                            \ListeFlash[1,1]
+                          \end{tcolorbox}
+                          \vfill
                           \ifboolKV[ClesFlash]{Pause}{\pause}{}
-                          \begin{column}{0.45\linewidth}
-                            \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center]
-                              \ListeFlash[1,3]
-                            \end{tcolorbox}
-                          \end{column}
-                        \end{columns}
-                        \bigskip
-                        \ifboolKV[ClesFlash]{Pause}{\pause}{}
-                        \begin{columns}[T]
-                          \begin{column}{0.45\linewidth}
-                            \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center]
-                              \ListeFlash[1,4]
-                            \end{tcolorbox}
-                          \end{column}
+                          \begin{columns}[T]
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=CouleurUn,halign=center,valign=center]
+                                \ListeFlash[1,2]
+                              \end{tcolorbox}
+                            \end{column}
+                            \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=CouleurDeux,halign=center,valign=center]
+                                \ListeFlash[1,3]
+                              \end{tcolorbox}
+                            \end{column}
+                          \end{columns}
+                          \bigskip
                           \ifboolKV[ClesFlash]{Pause}{\pause}{}
-                          \begin{column}{0.45\linewidth}
-                            \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center]
-                              \ListeFlash[1,5]
-                            \end{tcolorbox}
-                          \end{column}
-                        \end{columns}
-                      \end{frame}
+                          \begin{columns}[T]
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,colback=CouleurTrois,halign=center,valign=center]
+                                \ListeFlash[1,4]
+                              \end{tcolorbox}
+                            \end{column}
+                            \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=CouleurQuatre,halign=center,valign=center]
+                                \ListeFlash[1,5]
+                              \end{tcolorbox}
+                            \end{column}
+                          \end{columns}
+                        \end{frame}
+                      }{%
+                        \setsepchar[*]{*/}%
+                        \readlist*\ListeFlash{#2}%
+                        \begin{frame}
+                          \begin{tcolorbox}[valign=center]
+                            \ListeFlash[1,1]
+                          \end{tcolorbox}
+                          \vfill
+                          \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                          \begin{columns}[T]
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurUn!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                                \ListeFlash[1,2]
+                              \end{tcolorbox}
+                            \end{column}
+                            \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurDeux!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                                \ListeFlash[1,3]
+                              \end{tcolorbox}
+                            \end{column}
+                          \end{columns}
+                          \bigskip
+                          \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                          \begin{columns}[T]
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurTrois!150,boxrule=1mm,colback=white,halign=center,valign=center]
+                                \ListeFlash[1,4]
+                              \end{tcolorbox}
+                            \end{column}
+                            \ifboolKV[ClesFlash]{Pause}{\pause}{}
+                            \begin{column}{0.45\linewidth}
+                              \begin{tcolorbox}[height=\HauteurFlash,colframe=CouleurQuatre!150,colback=white,boxrule=1mm,halign=center,valign=center]
+                                \ListeFlash[1,5]
+                              \end{tcolorbox}
+                            \end{column}
+                          \end{columns}
+                        \end{frame}
+                      }%
                     }%
                   }%
                 }%
               }%
-            }
+            }%
           }%
         }%
       }%
@@ -1110,12 +1203,209 @@
   }%
 }%
 
-%%%%%%%%%%%%%
-%%% Fractions
-%%%%%%%%%%%%%
-\setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Couleur=green,Reponse=false,Multiple=1,Hachures=false,Epaisseur=1}
+%%%
+% Fractions
+%%%
+\setKVdefault[ClesFraction]{Rayon=2cm,Disque,Regulier=false,Segment=false,Rectangle=false,Longueur=5cm,Largeur=2cm,Cotes=5,Triangle=false,Parts=3,Couleur=green,Reponse=false,Multiple=1,Hachures=false,Epaisseur=1}
+
+\def\MPFractionTriangle#1#2#3#4#5{
+  % #1 longueur du côté
+  % #2 partage sur le côté
+  % #3 num
+  % #4 déno (attention : = #2^2)
+  % #5 couleur
+  \ifluatex
+   \mplibforcehmode
+   \begin{mplibcode}
+     nbtriangle=0;
+
+     vardef Ligne(expr longueur)=
+     for k=0 upto 2*(longueur-1):
+     nbtriangle:=nbtriangle+1;
+     if (k mod 2)=0:
+     M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     else:
+     M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     fi;
+     endfor;
+     enddef;
+
+     pair A,B,C;
+     A=u*(0.5,0.5);
+     B-A=(#1,0);
+     C=rotation(B,A,60);
+
+     nbparts:=#2;
+
+     path M[];
+
+     path Tria,Trir;
+     Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+     Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+
+     for k=nbparts downto 1:
+     Ligne(k);
+     endfor;
+
+     for k=1 upto #3:
+     fill M[k] withcolor #5;
+     endfor;
+     
+     for k=1 upto nbparts:
+     trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
+     trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
+     trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
+     endfor;
+   \end{mplibcode}
+     \else
+     \begin{mpost}
+       nbtriangle=0;
+
+     vardef Ligne(expr longueur)=
+     for k=0 upto 2*(longueur-1):
+     nbtriangle:=nbtriangle+1;
+     if (k mod 2)=0:
+     M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     else:
+     M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     fi;
+     endfor;
+     enddef;
+
+     pair A,B,C;
+     A=u*(0.5,0.5);
+     B-A=(#1,0);
+     C=rotation(B,A,60);
+
+     nbparts:=#2;
+
+     path M[];
+
+     path Tria,Trir;
+     Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+     Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+
+     for k=nbparts downto 1:
+     Ligne(k);
+     endfor;
+
+     for k=1 upto #3:
+     fill M[k] withcolor #5;
+     endfor;
+     
+     for k=1 upto nbparts:
+     trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
+     trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
+     trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
+     endfor;
+     \end{mpost}
+   \fi
+ }
+
+ \def\MPFractionTriangleH#1#2#3#4#5#6{
+  % #1 longueur du côté
+  % #2 partage sur le côté
+  % #3 num
+  % #4 déno (attention : = #2^2)
+  % #5 couleur
+  % #6 épaisseur
+  \ifluatex
+   \mplibforcehmode
+   \begin{mplibcode}
+     nbtriangle=0;
+
+     vardef Ligne(expr longueur)=
+     for k=0 upto 2*(longueur-1):
+     nbtriangle:=nbtriangle+1;
+     if (k mod 2)=0:
+     M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     else:
+     M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     fi;
+     endfor;
+     enddef;
+
+     pair A,B,C;
+     A=u*(0.5,0.5);
+     B-A=(#1,0);
+     C=rotation(B,A,60);
+
+     nbparts:=#2;
+
+     path M[];
+
+     path Tria,Trir;
+     Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+     Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]);
 
-\def\MPFractionRegulier#1#2#3#4#5{
+     for k=nbparts downto 1:
+     Ligne(k);
+     endfor;
+
+     diversite=floor(uniformdeviate(#2**2-#3-1));
+     
+     for k=(1+diversite) upto (#3+diversite):
+     drawoptions(withpen pencircle scaled #6);
+     trace hachurage(M[k],90,0.2,0) withcolor #5;
+     endfor;
+     drawoptions(withpen pencircle scaled #6);
+     for k=1 upto nbparts:
+     trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
+     trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
+     trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
+     endfor;
+   \end{mplibcode}
+     \else
+     \begin{mpost}
+       nbtriangle=0;
+
+     vardef Ligne(expr longueur)=
+     for k=0 upto 2*(longueur-1):
+     nbtriangle:=nbtriangle+1;
+     if (k mod 2)=0:
+     M[nbtriangle]=(Tria shifted(0.5*k*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     else:
+     M[nbtriangle]=(Trir shifted(0.5*(k-1)*(1/nbparts)*(B-A)))  shifted((nbparts-longueur)*(1/nbparts)*(C-A));
+     fi;
+     endfor;
+     enddef;
+
+     pair A,B,C;
+     A=u*(0.5,0.5);
+     B-A=(#1,0);
+     C=rotation(B,A,60);
+
+     nbparts:=#2;
+
+     path M[];
+
+     path Tria,Trir;
+     Tria=polygone(A,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+     Trir=symetrie(Tria,(1/nbparts)[A,B],(1/nbparts)[A,C]);
+
+     for k=nbparts downto 1:
+     Ligne(k);
+     endfor;
+
+     diversite=floor(uniformdeviate(#2**2-#3-1));
+     
+     for k=(1+diversite) upto (#3+diversite):
+     drawoptions(withpen pencircle scaled #6);
+     trace hachurage(M[k],90,0.2,0) withcolor #5;
+     endfor;
+     drawoptions(withpen pencircle scaled #6);
+     
+     for k=1 upto nbparts:
+     trace segment((k/nbparts)[A,B],(k/nbparts)[A,C]);
+     trace segment((k/nbparts)[B,A],(k/nbparts)[B,C]);
+     trace segment((k/nbparts)[C,A],(k/nbparts)[C,B]);
+     endfor;
+     \end{mpost}
+   \fi
+ }
+ 
+
+\def\MPFractionRegulier#1#2#3#4#5{%
   % #1 rayon, #2 nb côtés, #3 num, #4 deno, #5 couleur
   \ifluatex
    \mplibforcehmode
@@ -1506,47 +1796,99 @@
   \fi
 }
 
+\def\MPFractionSegmentH#1#2#3#4#5{
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    pair A,C,B[];
+    A=(0,0);
+    C-A=(#1,0);
+    for k=0 upto #3:
+    B[k]=(k/#3)[A,C];
+    endfor;
+    drawoptions(withpen pencircle scaled#5);
+    draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2]+u*(0,-0.15),B[#2]+u*(0,0.15),B[0]+u*(0,0.15)),120,0.2,0)
+    withcolor #4;
+    drawoptions(withpen pencircle scaled#5);
+    draw segment(A,C);
+    marque_p:="tiretv";
+    for k=0 upto #3:
+    pointe(B[k]);
+    endfor;
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    pair A,C,B[];
+    A=(0,0);
+    C-A=(#1,0);
+    for k=0 upto #3:
+    B[k]=(k/#3)[A,C];
+    endfor;
+    drawoptions(withpen pencircle scaled#5);
+    draw hachurage(polygone(B[0]+u*(0,-0.15),B[#2]+u*(0,-0.15),B[#2]+u*(0,0.15),B[0]+u*(0,0.15)),120,0.2,0)
+    withcolor #4;
+    drawoptions(withpen pencircle scaled#5);
+    draw segment(A,C);
+    marque_p:="tiretv";
+    for k=0 upto #3:
+    pointe(B[k]);
+    endfor;
+  \end{mpost}
+  \fi
+}
+
 \newcommand\Fraction[2][]{%
   \useKVdefault[ClesFraction]%
   \setKV[ClesFraction]{#1}%
   \setsepchar[*]{/}%
   \readlist*\ListeFraction{#2}%
-  %\ListeFractionlen -- Le numérateur est \ListeFraction[1] et le
-  %dénominateur est \ListeFraction[2].
-  \ifboolKV[ClesFraction]{Regulier}{%
+  \ifboolKV[ClesFraction]{Triangle}{%
     \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
-    \ifboolKV[ClesFraction]{Hachures}{%
-      \MPFractionRegulierH{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}%
+      \ifboolKV[ClesFraction]{Hachures}{%
+        \MPFractionTriangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}%
       }{%
-        \MPFractionRegulier{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+        \MPFractionTriangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Parts}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
       }
   }{%
-    \ifboolKV[ClesFraction]{Segment}{%
+    \ifboolKV[ClesFraction]{Regulier}{%
       \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
-      \MPFractionSegment{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
-    }{
-      \ifboolKV[ClesFraction]{Rectangle}{%rectangle
+      \ifboolKV[ClesFraction]{Hachures}{%
+        \MPFractionRegulierH{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}%
+      }{%
+        \MPFractionRegulier{\useKV[ClesFraction]{Rayon}}{\useKV[ClesFraction]{Cotes}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+      }
+    }{%
+      \ifboolKV[ClesFraction]{Segment}{%
         \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
         \ifboolKV[ClesFraction]{Hachures}{%
-          \MPFractionRectangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}{\useKV[ClesFraction]{Epaisseur}}%
+          \MPFractionSegmentH{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}%
         }{%
-          \MPFractionRectangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}%
+          \MPFractionSegment{\useKV[ClesFraction]{Longueur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
         }
-      }{%disque
-        \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
-        \ifboolKV[ClesFraction]{Hachures}{%
-         \MPFractionDisqueH{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% 
-        }{%
-          \MPFractionDisque{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
-        }%
-      }%
+      }{
+        \ifboolKV[ClesFraction]{Rectangle}{%rectangle
+          \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+          \ifboolKV[ClesFraction]{Hachures}{%
+            \MPFractionRectangleH{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}{\useKV[ClesFraction]{Epaisseur}}%
+          }{%
+            \MPFractionRectangle{\useKV[ClesFraction]{Longueur}}{\useKV[ClesFraction]{Largeur}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Multiple}}%
+          }
+        }{%disque
+          \ifboolKV[ClesFraction]{Reponse}{}{\setKV[ClesFraction]{Couleur=white}}%
+          \ifboolKV[ClesFraction]{Hachures}{%
+            \MPFractionDisqueH{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}{\useKV[ClesFraction]{Epaisseur}}% 
+          }{%
+            \MPFractionDisque{\useKV[ClesFraction]{Rayon}}{\ListeFraction[1]}{\ListeFraction[2]}{\useKV[ClesFraction]{Couleur}}%
+          }%
+        }%
+      }%
     }%
   }%
 }%
 
-%%%%%%%%%%%%%%%%
-%%% Réponses à relier
-%%%%%%%%%%%%%%%%
+%%%
+% Réponses à relier
+%%%
 \setKVdefault[ClesRelie]{Solution=false,LargeurG=5cm,LargeurD=2cm,Stretch=1.5,Ecart=2cm}
 
 \newcommand\Relie[2][]{%
@@ -1603,63 +1945,86 @@
   \setcounter{NbRelie}{0}%
 }%
 
-%%%%%%%%%%%%%%%%%%
-%% QCM
-%%%%%%%%%%%%%%%%%%
-\setKVdefault[ClesQCM]{Reponses=3,Solution=false,Stretch=1,Largeur=2cm,Couleur=gray!15,Titre=false,Nom=Réponse,Alph=false,VF=false,Depart=1,Alterne=false}
+%%%
+% QCM
+%%%
+\setKVdefault[ClesQCM]{Reponses=3,Solution=false,Stretch=1,Largeur=2cm,Couleur=gray!15,Titre=false,Nom=Réponse,NomV=Vrai,NomF=Faux,Alph=false,AlphT=false,VF=false,Depart=1,Alterne=false,Noms={A/B/C},Multiple=false}
 \newlength{\LargeurQCM}
 \newcounter{QuestionQCM}
+\newcounter{TitreQCM}
 \newcommand\QCM[2][]{%
   \useKVdefault[ClesQCM]%
   \setKV[ClesQCM]{#1}%
   \setcounter{QuestionQCM}{\fpeval{\useKV[ClesQCM]{Depart}-1}}%
+  \setcounter{TitreQCM}{0}
   \setsepchar[*]{,*&}\ignoreemptyitems%
   \readlist*\ListeQCM{#2}%
-  \ifboolKV[ClesQCM]{VF}{%
-    \setKV[ClesQCM]{Reponses=2}
+  \ifboolKV[ClesQCM]{Multiple}{%
     \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
     \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
     \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+    \xdef\ListeNom{\useKV[ClesQCM]{Noms}}%
+    \setsepchar[*]{/}%
+    \readlist*\ListeNomsMul{\ListeNom}%
     \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
       \cline{2-\NBcases}%
-      \multicolumn{1}{c|}{}&Vrai&Faux\\
-      \hline%
-      \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
-      \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
-                           &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2=\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
-        }\\
-      }%
-      \hline%
-      \end{tabular}
-  }{%
-    \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
-    \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
-    \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
-    \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
-      \ifboolKV[ClesQCM]{Titre}{\cline{2-\NBcases}%
       \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
-      &\useKV[ClesQCM]{Nom} ##2}%
+      &\ListeNomsMul[##2]}%
       \\
-      }{}
       \hline%
       \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
-      \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
-      &\ifboolKV[ClesQCM]{Solution}{\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}\xintifboolexpr{##2=\ListeQCM[##1,\NumeroReponse]}{\cellcolor{\useKV[ClesQCM]{Couleur}}}{}}{}\ListeQCM[##1,##2+1]%
+      \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+      &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{\ListeQCM[##1,\fpeval{##2+1}]=1}{$\boxtimes$}{$\square$}}{$\square$}%
         }\\
       }%
       \hline%
     \end{tabular}%
+  }{%
+    \ifboolKV[ClesQCM]{VF}{%
+      \setKV[ClesQCM]{Reponses=2}
+      \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+      \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+      \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+      \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+        \cline{2-\NBcases}%
+        \multicolumn{1}{c|}{}&\useKV[ClesQCM]{NomV}&\useKV[ClesQCM]{NomF}\\
+        \hline%
+        \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+        \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+                             &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xintifboolexpr{##2=\ListeQCM[##1,2]}{$\boxtimes$}{$\square$}}{$\square$}%
+                               }\\
+        }%
+        \hline%
+      \end{tabular}
+    }{%
+      \renewcommand{\arraystretch}{\useKV[ClesQCM]{Stretch}}%
+      \setlength{\LargeurQCM}{\fpeval{(\linewidth-\useKV[ClesQCM]{Reponses}*(3*\tabcolsep+\useKV[ClesQCM]{Largeur}))}pt}%
+      \xdef\NBcases{\fpeval{\useKV[ClesQCM]{Reponses}+1}}%
+      \begin{tabular}{|p{\LargeurQCM}|*{\useKV[ClesQCM]{Reponses}}{>{\centering\arraybackslash}p{\useKV[ClesQCM]{Largeur}}|}}%
+        \ifboolKV[ClesQCM]{Titre}{\cline{2-\NBcases}%
+        \multicolumn{1}{c|}{}\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+        &\stepcounter{TitreQCM}\useKV[ClesQCM]{Nom} \ifboolKV[ClesQCM]{AlphT}{\Alph{TitreQCM}}{##2}}%
+        \\
+        }{}
+        \hline%
+        \xintFor* ##1 in {\xintSeq {1}{\ListeQCMlen}}\do{%
+        \stepcounter{QuestionQCM}\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Alph}{\textbf{\Alph{QuestionQCM}}/}{\textbf{\theQuestionQCM/}}~\ListeQCM[##1,1]\xintFor* ##2 in {\xintSeq {1}{\useKV[ClesQCM]{Reponses}}}\do{%
+        &\ifboolKV[ClesQCM]{Alterne}{\modulo{\theQuestionQCM}{2}\ifnum\remainder=0\cellcolor{gray!15}\fi}{}\ifboolKV[ClesQCM]{Solution}{\xdef\NumeroReponse{\fpeval{\useKV[ClesQCM]{Reponses}+2}}\xintifboolexpr{##2=\ListeQCM[##1,\NumeroReponse]}{\cellcolor{\useKV[ClesQCM]{Couleur}}}{}}{}\ListeQCM[##1,##2+1]%
+          }\\
+        }%
+        \hline%
+      \end{tabular}%
+    }%
   }%
 }
 
-%%%%%%%%%%%%%%%%%%%%%
-%%%% Somme des angles
-%%%%%%%%%%%%%%%%%%%%%
+%%%
+% Somme des angles
+%%%
 
-\setKVdefault[ClesSommeAngle]{Detail=true,Figure=false,Isocele=false}%
+\setKVdefault[ClesSommeAngle]{Detail=true,Isocele=false,Figure=false,FigureSeule=false,Angle=0}%
 
-% On définit la figure à utiliser
-\def\MPFigureSommeAngle#1#2#3#4#5#6{
+\def\MPFigureSommeAngle#1#2#3#4#5#6#7{
     % #1 Premier sommet
     % #2 Deuxième sommet
     % #3 Troisième sommet
@@ -1679,11 +2044,9 @@
     O - .5[A,B] = whatever * (B-A) rotated 90;
     O - .5[B,C] = whatever * (C-B) rotated 90;
     % On tourne pour éventuellement moins de lassitude :)
-    numeric Angle;
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
+    A:=A rotatedabout(O,#7);
+    B:=B rotatedabout(O,#7);
+    C:=C rotatedabout(O,#7);
     % On définit le centre du cercle inscrit
     (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
     (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
@@ -1715,16 +2078,13 @@
     draw Codelongueur(A,B,A,C,2);
     marque_s:=marque_s*2;
     label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
-    % label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
     label(btex ? etex,A+0.95u*unitvector(I-A));
     else:
-%    if (#4=180-#5-#4) or (#5=180-#5-#4):
     marque_s:=marque_s/2;
     draw Codelongueur(A,B,A,C,2);
     marque_s:=marque_s*2;
     label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A));
     label(btex ? etex,B+0.95u*unitvector(I-B));
-    % label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
     fi;
     else:
     label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
@@ -1747,11 +2107,9 @@
     O - .5[A,B] = whatever * (B-A) rotated 90;
     O - .5[B,C] = whatever * (C-B) rotated 90;
     % On tourne pour éventuellement moins de lassitude :)
-    numeric Angle;
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
+    A:=A rotatedabout(O,#7);
+    B:=B rotatedabout(O,#7);
+    C:=C rotatedabout(O,#7);
     % On définit le centre du cercle inscrit
     (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
     (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
@@ -1783,16 +2141,13 @@
     draw Codelongueur(A,B,A,C,2);
     marque_s:=marque_s*2;
     label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
-    % label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
     label(btex ? etex,A+0.95u*unitvector(I-A));
     else:
-    %if (#4=180-#5-#4) or (#5=180-#5-#4):
     marque_s:=marque_s/2;
     draw Codelongueur(A,B,A,C,2);
     marque_s:=marque_s*2;
     label(btex $\ang{#4}$ etex,A+0.95u*unitvector(I-A));
     label(btex ? etex,B+0.95u*unitvector(I-B));
-    % label(btex $\ang{#5}$ etex,C+0.95u*unitvector(I-C));
     fi;
     else:
     label(btex $\ang{#4}$ etex,B+0.95u*unitvector(I-B));
@@ -1863,33 +2218,45 @@
   \StrMid{#2}{2}{2}[\NomB]%
   \StrMid{#2}{3}{3}[\NomC]%
   % Figure ou pas ?
-  \ifboolKV[ClesSommeAngle]{Figure}{%
-    \begin{multicols}{2}%
-      {\em La figure est donnée à titre indicatif.}%
-      \ifx#3\bla\bla%
-      \xdef\Intermed{\fpeval{0.5*(180-#4)}}%
-      \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{\Intermed}{0}\]%
-      \else%
-      \ifx#4\bla\bla%
-      \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#3}{0}\]%
-      \else%
-      \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{1}\]%
-      \fi%
-      \fi%
-      \par\columnbreak\par%
-      % on rédige
+  \ifboolKV[ClesSommeAngle]{FigureSeule}{%
+    \ifx#3\bla\bla%
+    \xdef\Intermed{\fpeval{0.5*(180-#4)}}%
+    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{\Intermed}{0}{\useKV[ClesSommeAngle]{Angle}}%
+    \else%
+    \ifx#4\bla\bla%
+    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#3}{0}{\useKV[ClesSommeAngle]{Angle}}%
+    \else%
+    \MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{1}{\useKV[ClesSommeAngle]{Angle}}%
+    \fi%
+    \fi%
+  }{%
+    \ifboolKV[ClesSommeAngle]{Figure}{%
+      \begin{multicols}{2}%
+        {\em La figure est donnée à titre indicatif.}%
+        \ifx#3\bla\bla%
+        \xdef\Intermed{\fpeval{0.5*(180-#4)}}%
+        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#4}{\Intermed}{0}{\useKV[ClesSommeAngle]{Angle}}\]%
+        \else%
+        \ifx#4\bla\bla%
+        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#3}{0}{\useKV[ClesSommeAngle]{Angle}}\]%
+        \else%
+        \[\MPFigureSommeAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{1}{\useKV[ClesSommeAngle]{Angle}}\]%
+        \fi%
+        \fi%
+        \par\columnbreak\par%
+        % on rédige
+        \RedactionSomme[#1]{#2}{#3}{#4}%
+      \end{multicols}%
+    }{% on rédige
       \RedactionSomme[#1]{#2}{#3}{#4}%
-    \end{multicols}%
-  }{% on rédige
-    \RedactionSomme[#1]{#2}{#3}{#4}%
+    }%
   }%
 }%
 
-%%%%%%%%%%%%%%%% 
-%% Le théorème de Pythagore
-%%%%%%%%%%%%%%%% 
-% On définit le trousseau de clés optionnelles
-\setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,Angle=0,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,ValeurA=0,ValeurB=0,ValeurC=0}
+%%%
+% Le théorème de Pythagore
+%%%
+\setKVdefault[ClesPythagore]{Exact=false,AvantRacine=false,Racine=false,Entier=false,Egalite=false,Precision=2,Soustraction=false,Figure=false,FigureSeule=false,Angle=0,Reciproque=false,ReciColonnes=false,Faible=false,Unite=cm,EnchaineA=false,EnchaineB=false,EnchaineC=false,ValeurA=0,ValeurB=0,ValeurC=0}
 
 % On définit les figures à utiliser
 \def\MPFigurePytha#1#2#3#4#5#6{%
@@ -1926,19 +2293,20 @@
     decalage=3mm;
     if #4<#5 :
     if ypart(B)>ypart(O) :
-        label(btex \num{#4} etex rotated angle(C-B),1/2[C,B]-decalage*(unitvector(A-B)));
-        label(btex \num{#5} etex rotated(angle(B-A)),1/2[A,B]-decalage*(unitvector(C-B)));
-      else:
-        label(btex \num{#4} etex rotated angle(B-C),1/2[C,B]-decalage*(unitvector(A-B)));
-        label(btex \num{#5} etex rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
-      fi
+        label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+     else:
+        label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+     fi
     else:
       if ypart(B)>ypart(O) :
-        label(btex \num{#4} etex rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
-        label(btex \num{#5} etex rotated(angle(C-B)),1/2[C,B]-decalage*(unitvector(C-B)));
-      else:
-        label(btex \num{#4} etex rotated angle(A-C),1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
-        label(btex \num{#5} etex rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
+      label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+        label(btex \num{#5} etex,1/2[C,B]+decalage*(unitvector(B-A)));
+        else:
+        label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C)
+        rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
       fi;
     fi;
     label(btex #3 etex,1.2[O,A]);
@@ -1971,20 +2339,20 @@
     decalage=3mm;
     if #4<#5 :
     if ypart(B)>ypart(O) :
-        label(LATEX("\num{"&decimal(#4)&"}") rotated
-        angle(C-B),1/2[C,B]-decalage*(unitvector(A-B)));
-        label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(B-A)),1/2[A,B]-decalage*(unitvector(C-B)));
-      else:
-        label(LATEX("\num{"&decimal(#4)&"}") rotated angle(B-C),1/2[C,B]-decalage*(unitvector(A-B)));
-        label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
-      fi
+        label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+     else:
+        label(btex \num{#4} etex,1/2[C,B]-decalage*(unitvector(A-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+     fi
     else:
       if ypart(B)>ypart(O) :
-        label(LATEX("\num{"&decimal(#4)&"}") rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
-        label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(C-B)),1/2[C,B]-decalage*(unitvector(C-B)));
-      else:
-        label(LATEX("\num{"&decimal(#4)&"}") rotated angle(A-C),1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
-        label(LATEX("\num{"&decimal(#5)&"}") rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
+      label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+        label(btex \num{#5} etex,1/2[C,B]+decalage*(unitvector(B-A)));
+        else:
+        label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C)
+        rotated 90));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
       fi;
     fi;
     label(btex #3 etex,1.2[O,A]);
@@ -2018,23 +2386,18 @@
     A:=A rotatedabout(O,#7);
     B:=B rotatedabout(O,#7);
     C:=C rotatedabout(O,#7);
-    % On définit l'angle droit
-    % D-B=7*unitvector(C-B);
-    % F-B=7*unitvector(A-B);
-    % E-D=F-B;
     draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
     draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
     draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};    
-    % draw D--E--F;
     decalage=3mm;
     if ypart(B)>ypart(O) :
-    label(btex \num{#4} etex rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
-    label(btex \num{#5} etex rotated(angle(C-B)),1/2[C,B]-decalage*(unitvector(C-B)));
-    label(btex \num{#6} etex rotated(angle(B-A)),1/2[A,B]-decalage*(unitvector(C-B)));
+    label(btex \num{#4} etex,1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
+    label(btex \num{#5} etex,1/2[C,B]-decalage*(unitvector(C-B)));
+    label(btex \num{#6} etex,1/2[A,B]-decalage*(unitvector(C-B)));
     else:
-    label(btex \num{#4} etex rotated angle(A-C),1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
-    label(btex \num{#5} etex rotated(angle(A-B)),1/2[A,B]-decalage*(unitvector(C-B)));
-    label(btex \num{#6} etex rotated angle(C-B),1/2[C,B]-decalage*(unitvector(A-B)));
+    label(btex \num{#4} etex,1/2[A,C]+decalage*(unitvector(A-C) rotated 90));
+    label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
+    label(btex \num{#6} etex,1/2[C,B]-decalage*(unitvector(A-B)));
     fi;
     label(btex #1 etex,1.2[O,A]);
     label(btex #2 etex,1.2[O,B]);
@@ -2055,14 +2418,9 @@
     A:=A rotatedabout(O,#7);
     B:=B rotatedabout(O,#7);
     C:=C rotatedabout(O,#7);
-    % On définit l'angle droit
-    % D-B=7*unitvector(C-B);
-    % F-B=7*unitvector(A-B);
-    % E-D=F-B;
     draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
     draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
     draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};    
-    % draw D--E--F;
     decalage=3mm;
     if ypart(B)>ypart(O) :
     label(LATEX("\num{"&decimal(#4)&"}") rotated angle(C-A),1/2[C,A]-decalage*(unitvector(C-A) rotated 90));
@@ -2098,20 +2456,54 @@
     \opcopy{#4}{A2}%
     \opcopy{#5}{A3}%
     % On trace une figure ou pas ?
-    \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
-      \begin{multicols}{2}
-        {\em La figure est donnée à titre indicatif.}%
-        \[\MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}\]%
-        \par\columnbreak\par%
-        % on rédige
+    \ifboolKV[ClesPythagore]{FigureSeule}{%
+      \MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}%
+    }{%
+      \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
+        \begin{multicols}{2}
+          {\em La figure est donnée à titre indicatif.}%
+          \[\MPFigureReciPytha{\NomA}{\NomB}{\NomC}{#3}{#4}{#5}{\useKV[ClesPythagore]{Angle}}\]%
+          \par\columnbreak\par%
+          % on rédige
+          Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand côté.%
+          \ifboolKV[ClesPythagore]{ReciColonnes}{%
+            \[
+              \begin{array}{cccc|cccc}
+                &&\NomA\NomC^2&&&\NomA\NomB^2&+&\NomB\NomC^2\\
+                &&\opexport{A1}{\Aun}\num{\Aun}^2&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\
+                &&\opmul*{A1}{A1}{a1}&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\
+                &&\opexport{a1}{\Aun}\num{\Aun}&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\
+              \end{array}
+            \]
+          }{%
+            \[\left.
+                \begin{array}{l}
+                  \NomA\NomC^2=\opexport{A1}{\Aun}\num{\Aun}^2=\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}\\
+                  \\
+                  \NomA\NomB^2+\NomB\NomC^2=\opexport{A2}{\Adeux}\num{\Adeux}^2+\opexport{A3}{\Atrois}\num{\Atrois}^2=\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}+\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}=\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}\\
+                \end{array}
+              \right\}\opcmp{a1}{a4}\ifopeq\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2\fi\opcmp{a1}{a4}\ifopneq\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2\fi
+            \]
+          }
+          \ifboolKV[ClesPythagore]{Egalite}{%
+            \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore est vérifiée. Donc le triangle $#2$ est rectangle en $\NomB$.\fi%
+            \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore n'est pas vérifiée. Donc le triangle $#2$ n'est pas rectangle.\fi%
+          }{%
+            \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ est rectangle
+            en $\NomB$ d'après la réciproque du théorème de Pythagore.\fi%
+            \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors le
+            triangle $#2$ n'est pas rectangle\ifboolKV[ClesPythagore]{Faible}{.}{ d'après la contraposée du théorème de Pythagore.}\fi%
+          }
+        \end{multicols}
+      }{%
         Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand côté.%
         \ifboolKV[ClesPythagore]{ReciColonnes}{%
           \[
             \begin{array}{cccc|cccc}
-              \NomA\NomC^2&&&&&\NomA\NomB^2&+&\NomB\NomC^2\\
-              \opexport{A1}{\Aun}\num{\Aun}^2&&&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\
-              \opmul*{A1}{A1}{a1}&&&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\
-              \opexport{a1}{\Aun}\num{\Aun}&&&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\
+              &&\NomA\NomC^2&&&\NomA\NomB^2&+&\NomB\NomC^2\\
+              &&\opexport{A1}{\Aun}\num{\Aun}^2&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\
+              &&\opmul*{A1}{A1}{a1}&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\
+              &&\opexport{a1}{\Aun}\num{\Aun}&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\
             \end{array}
           \]
         }{%
@@ -2123,7 +2515,7 @@
               \end{array}
             \right\}\opcmp{a1}{a4}\ifopeq\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2\fi\opcmp{a1}{a4}\ifopneq\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2\fi
           \]
-        }
+        }%
         \ifboolKV[ClesPythagore]{Egalite}{%
           \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore est vérifiée. Donc le triangle $#2$ est rectangle en $\NomB$.\fi%
           \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore n'est pas vérifiée. Donc le triangle $#2$ n'est pas rectangle.\fi%
@@ -2132,39 +2524,9 @@
           en $\NomB$ d'après la réciproque du théorème de Pythagore.\fi%
           \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors le
           triangle $#2$ n'est pas rectangle\ifboolKV[ClesPythagore]{Faible}{.}{ d'après la contraposée du théorème de Pythagore.}\fi%
-        }
-      \end{multicols}
-    }{%
-      Dans le triangle $#2$, $[\NomA\NomC]$ est le plus grand côté.%
-      \ifboolKV[ClesPythagore]{ReciColonnes}{%
-        \[
-          \begin{array}{cccc|cccc}
-            \NomA\NomC^2&&&&&\NomA\NomB^2&+&\NomB\NomC^2\\
-            \opexport{A1}{\Aun}\num{\Aun}^2&&&&&\opexport{A2}{\Adeux}\num{\Adeux}^2&+&\opexport{A3}{\Atrois}\num{\Atrois}^2\\
-            \opmul*{A1}{A1}{a1}&&&&&\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}&+&\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}\\
-            \opexport{a1}{\Aun}\num{\Aun}&&&&&\multicolumn{3}{c}{\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}}\\
-          \end{array}
-        \]
-      }{%
-        \[\left.
-            \begin{array}{l}
-              \NomA\NomC^2=\opexport{A1}{\Aun}\num{\Aun}^2=\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}\\
-              \\
-              \NomA\NomB^2+\NomB\NomC^2=\opexport{A2}{\Adeux}\num{\Adeux}^2+\opexport{A3}{\Atrois}\num{\Atrois}^2=\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}+\opmul*{A3}{A3}{a3}\opexport{a3}{\Atrois}\num{\Atrois}=\opadd*{a2}{a3}{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}\\
-            \end{array}
-          \right\}\opcmp{a1}{a4}\ifopeq\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2\fi\opcmp{a1}{a4}\ifopneq\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2\fi
-        \]
-      }
-      \ifboolKV[ClesPythagore]{Egalite}{%
-        \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore est vérifiée. Donc le triangle $#2$ est rectangle en $\NomB$.\fi%
-        \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors l'égalité de Pythagore n'est pas vérifiée. Donc le triangle $#2$ n'est pas rectangle.\fi%
-      }{%
-        \opcmp{a1}{a4}\ifopeq Comme $\NomA\NomC^2=\NomA\NomB^2+\NomB\NomC^2$, alors le triangle $#2$ est rectangle
-        en $\NomB$ d'après la réciproque du théorème de Pythagore.\fi%
-        \opcmp{a1}{a4}\ifopneq Comme $\NomA\NomC^2\not=\NomA\NomB^2+\NomB\NomC^2$, alors le
-        triangle $#2$ n'est pas rectangle\ifboolKV[ClesPythagore]{Faible}{.}{ d'après la contraposée du théorème de Pythagore.}\fi%
-      }
-    }
+        }%
+      }%
+    }%
   }{%
     % [xlop] paramètres de calcul
     \opcopy{#3}{A1}%
@@ -2175,74 +2537,73 @@
     \StrMid{#2}{2}{2}[\NomB]%
     \StrMid{#2}{3}{3}[\NomC]%
     % On trace une figure ou pas ?
-    \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
-      \begin{multicols}{2}%
-        {\em La figure est donnée à titre indicatif.}%
-        \[\MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}\]
-        \par\columnbreak\par%
+    \ifboolKV[ClesPythagore]{FigureSeule}{%
+      \MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}
+    }{%
+      \ifboolKV[ClesPythagore]{Figure}{%Utilisation obligatoire de l'option --shell-escape de la compilation
+        \begin{multicols}{2}%
+          {\em La figure est donnée à titre indicatif.}%
+          \[\MPFigurePytha{\NomA}{\NomB}{\NomC}{#3}{#4}{\useKV[ClesPythagore]{Angle}}\]
+          \par\columnbreak\par%
+          % On démarre la résolution
+          \ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'égalité de Pythagore est vérifiée :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
+          }%
+          \xintifboolexpr{#3<#4 || #3=#4}{%\ifnum#3<#4%
+            \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
+            \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
+            \begin{align*}
+              \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+              \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+              \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+              \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+              \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+              \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+            \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+              }%
+            \end{align*}
+          }{%\else%
+            \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
+            \begin{align*}
+              \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
+              \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
+              \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+              \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
+              \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+              \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+              \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+            \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+              }%
+            \end{align*}
+          }%\fi%
+        \end{multicols}
+      }{%
         % On démarre la résolution
         \ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'égalité de Pythagore est vérifiée :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
         }%
         \xintifboolexpr{#3<#4 || #3=#4}{%\ifnum#3<#4%
-          \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
           \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
           \begin{align*}
             \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
             \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
             \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
             \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
-            \ifboolKV[ClesPythagore]{AvantRacine}{}{%
-            \\
-            \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
-            \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+          \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+            \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+          \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
             }
           \end{align*}
-        }{%\else%
+        }{%\else
           \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
-          \begin{align*}
-            \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
-            \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
-            \ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}&=\NomA\NomB^2+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
-            \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
-            \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
-            \ifboolKV[ClesPythagore]{AvantRacine}{}{%
-            \\
-            \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
-            \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
-            }
-          \end{align*}
-        }%\fi%
-      \end{multicols}
-    }{%
-      % On démarre la résolution
-      \ifboolKV[ClesPythagore]{Egalite}{Comme le triangle $#2$ est rectangle en $\NomB$, alors l'égalité de Pythagore est vérifiée :}{Dans le triangle $#2$ rectangle en $\NomB$, le th\'eor\`eme de Pythagore permet d'\'ecrire :%
-      }%
-      \xintifboolexpr{#3<#4 || #3=#4}{%\ifnum#3<#4%
-        \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2+#4^2),\useKV[ClesPythagore]{Precision})}}%
-        \begin{align*}
-          \NomA\NomC^2&=\NomA\NomB^2+\NomB\NomC^2\\
-          \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opcopy{\useKV[ClesPythagore]{ValeurA}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}+\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
-          \NomA\NomC^2&=\ifboolKV[ClesPythagore]{EnchaineA}{\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}+\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
-          \NomA\NomC^2&=\opadd*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
-          \ifboolKV[ClesPythagore]{AvantRacine}{}{%
-          \\
-          \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomC&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
-          \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomC&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomC&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
-          }
-        \end{align*}
-      }{%\else
-        \xdef\ResultatPytha{\fpeval{round(sqrt(#3^2-#4^2),\useKV[ClesPythagore]{Precision})}}%
-        \ifboolKV[ClesPythagore]{Soustraction}{%
-          \begin{align*}
+          \ifboolKV[ClesPythagore]{Soustraction}{%
+            \begin{align*}
               \NomA\NomB^2&=\NomA\NomC^2-\NomB\NomC^2\\
               \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opexport{A1}{\Aun}\num{\Aun}^2}-\ifboolKV[ClesPythagore]{EnchaineB}{\opcopy{\useKV[ClesPythagore]{ValeurB}}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}{\opexport{A2}{\Adeux}\num{\Adeux}^2}\\
               \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
-            \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
-            \ifboolKV[ClesPythagore]{AvantRacine}{}{%
-            \\
-            \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
-            \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
-            }
+              \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
+              \ifboolKV[ClesPythagore]{AvantRacine}{}{%
+              \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}
+                                                               \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+              }
             \end{align*}
           }{%
             \begin{align*}
@@ -2252,20 +2613,20 @@
               \NomA\NomB^2&=\ifboolKV[ClesPythagore]{EnchaineC}{\opcopy{\useKV[ClesPythagore]{ValeurC}}{a1}\opexport{a1}{\Aun}\num{\Aun}}{\opmul*{A1}{A1}{a1}\opexport{a1}{\Aun}\num{\Aun}}-\ifboolKV[ClesPythagore]{EnchaineB}{\opexport{a2}{\Adeux}\num{\Adeux}}{\opmul*{A2}{A2}{a2}\opexport{a2}{\Adeux}\num{\Adeux}}\\
               \NomA\NomB^2&=\opsub*{a1}{a2}{a3}\opexport{a3}{\Atrois}\num{\Atrois}%\\
               \ifboolKV[ClesPythagore]{AvantRacine}{}{%
-              \\
-              \ifboolKV[ClesPythagore]{Entier}{}{\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}\\}
-              \ifboolKV[ClesPythagore]{Racine}{}{\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
+              \ifboolKV[ClesPythagore]{Entier}{}{\\\NomA\NomB&=\sqrt{\opexport{a3}{\Atrois}\num{\Atrois}}}%
+                                                               \ifboolKV[ClesPythagore]{Racine}{}{\\\ifboolKV[ClesPythagore]{Exact}{\NomA\NomB&=\opsqrt[maxdivstep=3]{a3}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}{\NomA\NomB&\approx\opsqrt[maxdivstep=5]{a3}{a4}\opround{a4}{pres}{a4}\opunzero{a4}\opexport{a4}{\Aquatre}\num{\Aquatre}~\text{\useKV[ClesPythagore]{Unite}}}}%\\
               }
             \end{align*}
           }%
-      }%\fi%
+        }%\fi%
+      }%
     }%
   }%
 }%
 
-%%%%%%%%%%%%%%%%%
-%% Distributivité
-%%%%%%%%%%%%%%%%%
+%%%
+% Distributivité
+%%%
 % https://tex.stackexchange.com/questions/168972/draw-arrows-to-show-multiplication-pattern-distributive-property/169278?noredirect=1 
 \newcommand{\Tikzmark}[1]{%
   \tikz[remember picture,baseline,inner sep=0pt]{%
@@ -2303,8 +2664,7 @@
 % y a dans un "seul calcul".
 \setcounter{NbCalculDistri}{0}
 
-\setKVdefault[ClesDistributivite]{Etape=1,Lettre=x,Fleches=false,AideMul=false,Reduction=false,AideAdda=false,AideAddb=false,CouleurAide=red,CouleurReduction=black,CouleurFH=blue,CouleurFB=red,Somme=false,Difference=false,RAZ=false,Oppose=false,All=false,NomExpression=A,Fin=4,Numerique=false,Remarquable=false,Echange=0}%,AideAdd=false
-                                %inutile ?
+\setKVdefault[ClesDistributivite]{Etape=1,Lettre=x,Fleches=false,AideMul=false,Reduction=false,AideAdda=false,AideAddb=false,CouleurAide=red,CouleurReduction=black,CouleurFH=blue,CouleurFB=red,Somme=false,Difference=false,RAZ=false,Oppose=false,All=false,NomExpression=A,Fin=4,Numerique=false,Remarquable=false,Echange=0}%,AideAdd=false:inutile ?
 
 \newcommand\Affichage[4][]{%
   \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
@@ -2332,9 +2692,7 @@
     \useKVdefault[ClesDistributivite]%obligatoire car la macro n'est pas dans un groupe.
     \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
     \ifboolKV[ClesDistributivite]{RAZ}{\xdef\SommeA{0}\xdef\SommeB{0}\xdef\SommeC{0}%
-      % 80
       \setcounter{NbCalculDistri}{0}%
-      % fin 80
     }{}%
     \colorlet{DCAide}{\useKV[ClesDistributivite]{CouleurAide}}%
     \colorlet{DCReduction}{\useKV[ClesDistributivite]{CouleurReduction}}%
@@ -2343,193 +2701,183 @@
     \xintifboolexpr{\useKV[ClesDistributivite]{Echange}>0}{%
       \DistriEchange[#1]{#2}{#3}{#4}{#5}%
     }{%
-    \ifboolKV[ClesDistributivite]{Remarquable}{%
-      \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
-        \ifx\bla#4\bla(\Affichage{0}{#2}{#3})^2\else(\Affichage{0}{#2}{#3})(\Affichage{0}{#4}{#5})\fi%
-      }{}
-      \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2+2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-\num{#3}^2\fi}{}
-      \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
-        %80
-        \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
-        \stepcounter{NbCalculDistri}%
-        % fin 80
-        \ifx\bla#4\bla%
-        \xdef\Multi{\fpeval{#2*#2}}%
-        \xdef\Multij{\fpeval{#2*#3}}%
-        \xdef\Multik{\fpeval{#3*#2}}%
-        \xdef\Multil{\fpeval{#3*#3}}%
-        %% ils sont redéfinis pour pouvoir envisager la somme de deux
-        %% expressions à développer
-        \xdef\Multim{\fpeval{#2*#3+#3*#2}}%
-        \ifboolKV[ClesDistributivite]{Oppose}{%
-          \xdef\Multi{\fpeval{-\Multi}}%
-          \xdef\Multim{\fpeval{-\Multim}}%
-          \xdef\Multil{\fpeval{-\Multil}}%
-          \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
-          \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
-          \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
-        }{%
-          \Affichage{\Multi}{\Multim}{\Multil}%
-        }
-        \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#2}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#3*#3}}}{}%
-        \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#2}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#3*#3}}}{}%
-        \else%
-        \xdef\Multi{\fpeval{#2*#4}}%
-        \xdef\Multij{\fpeval{#2*#5}}%
-        \xdef\Multik{\fpeval{#3*#4}}%
-        \xdef\Multil{\fpeval{#3*#5}}%
-        %% ils sont redéfinis pour pouvoir envisager la somme de deux
-        %% expressions à développer
-        \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
-        \ifboolKV[ClesDistributivite]{Oppose}{%
-          \xdef\Multi{\fpeval{-\Multi}}%
-          \xdef\Multim{\fpeval{-\Multim}}%
-          \xdef\Multil{\fpeval{-\Multil}}%
-          \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
-          \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
-          \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
-        }{%
-          \Affichage{\Multi}{\Multim}{\Multil}%
-        }
-        \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
-        \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
-        \fi%
-      }{}%
-    }{%
-      \ifboolKV[ClesDistributivite]{Numerique}{%
-        \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
-          \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
-        }{%
-          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
-            \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+      \ifboolKV[ClesDistributivite]{Remarquable}{%
+        \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+          \ifx\bla#4\bla(\Affichage{0}{#2}{#3})^2\else(\Affichage{0}{#2}{#3})(\Affichage{0}{#4}{#5})\fi%
+        }{}
+        \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\ifx\bla#4\bla\xintifboolexpr{#3>0}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2+2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{#3}+\num{#3}^2}{\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-2\times\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesDistributivite]{Lettre}\times\num{\fpeval{0-#3}}+\num{\fpeval{0-#3}}^2}\else\xintifboolexpr{#2=1}{}{(\num{#2}}\useKV[ClesDistributivite]{Lettre}\xintifboolexpr{#2=1}{}{)}^2-\num{#3}^2\fi}{}
+        \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+          \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+          \stepcounter{NbCalculDistri}%
+          \ifx\bla#4\bla%
+          \xdef\Multi{\fpeval{#2*#2}}%
+          \xdef\Multij{\fpeval{#2*#3}}%
+          \xdef\Multik{\fpeval{#3*#2}}%
+          \xdef\Multil{\fpeval{#3*#3}}%
+          %% ils sont redéfinis pour pouvoir envisager la somme de deux
+          %% expressions à développer
+          \xdef\Multim{\fpeval{#2*#3+#3*#2}}%
+          \ifboolKV[ClesDistributivite]{Oppose}{%
+            \xdef\Multi{\fpeval{-\Multi}}%
+            \xdef\Multim{\fpeval{-\Multim}}%
+            \xdef\Multil{\fpeval{-\Multil}}%
+            \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+            \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+            \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
           }{%
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
-            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
-          }%
-        }%
+            \Affichage{\Multi}{\Multim}{\Multil}%
+          }
+          \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#2}}\xdef\SommeB{\fpeval{\SommeB+#2*#3+#3*#2}}\xdef\SommeC{\fpeval{\SommeC+#3*#3}}}{}%
+          \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#2}}\xdef\SommeB{\fpeval{\SommeB-#2*#3-#3*#2}}\xdef\SommeC{\fpeval{\SommeC-#3*#3}}}{}%
+          \else%
+          \xdef\Multi{\fpeval{#2*#4}}%
+          \xdef\Multij{\fpeval{#2*#5}}%
+          \xdef\Multik{\fpeval{#3*#4}}%
+          \xdef\Multil{\fpeval{#3*#5}}%
+          %% ils sont redéfinis pour pouvoir envisager la somme de deux
+          %% expressions à développer
+          \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+          \ifboolKV[ClesDistributivite]{Oppose}{%
+            \xdef\Multi{\fpeval{-\Multi}}%
+            \xdef\Multim{\fpeval{-\Multim}}%
+            \xdef\Multil{\fpeval{-\Multil}}%
+            \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+            \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+            \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+          }{%
+            \Affichage{\Multi}{\Multim}{\Multil}%
+          }
+          \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
+          \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
+          \fi%
+        }{}%
       }{%
-        \ifboolKV[ClesDistributivite]{All}{%
-          \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
-          \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}%
-          \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
-          {\NomLettre&=\Distri[Etape=##1]{#2}{#3}{#4}{#5}\\}%
-          \NomLettre&=\Distri[Etape=\NomFin]{#2}{#3}{#4}{#5}%
+        \ifboolKV[ClesDistributivite]{Numerique}{%
+          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=0}{%
+            \num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}\multido{\i=2+1}{4}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}%
+          }{%
+            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=-1}{%
+              \Distri[Numerique,Etape=3]{#2}{#3}{#4}{#5}\multido{\i=2+-1}{2}{=\Distri[Numerique,Etape=\i]{#2}{#3}{#4}{#5}}=\num{\fpeval{(#2+#3)*(#4+#5)}}%
+            }{%
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{\num{\fpeval{#2+#3}}\times\num{\fpeval{#4+#5}}}{}%
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{\num{\fpeval{#2+#3}}\times(\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#5)}})}{}%
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{\num{#3}\times\num{#4}\xintifboolexpr{#5>0}{+}{-}\num{#3}\times\num{\fpeval{abs(#5)}}}{}%
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{\num{\fpeval{#3*#4}}\xintifboolexpr{#5>0}{+}{-}\num{\fpeval{abs(#3*#5)}}}{}%
+              \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=5}{\num{\fpeval{#3*#4+#3*#5}}}{}%
+            }%
+          }%
         }{%
-          % Etape 1
-          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
-            \xintifboolexpr{#2=0}{%
-            }{\xintifboolexpr{#3=0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
-            \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
-            \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
-            \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
-            \xintifboolexpr{#2=0}{}{\xintifboolexpr{#3=0}{}{)}}%
-            % 
-            \ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
-            \xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
-            % 
-            \xintifboolexpr{\Multi=0}{\times%
-              \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
-            \Tikzmark{\Affichage[#1]{0}{#4}{0}}%
-            \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
-            \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
-            \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
-            \xintifboolexpr{\Multi=0}{%
-              \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
-            \ifboolKV[ClesDistributivite]{Fleches}{%
-              \xdef\Multi{\fpeval{#2*#3*#4*#5}}%
+          \ifboolKV[ClesDistributivite]{All}{%
+            \xdef\NomLettre{\useKV[ClesDistributivite]{NomExpression}}%
+            \xdef\NomFin{\useKV[ClesDistributivite]{Fin}}%
+            \xintFor* ##1 in {\xintSeq {1}{\useKV[ClesDistributivite]{Fin}-1}}\do
+            {\NomLettre&=\Distri[Etape=##1]{#2}{#3}{#4}{#5}\\}%
+            \NomLettre&=\Distri[Etape=\NomFin]{#2}{#3}{#4}{#5}%
+          }{%
+            % Etape 1
+            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=1}{%
+              \xintifboolexpr{#2=0}{%
+              }{\xintifboolexpr{#3=0}{}{(}}\Tikzmark{\Affichage[#1]{0}{#2}{0}}%
+              \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{+(}}{}%
+              \xintifboolexpr{#3>0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#3<0}{-}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#3)}}}%
+              \ifboolKV[ClesDistributivite]{AideAdda}{\mathcolor{DCAide}{)}}{}%
+              \xintifboolexpr{#2=0}{}{\xintifboolexpr{#3=0}{}{)}}%
+              % 
+              \ifboolKV[ClesDistributivite]{AideMul}{\times}{}%on aide dans le cas double
+              \xdef\Multi{\fpeval{#4*#5}}%affichage auto si (a+b)xk
+              % 
+              \xintifboolexpr{\Multi=0}{\times%
+                \xintifboolexpr{#4<0}{(}{\xintifboolexpr{#5<0}{(}{}}}{(}%
+              \Tikzmark{\Affichage[#1]{0}{#4}{0}}%
+              \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{+(}}{}%
+              \xintifboolexpr{#5>0}{\xintifboolexpr{#4=0}{}{+}}{\xintifboolexpr{#5<0}{\xintifboolexpr{#4=0}{{-}}{-}}{}}\Tikzmark{\Affichage[#1]{0}{0}{\fpeval{abs(#5)}}}%
+              \ifboolKV[ClesDistributivite]{AideAddb}{\mathcolor{DCAide}{)}}{}%
               \xintifboolexpr{\Multi=0}{%
-                \xdef\Multij{\fpeval{#2*#3}}%\relax
-                \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}%
-              }{%
-                \DrawArrow%
+                \xintifboolexpr{#4<0}{)}{\xintifboolexpr{#5<0}{)}{}}}{)}%
+              \ifboolKV[ClesDistributivite]{Fleches}{%
+                \xdef\Multi{\fpeval{#2*#3*#4*#5}}%
+                \xintifboolexpr{\Multi=0}{%
+                  \xdef\Multij{\fpeval{#2*#3}}%\relax
+                  \xintifboolexpr{\Multij=0}{\xintifboolexpr{#2=0}{\DrawArrowSimple{1}}{\DrawArrowSimple{0}}}{\xintifboolexpr{#4=0}{\DrawArrowSimpleRenverse{3}}{\DrawArrowSimpleRenverse{2}}}%
+                }{%
+                  \DrawArrow%
+                }%
+              }{}\setcounter{NbDistri}{0}%
+            }{}
+            % Etape 2
+            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
+              \xdef\Multi{\fpeval{#2*#4}}%
+              \xintifboolexpr{\Multi=0}{}{%
+                \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
+              }
+              \xdef\Multij{\fpeval{#2*#5}}%
+              \xintifboolexpr{\Multij=0}{}{%
+                \xintifboolexpr{\Multi=0}{}{+}%
+                \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
               }%
-            }{}\setcounter{NbDistri}{0}%
-          }{}
-          % Etape 2
-          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=2}{%
-            \xdef\Multi{\fpeval{#2*#4}}%
-            \xintifboolexpr{\Multi=0}{}{%
-              \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
-            }
-            \xdef\Multij{\fpeval{#2*#5}}%
-            \xintifboolexpr{\Multij=0}{}{%
-              \xintifboolexpr{\Multi=0}{}{+}%
-              \xintifboolexpr{#2<0}{(}{}\Affichage[#1]{0}{#2}{0}\xintifboolexpr{#2<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
-            }%
-            \xdef\Multik{\fpeval{#3*#4}}%
-            \xintifboolexpr{\Multik=0}{}{%
-              \xintifboolexpr{\Multi=0}{}{+}%
-              \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
-            }%
-            \xdef\Multil{\fpeval{#3*#5}}%
-            \xintifboolexpr{\Multil=0}{}{+%
-              \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
-            }%
-          }{}%
-          % Etape 3
-          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
-            %80
-            \stepcounter{NbCalculDistri}%
-            % fin 80
-            \xdef\Multi{\fpeval{#2*#4}}%
-            \xdef\Multij{\fpeval{#2*#5}}%
-            \xdef\Multik{\fpeval{#3*#4}}%
-            \xdef\Multil{\fpeval{#3*#5}}%
-            %% ils sont redéfinis pour pouvoir envisager la somme de deux
-            %% expressions à développer
-            %80
-            \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
-            %fin 80
-            \ifboolKV[ClesDistributivite]{Reduction}{\mathunderline{DCReduction}{%
-                \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{{}+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
-                \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+              \xdef\Multik{\fpeval{#3*#4}}%
+              \xintifboolexpr{\Multik=0}{}{%
+                \xintifboolexpr{\Multi=0}{}{+}%
+                \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#4<0}{(}{}\Affichage[#1]{0}{#4}{0}\xintifboolexpr{#4<0}{)}{}%
               }%
-            }{%
-              \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
-              \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
-            }%
-            \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
-          }{}%
-          % Etape 4
-          \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
-            \xdef\Multi{\fpeval{#2*#4}}%
-            \xdef\Multij{\fpeval{#2*#5}}%
-            \xdef\Multik{\fpeval{#3*#4}}%
-            \xdef\Multil{\fpeval{#3*#5}}%
-            %% ils sont redéfinis pour pouvoir envisager la somme de deux
-            %% expressions à développer
-            \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
-            %80
-            \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
-            \stepcounter{NbCalculDistri}%
-            %fin 80
-            \ifboolKV[ClesDistributivite]{Oppose}{%
-              \xdef\Multi{\fpeval{-\Multi}}%
-              \xdef\Multim{\fpeval{-\Multim}}%
-              \xdef\Multil{\fpeval{-\Multil}}%
-              \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
-              \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
-              \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
-            }{%
-              %80
+              \xdef\Multil{\fpeval{#3*#5}}%
+              \xintifboolexpr{\Multil=0}{}{+%
+                \xintifboolexpr{#3<0}{(}{}\Affichage[#1]{0}{0}{#3}\xintifboolexpr{#3<0}{)}{}\times\xintifboolexpr{#5<0}{(}{}\Affichage[#1]{0}{0}{#5}\xintifboolexpr{#5<0}{)}{}%
+              }%
+            }{}%
+            % Etape 3
+            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
+              \stepcounter{NbCalculDistri}%
+              \xdef\Multi{\fpeval{#2*#4}}%
+              \xdef\Multij{\fpeval{#2*#5}}%
+              \xdef\Multik{\fpeval{#3*#4}}%
+              \xdef\Multil{\fpeval{#3*#5}}%
+              %% ils sont redéfinis pour pouvoir envisager la somme de deux
+              %% expressions à développer
               \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
-              \xintifboolexpr{\Multim=0}{}{%
-                \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+              \ifboolKV[ClesDistributivite]{Reduction}{\mathunderline{DCReduction}{%
+                  \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{{}+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+                  \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
+                }%
+              }{%
+                \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\Affichage{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
+                \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{\xintifboolexpr{#2=0}{}{+}}\xintifboolexpr{\Multik<0}{(}{}\Affichage{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
               }%
-              \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil<0}{-\Affichage{0}{0}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%\Affichage{\Multi}{\Multim}{\Multil}%
-              % fin 80
-            }
-            \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
-            \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
-          }{}%
+              \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
+            }{}%
+            % Etape 4
+            \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=4}{%
+              \xdef\Multi{\fpeval{#2*#4}}%
+              \xdef\Multij{\fpeval{#2*#5}}%
+              \xdef\Multik{\fpeval{#3*#4}}%
+              \xdef\Multil{\fpeval{#3*#5}}%
+              %% ils sont redéfinis pour pouvoir envisager la somme de deux
+              %% expressions à développer
+              \xdef\Multim{\fpeval{#2*#5+#3*#4}}%
+              \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
+              \stepcounter{NbCalculDistri}%
+              \ifboolKV[ClesDistributivite]{Oppose}{%
+                \xdef\Multi{\fpeval{-\Multi}}%
+                \xdef\Multim{\fpeval{-\Multim}}%
+                \xdef\Multil{\fpeval{-\Multil}}%
+                \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{(}{}\Affichage{\Multi}{0}{0}\xintifboolexpr{\Multi<0}{)}{}}%
+                \xintifboolexpr{\Multim=0}{}{\xintifboolexpr{\Multim>0}{+}{+(}\Affichage{0}{\Multim}{0}\xintifboolexpr{\Multim<0}{)}{}}%
+                \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil>0}{+}{+(}\Affichage{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}}%
+              }{%
+                \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\Affichage{\Multi}{0}{0})}{\Affichage{\Multi}{0}{0}}}{\Affichage{\Multi}{0}{0}}%
+                \xintifboolexpr{\Multim=0}{}{%
+                  \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
+                }%
+                \xintifboolexpr{\Multil=0}{}{\xintifboolexpr{\Multil<0}{-\Affichage{0}{0}{\fpeval{-\Multil}}}{+\Affichage{0}{0}{\Multil}}}%
+              }
+              \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+#2*#4}}\xdef\SommeB{\fpeval{\SommeB+#2*#5+#3*#4}}\xdef\SommeC{\fpeval{\SommeC+#3*#5}}}{}%
+              \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-#2*#4}}\xdef\SommeB{\fpeval{\SommeB-#2*#5-#3*#4}}\xdef\SommeC{\fpeval{\SommeC-#3*#5}}}{}%
+            }{}%
+          }%
         }%
       }%
     }%
   }%
-  }%
 }%
 
 \newcommand{\Resultat}[1][]{%
@@ -2560,9 +2908,7 @@
     \useKVdefault[ClesDistributivite]%obligatoire car la macro n'est pas dans un groupe.
     \setKV[ClesDistributivite]{#1}%On lit les arguments optionnels
     \ifboolKV[ClesDistributivite]{RAZ}{\xdef\SommeA{0}\xdef\SommeB{0}\xdef\SommeC{0}%
-      % 80
       \setcounter{NbCalculDistri}{0}%
-      % fin 80
     }{}%
     \colorlet{DCAide}{\useKV[ClesDistributivite]{CouleurAide}}%
     \colorlet{DCReduction}{\useKV[ClesDistributivite]{CouleurReduction}}%
@@ -2583,10 +2929,8 @@
         \fi%
       }{}
       \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
-        % 80
         \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
         \stepcounter{NbCalculDistri}%
-        % fin 80
         \ifx\bla#4\bla%
         \xdef\Multi{\fpeval{#2*#2}}%
         \xdef\Multij{\fpeval{#2*#3}}%
@@ -2776,9 +3120,7 @@
           }{}          
           % Etape 3
           \xintifboolexpr{\useKV[ClesDistributivite]{Etape}=3}{%
-            % 80
             \stepcounter{NbCalculDistri}%
-            % fin 80
             \xdef\Multi{\fpeval{#2*#4}}%
             \xdef\Multij{\fpeval{#2*#5}}%
             \xdef\Multik{\fpeval{#3*#4}}%
@@ -2786,9 +3128,7 @@
             %% ils sont redéfinis pour pouvoir envisager la somme de deux
             %% expressions à développer
             \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1}{%
-              % 80
             \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}%
-            %fin 80\AffichageEchange{0}{\Multi}{0}%pas de soulignement de réduction ici
               \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{\Multij}{0}{0}\xintifboolexpr{\Multij<0}{)}{}}%
               \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{0}{\Multik}\xintifboolexpr{\Multik<0}{)}{}}%
               \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
@@ -2797,9 +3137,7 @@
               \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}%              
             }{}%
             \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=2}{%
-              % 80
             \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{0}{\Multi}{0})}{\AffichageEchange{0}{\Multi}{0}}}{\AffichageEchange{0}{\Multi}{0}}%
-            %fin 80\AffichageEchange{0}{\Multi}{0}%pas de soulignement de réduction ici
               \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{0}{\Multij}\xintifboolexpr{\Multij<0}{)}{}}%
               \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{\Multik}{0}{0}\xintifboolexpr{\Multik<0}{)}{}}%
               \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{\Multil}{0}\xintifboolexpr{\Multil<0}{)}{}%
@@ -2808,9 +3146,7 @@
               \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}%
             }{}%
             \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=3}{%
-              % 80
             \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multi<0}{(\AffichageEchange{\Multi}{0}{0})}{\AffichageEchange{\Multi}{0}{0}}}{\AffichageEchange{\Multi}{0}{0}}%
-            %fin 80\AffichageEchange{\Multi}{0}{0}%pas de soulignement de réduction ici
               \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multi=0}{}{+}\xintifboolexpr{\Multij<0}{(}{}\AffichageEchange{0}{\Multij}{0}\xintifboolexpr{\Multij<0}{)}{}}%
               \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multil=0}{\xintifboolexpr{#2=0}{}{+}}{+}\xintifboolexpr{\Multik<0}{(}{}\AffichageEchange{0}{\Multik}{0}\xintifboolexpr{\Multik<0}{)}{}}%
               \xintifboolexpr{\Multil=0}{}{+}\xintifboolexpr{\Multil<0}{(}{}\AffichageEchange{0}{0}{\Multil}\xintifboolexpr{\Multil<0}{)}{}%
@@ -2827,10 +3163,8 @@
             \xdef\Multil{\fpeval{#3*#5}}%
             %% ils sont redéfinis pour pouvoir envisager la somme de deux
             %% expressions à développer
-            % 80
             \xintifboolexpr{\theNbCalculDistri>1}{\setcounter{NbCalculDistri}{0}}{}%
             \stepcounter{NbCalculDistri}%
-            %fin 80
             \xintifboolexpr{\useKV[ClesDistributivite]{Echange}=1}{%
               \xdef\Multim{\fpeval{#2*#4+#3*#5}}%
               \ifboolKV[ClesDistributivite]{Oppose}{%
@@ -2841,13 +3175,11 @@
                  \xintifboolexpr{\Multimo=0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
                  \xintifboolexpr{\Multijo=0}{}{\xintifboolexpr{\Multijo>0}{+}{+(}\Affichage{0}{0}{\Multijo}\xintifboolexpr{\Multijo<0}{)}{}}%
               }{%
-                % 80
                 \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multik<0}{(\Affichage{\Multik}{0}{0})}{\Affichage{\Multik}{0}{0}}}{\Affichage{\Multik}{0}{0}}%
               \xintifboolexpr{\Multim=0}{}{%
                 \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
               }%
               \xintifboolexpr{\Multij=0}{}{\xintifboolexpr{\Multij<0}{-\Affichage{0}{0}{\fpeval{-\Multij}}}{+\Affichage{0}{0}{\Multij}}}%
-              % fin 80
               }%
                \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multik}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multij}}}{}%
                \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multik}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multij}}}{}%
@@ -2862,13 +3194,11 @@
                  \xintifboolexpr{\Multimo=0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
                  \xintifboolexpr{\Multiko=0}{}{\xintifboolexpr{\Multiko>0}{+}{+(}\Affichage{0}{0}{\Multiko}\xintifboolexpr{\Multiko<0}{)}{}}%
               }{%
-                % 80
                 \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multij<0}{(\Affichage{\Multij}{0}{0})}{\Affichage{\Multij}{0}{0}}}{\Affichage{\Multij}{0}{0}}%
               \xintifboolexpr{\Multim=0}{}{%
                 \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
               }%
               \xintifboolexpr{\Multik=0}{}{\xintifboolexpr{\Multik<0}{-\Affichage{0}{0}{\fpeval{-\Multik}}}{+\Affichage{0}{0}{\Multik}}}%
-              % fin 80\Affichage{\Multij}{\Multim}{\Multik}%
               }%
                \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multij}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multik}}}{}%
                \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multij}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multik}}}{}%
@@ -2883,13 +3213,11 @@
                  \xintifboolexpr{\Multimo=0}{}{\xintifboolexpr{\Multimo>0}{+}{+(}\Affichage{0}{\Multimo}{0}\xintifboolexpr{\Multimo<0}{)}{}}%
                  \xintifboolexpr{\Multio=0}{}{\xintifboolexpr{\Multio>0}{+}{+(}\Affichage{0}{0}{\Multio}\xintifboolexpr{\Multio<0}{)}{}}%
                }{%
-                 % 80
                 \xintifboolexpr{\theNbCalculDistri>1}{\xintifboolexpr{\Multil<0}{(\Affichage{\Multil}{0}{0})}{\Affichage{\Multil}{0}{0}}}{\Affichage{\Multil}{0}{0}}%
               \xintifboolexpr{\Multim=0}{}{%
                 \xintifboolexpr{\Multim>0}{+\Affichage{0}{\Multim}{0}}{-\Affichage{0}{\fpeval{-\Multim}}{0}}%
               }%
               \xintifboolexpr{\Multi=0}{}{\xintifboolexpr{\Multi<0}{-\Affichage{0}{0}{\fpeval{-\Multi}}}{+\Affichage{0}{0}{\Multi}}}%
-              % fin 80\Affichage{\Multil}{\Multim}{\Multi}%
               }
                \ifboolKV[ClesDistributivite]{Somme}{\xdef\SommeA{\fpeval{\SommeA+\Multil}}\xdef\SommeB{\fpeval{\SommeB+\Multim}}\xdef\SommeC{\fpeval{\SommeC+\Multi}}}{}%
                \ifboolKV[ClesDistributivite]{Difference}{\xdef\SommeA{\fpeval{\SommeA-\Multil}}\xdef\SommeB{\fpeval{\SommeB-\Multim}}\xdef\SommeC{\fpeval{\SommeC-\Multi}}}{}%
@@ -2901,9 +3229,9 @@
   }%
 }%
 
-%%%%%%%%%%%%%%%
-%Nombre Premier
-%%%%%%%%%%%%%%%
+%%%
+% Nombre Premier
+%%%
 \setKVdefault[ClesNombrePremier]{Tableau=false,TableauVertical=false,TableauVerticalVide=false,Exposant=false,Longue=false,All=false,Arbre=false,ArbreVide=false,ArbreComplet=false,Diviseurs=false,DiviseursT=false,Dot=\dotfill}
 
 \newcommand\Decomposition[2][]{%
@@ -2930,7 +3258,7 @@
     pair Ancre[];
     numeric decalage;
     decalage=10mm;
-    
+
     vardef PremierSimple(expr NB)=
     b:=2;
     depart:=NB;
@@ -3393,7 +3721,6 @@ vardef Positions(expr Step)=
           \dnpvv=\numexpr\dnpvv+1\relax
           \cnpvv=\numexpr\anpvv/\bnpvv\relax
           \anpvv=\cnpvv\relax
-          %\num{\the\bnpvv}%
         \else%
           \bnpvv=\numexpr\bnpvv+1\relax%
         \fi%
@@ -3419,7 +3746,6 @@ vardef Positions(expr Step)=
           \dnpmv=\numexpr\dnpmv+1\relax
           \cnpmv=\numexpr\anpmv/\bnpmv\relax
           \anpmv=\cnpmv\relax
-          %\num{\the\bnpmv}
         \else%
           \bnpmv=\numexpr\bnpmv+1\relax%
         \fi%
@@ -3469,7 +3795,7 @@ vardef Positions(expr Step)=
   \anp=#1\relax%
   \bnp=2\relax%
   \premier=-1\relax%
- % Pour déterminer le nombre d'étapes
+  % Pour déterminer le nombre d'étapes
   \whiledo{\anp > 1}{%
     \modulo{\the\anp}{\the\bnp}
     \ifnum\remainder=0\relax%
@@ -3479,7 +3805,7 @@ vardef Positions(expr Step)=
     \else%
       \bnp=\numexpr\bnp+1\relax%
       \fi%
-  }
+  }%
   \ifnum\premier=0%
     Le nombre \num{#1} est un nombre premier.%
   \else%
@@ -3536,22 +3862,21 @@ vardef Positions(expr Step)=
     \else%
       \ifnum\exposant>0\relax
         \num{\the\pileb}\ifnum\exposant>1 ^{\num{\the\exposant}}\fi\times%
-        %\pilea=\anp\relax
       \fi
       \bnp=\numexpr\bnp+1\relax%
       \pileb=\bnp\relax%
-      \exposant=0\relax
+      \exposant=0\relax%
     \fi%
-  }
+  }%
   \num{\the\pileb}\ifnum\exposant>1^{\num{\the\exposant}}\fi%
-  }
-}
+  }%
+}%
 
 \newcommand{\PremierLong}[1]{%
   %#1 : le nombre entier à tester
   \ensuremath{%
   \newcount\anpl\newcount\bnpl\newcount\cnpl%
-  \newcount\pilebl
+  \newcount\pilebl%
   \anpl=#1\relax%
   \bnpl=2\relax%
   \pilebl=2\relax%
@@ -3564,7 +3889,7 @@ vardef Positions(expr Step)=
     \else%
       \bnpl=\numexpr\bnpl+1\relax%
       \pilebl=\bnpl\relax%
-      \fi%
+    \fi%
     }
   }
 }
@@ -3635,9 +3960,9 @@ vardef Positions(expr Step)=
   }%
 }
 
-%%%%%%%%%%%%%%%%%%%
+%%%
 % Simplification
-%%%%%%%%%%%%%%%%%%%
+%%%
 \makeatletter%by christian Tellechea
 % Calcul du PGCD de #1 et #2
 \newcount\cnt@a\newcount\cnt@b\newcount\pgcd
@@ -3675,6 +4000,11 @@ vardef Positions(expr Step)=
         \numerateur=\valabsnum
         \denominateur=\valabsdeno
       \fi
+    \else
+      \ifnum\the\denominateur<0\relax
+        \numerateur=-\valabsnum
+        \denominateur=\valabsdeno
+      \fi
     \fi
     \ifnum\number#2=0\relax
       \text{\bfseries(???)}
@@ -3718,6 +4048,17 @@ vardef Positions(expr Step)=
   \else
   \valabsdeno=\number#2
   \fi
+  \ifnum\the\numerateur<0\relax
+    \ifnum\the\denominateur<0\relax
+      \numerateur=\valabsnum
+      \denominateur=\valabsdeno
+    \fi
+  \else
+    \ifnum\the\denominateur<0\relax
+      \numerateur=-\valabsnum
+      \denominateur=\valabsdeno
+    \fi
+  \fi
   \ifnum\number#2=0\relax
     \ensuremath{\text{\bfseries(???)}}
   \else
@@ -3743,49 +4084,50 @@ vardef Positions(expr Step)=
     \fi
 }
 
+\newcount\anpdc\newcount\bnpdc\newcount\cnpdc\newcount\dnpdc%
+\newcount\DivCom
 \newcommand\DiviseurCommun[2]{%
   % #1 : le premier nombre entier
-  % #2 : le deuxième nombre entier 
-  \newcount\anpdc\newcount\bnpdc\newcount\cnpdc%
+  % #2 : le deuxième nombre entier
+ % nombre 1 vaut #1 - Nombre 2 vaut #2
   \anpdc=#1%
   \cnpdc=#2%
   \bnpdc=2\relax%
-  \whiledo{\bnpdc<\anpdc}{%
-    \modulo{\the\anpdc}{\the\bnpdc}{}%
+  \dnpdc=\numexpr#1+1\relax%
+  \DivCom=1\relax%
+  \whiledo{\bnpdc<\dnpdc}{%
+    \modulo{\the\anpdc}{\the\bnpdc}\relax
     \ifnum\remainder=0%
-    \modulo{\the\cnpdc}{\the\bnpdc}{}
+    \modulo{\the\cnpdc}{\the\bnpdc}
     \ifnum\remainder=0%
-    \xdef\DivCom{\the\bnpdc}%
+    \DivCom=\bnpdc%
     \bnpdc=\anpdc%
     \else%
-    \xdef\DivCom{1}%
-    \bnpdc=\numexpr\bnpdc+1%
-    \fi%
+    \DivCom=1%
+    \fi
     \else%
-    \xdef\DivCom{1}%
-    \bnpdc=\numexpr\bnpdc+1%
+    \DivCom=1%
     \fi
+    \bnpdc=\numexpr\bnpdc+1\relax%
   }%
 }
 
 \newcommand\LongueSimplification[2]{%
-  \DiviseurCommun{#1}{#2}%
   \xdef\NumerateurDiv{#1}%
   \xdef\DenominateurDiv{#2}%
+  \DiviseurCommun{#1}{#2}%
   \ensuremath{%
-    \whiledo{\DivCom > 1}{%
-      \xdef\DivComa{\DivCom}\xdef\MulComa{\fpeval{\NumerateurDiv/\DivComa}}
-      \xdef\DivComb{\DivCom}\xdef\MulComb{\fpeval{\DenominateurDiv/\DivComb}}
-      \frac{\num{\DivComa}\times\num{\MulComa}}{\num{\DivComb}\times\num{\MulComb}}=\frac{\num{\MulComa}}{\num{\MulComb}}%
-      \xdef\NumerateurDiv{\MulComa}%
-      \xdef\DenominateurDiv{\MulComb}%
+    \whiledo{\DivCom>1}{%
+      \frac{\num{\fpeval{\NumerateurDiv/\the\DivCom}}\times\num{\the\DivCom}}{\num{\fpeval{\DenominateurDiv/\the\DivCom}}\times\num{\the\DivCom}}=\frac{\num{\fpeval{\NumerateurDiv/\DivCom}}}{\num{\fpeval{\DenominateurDiv/\DivCom}}}%
+      \xdef\NumerateurDiv{\fpeval{\NumerateurDiv/\DivCom}}%
+      \xdef\DenominateurDiv{\fpeval{\DenominateurDiv/\DivCom}}%
       \DiviseurCommun{\NumerateurDiv}{\DenominateurDiv}%
       \xintifboolexpr{\DivCom>1}{=}{}%
-    }
-  }
-}
+    }%
+  }%
+}%
 
-\setKVdefault[ClesSimplification]{Details=false,All=false,Longue=false,Fleches=false}
+\setKVdefault[ClesSimplification]{Details=false,All=false,Longue=false,Fleches=false,Contraire=0}
 
 \newcounter{NbFrac}%
 \setcounter{NbFrac}{0}%
@@ -3814,17 +4156,23 @@ vardef Positions(expr Step)=
       \draw[out=-45,in=-135,-stealth,transform canvas={yshift=-0.25em}] (pic cs:B-\theNbFrac) to node[midway,below]{\Listeb[1,2]}(pic cs:D-\theNbFrac);%
     \end{tikzpicture}%
   }{%
-    \ifboolKV[ClesSimplification]{Longue}{%
-      \LongueSimplification{#2}{#3}%
+    \xintifboolexpr{\useKV[ClesSimplification]{Contraire}>1}{%
+      \ensuremath{%
+        \frac{\num{#2}}{\num{#3}}=\frac{\num{#2}\times\num{\useKV[ClesSimplification]{Contraire}}}{\num{#3}\times\num{\useKV[ClesSimplification]{Contraire}}}=\frac{\num{\fpeval{\useKV[ClesSimplification]{Contraire}*#2}}}{\num{\fpeval{\useKV[ClesSimplification]{Contraire}*#3}}}%
+      }%
     }{%
-      \ifboolKV[ClesSimplification]{Details}{\SSimpli{#2}{#3}}{\ifboolKV[ClesSimplification]{All}{\ensuremath{\SSimpli{#2}{#3}=\SSimplifie{#2}{#3}}}{\SSimplifie{#2}{#3}}}%
+      \ifboolKV[ClesSimplification]{Longue}{%
+        \LongueSimplification{#2}{#3}%
+      }{%
+        \ifboolKV[ClesSimplification]{Details}{\SSimpli{#2}{#3}}{\ifboolKV[ClesSimplification]{All}{\ensuremath{\SSimpli{#2}{#3}=\SSimplifie{#2}{#3}}}{\SSimplifie{#2}{#3}}}%
+      }%
     }%
   }%
 }%
 
-%%%%%%%%%%%%%%%%%%%%%
-%%% Thales
-%%%%%%%%%%%%%%%%%%%%%
+%%%
+% Thales
+%%%
 \newcount\ppcm
 
 \newcommand\PPCM[2]{%
@@ -3832,10 +4180,10 @@ vardef Positions(expr Step)=
   \ppcm=\numexpr#1*#2/\pgcd\relax
 }
 
-\setKVdefault[ClesThales]{Calcul=true,Droites=false,Propor=false,Segment=false,Figure=false,Figurecroisee=false,Precision=2,Entier=false,Unite=cm,Reciproque=false,Produit=false,ChoixCalcul=0,Simplification,Redaction=false,Remediation=false}
+\setKVdefault[ClesThales]{Calcul=true,Droites=false,Propor=false,Segment=false,Figure=false,FigureSeule=false,Figurecroisee=false,FigurecroiseeSeule=false,Angle=0,Precision=2,Entier=false,Unite=cm,Reciproque=false,Produit=false,ChoixCalcul=0,Simplification,Redaction=false,Remediation=false}
 
 %On définit la figure à utiliser
-\def\MPFigThales#1#2#3#4#5{
+\def\MPFigThales#1#2#3#4#5#6{
     % #1 Premier sommet
     % #2 Deuxième sommet
     % #3 Troisième sommet
@@ -3855,15 +4203,10 @@ vardef Positions(expr Step)=
     O - .5[A,B] = whatever * (B-A) rotated 90;
     O - .5[B,C] = whatever * (C-B) rotated 90;
     % On tourne pour éventuellement moins de lassitude :)
-    numeric Angle;
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
-    % On définit le centre du cercle inscrit
-    %(I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
-    %(I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
-    %on dessine à main levée :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine à main levée :)
     path cotes[];
     cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
     cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
@@ -3909,14 +4252,10 @@ vardef Positions(expr Step)=
     O - .5[A,B] = whatever * (B-A) rotated 90;
     O - .5[B,C] = whatever * (C-B) rotated 90;
     % On tourne pour éventuellement moins de lassitude :)
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
-    % On définit le centre du cercle inscrit
-    %(I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
-    %(I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
-    %on dessine à main levée :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine à main levée :)
     path cotes[];
     cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
     cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
@@ -3953,7 +4292,7 @@ vardef Positions(expr Step)=
 }
 
 %On définit la figure à utiliser
-\def\MPFigReciThales#1#2#3#4#5{
+\def\MPFigReciThales#1#2#3#4#5#6{
     % #1 Premier sommet
     % #2 Deuxième sommet
     % #3 Troisième sommet
@@ -3973,15 +4312,10 @@ vardef Positions(expr Step)=
     O - .5[A,B] = whatever * (B-A) rotated 90;
     O - .5[B,C] = whatever * (C-B) rotated 90;
     % On tourne pour éventuellement moins de lassitude :)
-    numeric Angle;
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
-    % On définit le centre du cercle inscrit
-    %(I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
-    %(I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
-    %on dessine à main levée :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine à main levée :)
     path cotes[];
     cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
     cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
@@ -4015,14 +4349,10 @@ vardef Positions(expr Step)=
     O - .5[A,B] = whatever * (B-A) rotated 90;
     O - .5[B,C] = whatever * (C-B) rotated 90;
     % On tourne pour éventuellement moins de lassitude :)
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
-    % On définit le centre du cercle inscrit
-    %(I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
-    %(I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
-    %on dessine à main levée :)
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
+    % on dessine à main levée :)
     path cotes[];
     cotes1=A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
     cotes2=B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
@@ -4042,24 +4372,12 @@ vardef Positions(expr Step)=
     label(btex #5 etex,1.1[B,N]);
     fill (fullcircle scaled 0.75mm) shifted (cotes1 intersectionpoint cotes4);
     fill (fullcircle scaled 0.75mm) shifted (cotes3 intersectionpoint cotes4);
-%    pair I,J,K;
-%    I=1/2[M,N];
-%    J=1/2[B,C];
-%    K=1/2[I,J];
-%    path cd;
-%    cd=(fullcircle scaled 6mm) shifted K;
-%    drawoptions(withcolor 0.75*white);
-%    drawarrow reverse((I{dir(210+angle(I-J))}..{dir(150+angle(I-J))}K) cutafter cd);
-%    drawarrow reverse((J{dir(210+angle(J-I))}..{dir(150+angle(J-I))}K) cutafter cd);
-%    draw cd;
-%    label(btex $//$ etex ,K);
-%    drawoptions();
   \end{mpost}
   \fi
 }
 
 %On définit la deuxième figure à utiliser
-\def\MPFigThalesCroisee#1#2#3#4#5{%
+\def\MPFigThalesCroisee#1#2#3#4#5#6{%
     % #1 Premier sommet
     % #2 Deuxième sommet
     % #3 Troisième sommet
@@ -4079,11 +4397,9 @@ vardef Positions(expr Step)=
     B=A rotatedabout(O,130);
     C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
     % On tourne pour éventuellement moins de lassitude :)
-    numeric Angle;
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
     % on dessine à main levée :)
     M=1.4[B,A];
     N=1.4[C,A];
@@ -4102,7 +4418,6 @@ vardef Positions(expr Step)=
     (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
     (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
     %on labelise
-    %label(btex #1 etex,1.15[1/2[B,C],A]);
     label(btex #1 etex,I);
     label(btex #2 etex,1.2[M,B]);
     label(btex #3 etex,1.2[N,C]);
@@ -4136,10 +4451,9 @@ vardef Positions(expr Step)=
     B=A rotatedabout(O,130);
     C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
     % On tourne pour éventuellement moins de lassitude :)
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
     % on dessine à main levée :)
     M=1.4[B,A];
     N=1.4[C,A];
@@ -4158,7 +4472,6 @@ vardef Positions(expr Step)=
     (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
     (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
     %on labelise
-    %label(btex #1 etex,1.15[1/2[B,C],A]);
     label(btex #1 etex,I);
     label(btex #2 etex,1.2[M,B]);
     label(btex #3 etex,1.2[N,C]);
@@ -4183,7 +4496,7 @@ vardef Positions(expr Step)=
 }
 
 %On définit la deuxième figure à utiliser
-\def\MPFigReciThalesCroisee#1#2#3#4#5{%
+\def\MPFigReciThalesCroisee#1#2#3#4#5#6{%
   % #1 Premier sommet
     % #2 Deuxième sommet
     % #3 Troisième sommet
@@ -4203,11 +4516,9 @@ vardef Positions(expr Step)=
     B=A rotatedabout(O,130);
     C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
     % On tourne pour éventuellement moins de lassitude :)
-    numeric Angle;
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
     % on dessine à main levée :)
     M=1.4[B,A];
     N=1.4[C,A];
@@ -4226,7 +4537,6 @@ vardef Positions(expr Step)=
     (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
     (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
     %on labelise
-    %label(btex #1 etex,1.15[1/2[B,C],A]);
     label(btex #1 etex,I);
     label(btex #2 etex,1.2[M,B]);
     label(btex #3 etex,1.2[N,C]);
@@ -4250,10 +4560,9 @@ vardef Positions(expr Step)=
     B=A rotatedabout(O,130);
     C=(A--2[A,B rotatedabout(A,45)]) intersectionpoint (B--2[B,A rotatedabout(B,-60)]);
     % On tourne pour éventuellement moins de lassitude :)
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
+    A:=A rotatedabout(O,#6);
+    B:=B rotatedabout(O,#6);
+    C:=C rotatedabout(O,#6);
     % on dessine à main levée :)
     M=1.4[B,A];
     N=1.4[C,A];
@@ -4272,7 +4581,6 @@ vardef Positions(expr Step)=
     (I-C) rotated ((angle(A-C)-angle(M-C))/2) shifted C=whatever[A,C];
     (I-M) rotated ((angle(C-M)-angle(A-M))/2) shifted M=whatever[M,C];
     %on labelise
-    %label(btex #1 etex,1.15[1/2[B,C],A]);
     label(btex #1 etex,I);
     label(btex #2 etex,1.2[M,B]);
     label(btex #3 etex,1.2[N,C]);
@@ -4291,7 +4599,7 @@ vardef Positions(expr Step)=
   \useKVdefault[ClesThales]%
   \setKV[ClesThales]{#1}%
   \ifboolKV[ClesThales]{Droites}{%
-    Les droites $(#3#5)$ et $(#4#6)$ sont sécantes en $#2$.%
+    Les droites \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#3#5)$} et \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$(#4#6)$} sont sécantes en \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$#2$}.%
   }{%
     Dans le triangle \ifboolKV[ClesThales]{Remediation}{\pointilles[2cm]}{$#2#3#4$}, \ifboolKV[ClesThales]{Remediation}{\pointilles[1cm]}{$#5$} est un point \ifboolKV[ClesThales]{Segment}{du segment}{de la
       droite}
@@ -4869,23 +5177,31 @@ vardef Positions(expr Step)=
 
 \newcommand{\TThales}[8][]{%
   \setKV[ClesThales]{#1}%
-  \ifboolKV[ClesThales]{Figure}{%
-    \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
-    \begin{multicols}{2}%
-      {\em La figure est donnée à titre indicatif.}%
-      \[\MPFigThales\NomA\NomB\NomC\NomM\NomN\]%
-      \par\columnbreak\par%
-      \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
-    \end{multicols}%
-  }{\ifboolKV[ClesThales]{Figurecroisee}{%
-      \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
-      \begin{multicols}{2}%
-        {\em La figure est donnée à titre indicatif.}%
-        \[\MPFigThalesCroisee\NomA\NomB\NomC\NomM\NomN\]%
-        \par\columnbreak\par%
-        \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
-      \end{multicols}%
-    }{\ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}%
+  \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+  \ifboolKV[ClesThales]{FigureSeule}{%
+    \MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+  }{\ifboolKV[ClesThales]{FigurecroiseeSeule}{%
+      \MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+    }{%
+      \ifboolKV[ClesThales]{Figure}{%
+        \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+        \begin{multicols}{2}%
+          {\em La figure est donnée à titre indicatif.}%
+          \[\MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]%
+          \par\columnbreak\par%
+          \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
+        \end{multicols}%
+      }{\ifboolKV[ClesThales]{Figurecroisee}{%
+          \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+          \begin{multicols}{2}%
+            {\em La figure est donnée à titre indicatif.}%
+            \[\MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]%
+            \par\columnbreak\par%
+            \ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}%
+          \end{multicols}%
+        }{\ifboolKV[ClesThales]{Entier}{\TThalesCalculsE[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}{\TThalesCalculsD[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}}}%
+      }%
+    }%
   }%
 }%
 %%%%
@@ -4984,31 +5300,40 @@ vardef Positions(expr Step)=
   % #4 longueur AB
   % #5 longueur AF
   % #6 longueur AC
-  \ifboolKV[ClesThales]{Figure}{%
+  \ifboolKV[ClesThales]{FigureSeule}{%
     \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
-    \begin{multicols}{2}
-      {\em La figure est donnée à titre indicatif.}
-      \[\MPFigReciThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}\]
-      \par\columnbreak\par        
-      \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
-      \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}
-    \end{multicols}
-  }{\ifboolKV[ClesThales]{Figurecroisee}{%
-      \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]
-      \begin{minipage}{0.4\linewidth}
-        {\em La figure est donnée à titre indicatif.}
-        \[\MPFigReciThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}\]
-      \end{minipage}
-      \hfill
-      \begin{minipage}{0.55\linewidth}
-        \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
-        \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}
-    \end{minipage}\\%
-    }{\ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
-      \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}
-    }
-  }
-}
+    \MPFigReciThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+  }{\ifboolKV[ClesThales]{FigurecroiseeSeule}{%
+      \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+      \MPFigReciThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+    }{%
+      \ifboolKV[ClesThales]{Figure}{%
+        \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+        \begin{multicols}{2}
+          {\em La figure est donnée à titre indicatif.}
+          \[\MPFigReciThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]
+          \par\columnbreak\par        
+          \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+          \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}
+        \end{multicols}
+      }{\ifboolKV[ClesThales]{Figurecroisee}{%
+          \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]
+          \begin{minipage}{0.4\linewidth}
+            {\em La figure est donnée à titre indicatif.}
+            \[\MPFigReciThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]
+          \end{minipage}
+          \hfill
+          \begin{minipage}{0.55\linewidth}
+            \ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+            \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+          \end{minipage}\\%
+        }{\ReciThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}\par
+          \ReciThalesCalculs[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+        }%
+      }%
+    }%
+  }%
+}%
 
 \newcommand{\Thales}[8][]{%
   \useKVdefault[ClesThales]%
@@ -5016,18 +5341,48 @@ vardef Positions(expr Step)=
   \ifboolKV[ClesThales]{Reciproque}{%
     \ReciproqueThales[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
   }{%
-    \ifboolKV[ClesThales]{Redaction}{%
-      \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}%
+    \ifboolKV[ClesThales]{FigureSeule}{%
+      \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+      \MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
     }{%
-      \TThales[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
-    }
+      \ifboolKV[ClesThales]{FigurecroiseeSeule}{%
+        \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+        \MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}%
+      }{%
+        \ifboolKV[ClesThales]{Redaction}{%
+          \ifboolKV[ClesThales]{Figure}{%
+            \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+            \begin{multicols}{2}
+              {\em La figure est donnée à titre indicatif.}%
+              \[\MPFigThales{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]%
+              \par\columnbreak\par%
+              \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}%
+            \end{multicols}%
+          }{%
+            \ifboolKV[ClesThales]{Figurecroisee}{%
+              \StrMid{#2}{1}{1}[\NomA]\StrMid{#2}{2}{2}[\NomB]\StrMid{#2}{3}{3}[\NomC]\StrMid{#2}{4}{4}[\NomM]\StrMid{#2}{5}{5}[\NomN]%
+              \begin{multicols}{2}
+                {\em La figure est donnée à titre indicatif.}%
+                \[\MPFigThalesCroisee{\NomA}{\NomB}{\NomC}{\NomM}{\NomN}{\useKV[ClesThales]{Angle}}\]%
+                \par\columnbreak\par%
+                \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}%
+              \end{multicols}
+            }{%
+              \TTThales[#1]{\StrMid{#2}{1}{1}}{\StrMid{#2}{2}{2}}{\StrMid{#2}{3}{3}}{\StrMid{#2}{4}{4}}{\StrMid{#2}{5}{5}}%
+            }
+          }    
+        }{%
+          \TThales[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+        }%
+      }%
+    }%
   }%
 }%
 
-%%%%%%%%%%%%%%%%
-%% Trigonométrie
-%%%%%%%%%%%%%%%%
-\def\MPFigTrigo#1#2#3#4#5#6#7{%
+%%%
+% Trigonométrie
+%%%
+\def\MPFigTrigo#1#2#3#4#5#6#7#8{%
   \ifluatex
     \mplibcodeinherit{enable}
    \mplibforcehmode
@@ -5042,11 +5397,9 @@ vardef Positions(expr Step)=
     O - .5[A,B] = whatever * (B-A) rotated 90;
     O - .5[B,C] = whatever * (C-B) rotated 90;
     % On tourne pour éventuellement moins de lassitude :)
-    numeric Angle;
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
+    A:=A rotatedabout(O,#8);
+    B:=B rotatedabout(O,#8);
+    C:=C rotatedabout(O,#8);
     % On définit le centre du cercle inscrit
     (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
     (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
@@ -5065,8 +5418,6 @@ vardef Positions(expr Step)=
     picture MAngle;
     MAngle=image(
     draw (cc shifted A);
-    % draw (cc shifted B);
-    % draw (cc shifted C);
     );
     draw MAngle;
     clip currentpicture to triangle;
@@ -5084,15 +5435,15 @@ vardef Positions(expr Step)=
     else:
     if angle(1/2[A,C]-B)>0:
       if #6=0:
-        label(btex ? etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+        label(btex ? etex,1.1[B,1/2[A,C]]);
       else:
-        label(btex \num{#6} etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+        label(btex \num{#6} etex,1.1[B,1/2[A,C]]);
       fi;
     else:
       if #6=0:
-        label(btex ? etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+        label(btex ? etex,1.1[B,1/2[A,C]]);
       else:
-        label(btex \num{#6} etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+        label(btex \num{#6} etex,1.1[B,1/2[A,C]]);
       fi;
     fi;
   fi;   
@@ -5100,15 +5451,15 @@ vardef Positions(expr Step)=
   else:
     if angle(1/2[B,C]-A)>0:
       if #4=0:
-        label(btex ? etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+        label(btex ? etex,1/2[B,C]-decalage*(unitvector(A-B)));
       else:
-        label(btex \num{#4} etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+        label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
       fi;
     else:
       if #4=0:
-        label(btex ? etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+        label(btex ? etex,1/2[B,C]-decalage*(unitvector(A-B)));
       else:
-        label(btex \num{#4} etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+        label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
       fi;
     fi;
   fi;
@@ -5116,15 +5467,15 @@ vardef Positions(expr Step)=
   else:
     if angle(1/2[A,B]-C)>0:
       if #5=0:
-        label(btex ? etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+        label(btex ? etex,1/2[A,B]-decalage*(unitvector(C-B)));
       else:
-        label(btex \num{#5} etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
       fi;
     else:
       if #5=0:
-        label(btex ? etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+        label(btex ? etex,1/2[A,B]-decalage*(unitvector(C-B)));
       else:
-        label(btex \num{#5} etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+        label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
       fi;
     fi;
     fi;
@@ -5142,10 +5493,9 @@ vardef Positions(expr Step)=
     O - .5[A,B] = whatever * (B-A) rotated 90;
     O - .5[B,C] = whatever * (C-B) rotated 90;
     % On tourne pour éventuellement moins de lassitude :)
-    Angle=uniformdeviate(180);%Caractère aléatoire
-    A:=A rotatedabout(O,Angle);
-    B:=B rotatedabout(O,Angle);
-    C:=C rotatedabout(O,Angle);
+    A:=A rotatedabout(O,#8);
+    B:=B rotatedabout(O,#8);
+    C:=C rotatedabout(O,#8);
     % On définit le centre du cercle inscrit
     (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
     (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
@@ -5231,7 +5581,7 @@ vardef Positions(expr Step)=
 \fi
 }
 
-\def\MPFigTrigoAngle#1#2#3#4#5#6{%
+\def\MPFigTrigoAngle#1#2#3#4#5#6#7{%
   % #1 A
   % #2 B
   % #3 C
@@ -5252,12 +5602,10 @@ vardef Positions(expr Step)=
   O - .5[A,B] = whatever * (B-A) rotated 90;
   O - .5[B,C] = whatever * (C-B) rotated 90;
   % On tourne pour éventuellement moins de lassitude :)
-  numeric Anglelua;
-  Anglelua=uniformdeviate(180);%Caractère aléatoire
-  A:=A rotatedabout(O,Anglelua);
-  B:=B rotatedabout(O,Anglelua);
-  C:=C rotatedabout(O,Anglelua);
-    % On définit le centre du cercle inscrit
+  A:=A rotatedabout(O,#7);
+  B:=B rotatedabout(O,#7);
+  C:=C rotatedabout(O,#7);
+  % On définit le centre du cercle inscrit
   (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
   (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
     %on dessine à main levée :)
@@ -5275,34 +5623,32 @@ vardef Positions(expr Step)=
   picture MAngle;
   MAngle=image(
   draw (cc shifted A);
-%    draw (cc shifted B);
-%    draw (cc shifted C);
   );
   draw MAngle;
   clip currentpicture to triangle;
   draw A{dir(angle(B-A)+5)}..B{dir(angle(B-A)+5)};
   draw B{dir(angle(C-B)+5)}..C{dir(angle(C-B)+5)};
   draw C{dir(angle(A-C)+5)}..A{dir(angle(A-C)+5)};
-    %on labelise
+  % on labelise
   label(btex #1 etex,1.15[O,A]);
   label(btex #2 etex,1.15[O,B]);
   label(btex #3 etex,1.15[O,C]);
   label(btex ? etex,A+0.95u*unitvector(I-A));
   decalage:=3mm;
   if angle(1/2[A,C]-B)>0:
-    label(btex \num{#6} etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+    label(btex \num{#6} etex,1.1[B,1/2[A,C]]);
   else:
-  label(btex \num{#6} etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+  label(btex \num{#6} etex,1.1[B,1/2[A,C]]);
   fi;
   if angle(1/2[B,C]-A)>0:
-   label(btex \num{#4} etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+   label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
   else:
-    label(btex \num{#4} etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+    label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
   fi;
   if angle(1/2[A,B]-C)>0:
-    label(btex \num{#5} etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+    label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
   else:
-  label(btex \num{#5} etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+  label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
   fi;
 \end{mplibcode}
 \mplibcodeinherit{disable}
@@ -5318,10 +5664,9 @@ vardef Positions(expr Step)=
   O - .5[A,B] = whatever * (B-A) rotated 90;
   O - .5[B,C] = whatever * (C-B) rotated 90;
     % On tourne pour éventuellement moins de lassitude :)
-  Angle=uniformdeviate(180);%Caractère aléatoire
-  A:=A rotatedabout(O,Angle);
-  B:=B rotatedabout(O,Angle);
-  C:=C rotatedabout(O,Angle);
+  A:=A rotatedabout(O,#7);
+  B:=B rotatedabout(O,#7);
+  C:=C rotatedabout(O,#7);
     % On définit le centre du cercle inscrit
   (I-C) rotated ((angle(A-C)-angle(B-C))/2) shifted C=whatever[A,C];
   (I-B) rotated ((angle(C-B)-angle(A-B))/2) shifted B=whatever[B,C];
@@ -5340,8 +5685,6 @@ vardef Positions(expr Step)=
   picture MAngle;
   MAngle=image(
       draw (cc shifted A);
-%    draw (cc shifted B);
-%    draw (cc shifted C);
     );
   draw MAngle;
   clip currentpicture to triangle;
@@ -5355,25 +5698,25 @@ vardef Positions(expr Step)=
   label(btex ? etex,A+0.95u*unitvector(I-A));
   decalage:=3mm;
   if angle(1/2[A,C]-B)>0:
-    label(btex \num{#6} etex rotated angle(C-A),1.1[B,1/2[A,C]]);
+    label(btex \num{#6} etex,1.1[B,1/2[A,C]]);
   else:
-  label(btex \num{#6} etex rotated angle(A-C),1.1[B,1/2[A,C]]);
+  label(btex \num{#6} etex,1.1[B,1/2[A,C]]);
   fi;
   if angle(1/2[B,C]-A)>0:
-   label(btex \num{#4} etex rotated(angle(B-C)),1/2[B,C]-decalage*(unitvector(A-B)));
+   label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
   else:
-    label(btex \num{#4} etex rotated(angle(C-B)),1/2[B,C]-decalage*(unitvector(A-B)));
+    label(btex \num{#4} etex,1/2[B,C]-decalage*(unitvector(A-B)));
   fi;
   if angle(1/2[A,B]-C)>0:
-    label(btex \num{#5} etex rotated angle(A-B),1/2[A,B]-decalage*(unitvector(C-B)));
+    label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
   else:
-  label(btex \num{#5} etex rotated angle(B-A),1/2[A,B]-decalage*(unitvector(C-B)));
+  label(btex \num{#5} etex,1/2[A,B]-decalage*(unitvector(C-B)));
   fi;
 \end{mpost}
 \fi
 }
 
-\setKVdefault[ClesTrigo]{Angle=false,Propor=false,Figure=false,Precision=2,Unite=cm,Sinus=false,Cosinus=false,Tangente=false}%
+\setKVdefault[ClesTrigo]{Angle=0,Propor=false,Figure=false,FigureSeule=false,Precision=2,Unite=cm,Sinus=false,Cosinus=false,Tangente=false}%
 
 \newcommand\TrigoCalculs[5][]{%
   \setKV[ClesTrigo]{#1}%
@@ -5381,18 +5724,19 @@ vardef Positions(expr Step)=
   % #2 Nom du triangle ABC, rectangle en B, angle connu ou pas : BAC
   % #3 Longueur
   % #4 Longueur
-   %#5 angle
+  % #5 angle
   % On définit les points
   \StrMid{#2}{1}{1}[\NomA]%
   \StrMid{#2}{2}{2}[\NomB]%
   \StrMid{#2}{3}{3}[\NomC]%
-  Dans le triangle $\NomA\NomB\NomC$, rectangle en $\NomB$, on a :
+  Dans le triangle $\NomA\NomB\NomC$, rectangle en $\NomB$, on a :%
   \ifboolKV[ClesTrigo]{Cosinus}{%
     \ifx\bla#3\bla%on calcule le côté adjacent
-    \ifboolKV[ClesTrigo]{Propor}{%
-      \begin{align*}
-        \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
-        \num{#4}\times\cos(\ang{#5})&=\NomA\NomB\\
+    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
+   \ifboolKV[ClesTrigo]{Propor}{%
+     \begin{align*}
+       \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
+       \num{#4}\times\cos(\ang{#5})&=\NomA\NomB\\
         \num{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*cosd(#5)},2)}}{=}{\approx}\NomA\NomB%
       \end{align*}%
     }{%
@@ -5400,12 +5744,12 @@ vardef Positions(expr Step)=
         \cos(\widehat{\NomB\NomA\NomC})&=\frac{\NomA\NomB}{\NomA\NomC}\\
         \cos(\ang{#5})&=\frac{\NomA\NomB}{\num{#4}}\\
         \num{#4}\times\cos(\ang{#5})&=\NomA\NomB\\
-        \num{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*cosd(#5)},2)}}{=}{\approx}\NomA\NomB%
-      \end{align*}%
+        \num{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*cosd(#5)},2)}}{=}{\approx}\NomA\NomB
+      \end{align*}
     }%
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
-    \else
+    \else%
     \ifx\bla#4\bla%on calcule l'hypothénuse
+    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
@@ -5421,8 +5765,8 @@ vardef Positions(expr Step)=
         \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/cosd(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
       \end{align*}%
     }%
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/cosd(#5)},\useKV[ClesTrigo]{Precision})}}%
     \else%on calcule l'angle
+    \xdef\ResultatTrigo{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomC\times\cos(\widehat{\NomB\NomA\NomC})&=\NomA\NomB\\
@@ -5437,12 +5781,12 @@ vardef Positions(expr Step)=
         \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{acosd(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
       \end{align*}%
     }%
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{acosd(#3/#4)})}}%
-    \fi
-    \fi
-  }{}
+    \fi%
+    \fi%
+  }{}%
   \ifboolKV[ClesTrigo]{Sinus}{%
     \ifx\bla#3\bla%on calcule le côté opposé
+    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
@@ -5457,26 +5801,26 @@ vardef Positions(expr Step)=
         \num{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*sind(#5)},2)}}{=}{\approx}\NomB\NomC%
       \end{align*}%
     }%
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*sind(#5)},\useKV[ClesTrigo]{Precision})}}%
     \else
     \ifx\bla#4\bla%on calcule l'hypothénuse
+    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
-    \begin{align*}
-      \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
-      \NomA\NomC\times\sin(\ang{#5})&=\num{#3}\\
-      \NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
-      \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
-    \end{align*}%
-  }{
-    \begin{align*}
-      \sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
-      \sin(\ang{#5})&=\frac{\num{#3}}{\NomA\NomC}\\
-      \NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
-      \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
-    \end{align*}%
-  }%
-  \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}%
-  \else%on calcule l'angle
+      \begin{align*}
+        \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
+        \NomA\NomC\times\sin(\ang{#5})&=\num{#3}\\
+        \NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
+        \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+      \end{align*}%
+    }{%
+      \begin{align*}
+        \sin(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomC}\\
+        \sin(\ang{#5})&=\frac{\num{#3}}{\NomA\NomC}\\
+        \NomA\NomC&=\frac{\num{#3}}{\sin(\ang{#5})}\\
+        \NomA\NomC&\IfInteger{\fpeval{round(\fpeval{#3/sind(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/sind(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+      \end{align*}%
+    }%
+    \else%on calcule l'angle
+    \xdef\ResultatTrigo{\fpeval{round(\fpeval{asind(#3/#4)})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomC\times\sin(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
@@ -5491,12 +5835,12 @@ vardef Positions(expr Step)=
         \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{asind(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{asind(#3/#4)})}}%
       \end{align*}%
     }%
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{asind(#3/#4)})}}%
-    \fi
-    \fi
-  }{}
+    \fi%
+    \fi%
+  }{}%
   \ifboolKV[ClesTrigo]{Tangente}{%
     \ifx\bla#3\bla%on calcule le côté opposé
+    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\%
@@ -5511,26 +5855,26 @@ vardef Positions(expr Step)=
         \num{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}&\IfInteger{\fpeval{round(\fpeval{#4*tand(#5)},2)}}{=}{\approx}\NomB\NomC%
       \end{align*}%
     }%
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#4*tand(#5)},\useKV[ClesTrigo]{Precision})}}%
     \else
     \ifx\bla#4\bla%on calcule l'adjacent
+    \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
-    \begin{align*}
-      \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
-      \NomA\NomB\times\tan(\ang{#5})&=\num{#3}\\
-      \NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
-      \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
-    \end{align*}%
-  }{
-    \begin{align*}
-      \tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
-      \tan(\ang{#5})&=\frac{\num{#3}}{\NomA\NomB}\\
-      \NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
-      \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
-    \end{align*}%
-  }%
-  \xdef\ResultatTrigo{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}%
+      \begin{align*}
+        \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
+        \NomA\NomB\times\tan(\ang{#5})&=\num{#3}\\
+        \NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
+        \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+      \end{align*}%
+    }{%
+      \begin{align*}
+        \tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
+        \tan(\ang{#5})&=\frac{\num{#3}}{\NomA\NomB}\\
+        \NomA\NomB&=\frac{\num{#3}}{\tan(\ang{#5})}\\
+        \NomA\NomB&\IfInteger{\fpeval{round(\fpeval{#3/tand(#5)},2)}}{=}{\approx}\num{\fpeval{round(\fpeval{#3/tand(#5)},\useKV[ClesTrigo]{Precision})}}~\text{\useKV[ClesTrigo]{Unite}}%
+      \end{align*}%
+    }%
     \else%on calcule l'angle
+    \xdef\ResultatTrigo{\fpeval{round(\fpeval{atand(#3/#4)})}}%
     \ifboolKV[ClesTrigo]{Propor}{%
       \begin{align*}
         \NomA\NomB\times\tan(\widehat{\NomB\NomA\NomC})&=\NomB\NomC\\
@@ -5538,18 +5882,17 @@ vardef Positions(expr Step)=
         \tan(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
         \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{atand(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{atand(#3/#4)})}}%
       \end{align*}%
-    }{
+    }{%
       \begin{align*}
         \tan(\widehat{\NomB\NomA\NomC})&=\frac{\NomB\NomC}{\NomA\NomB}\\
         \tan(\widehat{\NomB\NomA\NomC})&=\frac{\num{#3}}{\num{#4}}\\
         \widehat{\NomB\NomA\NomC}&\IfInteger{\fpeval{round(\fpeval{atand(#3/#4)},2)}}{=}{\approx}\ang{\fpeval{round(\fpeval{atand(#3/#4)})}}%
       \end{align*}%
     }%
-    \xdef\ResultatTrigo{\fpeval{round(\fpeval{atand(#3/#4)})}}%
-    \fi
-    \fi
-  }{}
-}
+    \fi%
+    \fi%
+  }{}%
+}%
 
 \newcommand\Trigo[5][]{%
   \useKVdefault[ClesTrigo]%
@@ -5557,77 +5900,114 @@ vardef Positions(expr Step)=
   % #1 Clés
   % #2 Nom du triangle ABC, rectangle en B, angle connu ou pas : BAC
   % #3 Longueur
-  % #4 Longueur ou angle en fonction du calcul à faire. Si longueur, #3<#4
+  % #4 Longueur
+  % #5 angle
   % On définit les points
   \StrMid{#2}{1}{1}[\NomA]%
   \StrMid{#2}{2}{2}[\NomB]%
   \StrMid{#2}{3}{3}[\NomC]%
   % On rédige
-  \ifboolKV[ClesTrigo]{Figure}{%
-    \begin{multicols}{2}%
-      {\em La figure est donnée à titre indicatif.}%
-      \ifboolKV[ClesTrigo]{Angle}{%figure pour calculer un angle
-        \ifboolKV[ClesTrigo]{Cosinus}{%
-          \begin{center}
-            \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{}{#3}{#4}
-          \end{center}
-        }{}%
-        \ifboolKV[ClesTrigo]{Sinus}{%
-          \begin{center}
-            \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{}{#4}
-          \end{center}
-        }{}%
-        \ifboolKV[ClesTrigo]{Tangente}{%
-          \begin{center}
-            \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{}
-          \end{center}
-        }{}%
-      }{%figure pour calculer une longueur
-        \ifboolKV[ClesTrigo]{Cosinus}{%
-          \ifx#3\bla\bla%adjacent inconnu
-          \begin{center}
-            \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{0}{#4}{#5}
+  \ifboolKV[ClesTrigo]{FigureSeule}{%
+    \ifx#5\bla\bla%
+    \ifboolKV[ClesTrigo]{Cosinus}{%
+      \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{}{#3}{#4}{\useKV[ClesTrigo]{Angle}}
+    }{}%
+    \ifboolKV[ClesTrigo]{Sinus}{%
+      \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{}{#4}{\useKV[ClesTrigo]{Angle}}
+    }{}%
+    \ifboolKV[ClesTrigo]{Tangente}{%
+      \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{}{\useKV[ClesTrigo]{Angle}}
+    }{}%
+    \else%}{%figure pour calculer une longueur
+    \ifboolKV[ClesTrigo]{Cosinus}{%
+      \ifx#3\bla\bla%adjacent inconnu
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{0}{#4}{#5}{\useKV[ClesTrigo]{Angle}}
+      \else
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{#3}{0}{#5}{\useKV[ClesTrigo]{Angle}}
+      \fi
+    }{}%
+    \ifboolKV[ClesTrigo]{Sinus}{%
+      \ifx#3\bla\bla%adjacent inconnu
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{-1}{#4}{#5}{\useKV[ClesTrigo]{Angle}}
+      \else
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{-1}{0}{#5}{\useKV[ClesTrigo]{Angle}}
+      \fi
+    }{}%
+    \ifboolKV[ClesTrigo]{Tangente}{%
+      \ifx#3\bla\bla%adjacent inconnu
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{#4}{-1}{#5}{\useKV[ClesTrigo]{Angle}}
+      \else%
+      \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{0}{-1}{#5}{\useKV[ClesTrigo]{Angle}}
+      \fi%
+    }{}%
+    \fi%
+  }{%
+    \ifboolKV[ClesTrigo]{Figure}{%
+      \begin{multicols}{2}%
+        {\em La figure est donnée à titre indicatif.}%
+        \ifx#5\bla\bla%
+        \ifboolKV[ClesTrigo]{Cosinus}{%
+          \begin{center}
+            \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{}{#3}{#4}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+        }{}%
+        \ifboolKV[ClesTrigo]{Sinus}{%
+          \begin{center}
+            \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{}{#4}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+        }{}%
+        \ifboolKV[ClesTrigo]{Tangente}{%
+          \begin{center}
+            \MPFigTrigoAngle{\NomA}{\NomB}{\NomC}{#3}{#4}{}{\useKV[ClesTrigo]{Angle}}
+          \end{center}
+        }{}%
+        \else%}{%figure pour calculer une longueur
+        \ifboolKV[ClesTrigo]{Cosinus}{%
+          \ifx#3\bla\bla%adjacent inconnu
+          \begin{center}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{0}{#4}{#5}{\useKV[ClesTrigo]{Angle}}
           \end{center}
           \else
           \begin{center}
-            \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{#3}{0}{#5}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{-1}{#3}{0}{#5}{\useKV[ClesTrigo]{Angle}}
           \end{center}
           \fi
         }{}%
         \ifboolKV[ClesTrigo]{Sinus}{%
           \ifx#3\bla\bla%adjacent inconnu
           \begin{center}
-            \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{-1}{#4}{#5}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{-1}{#4}{#5}{\useKV[ClesTrigo]{Angle}}
           \end{center}
           \else
           \begin{center}
-            \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{-1}{0}{#5}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{-1}{0}{#5}{\useKV[ClesTrigo]{Angle}}
           \end{center}
           \fi
         }{}%
         \ifboolKV[ClesTrigo]{Tangente}{%
           \ifx#3\bla\bla%adjacent inconnu
           \begin{center}
-            \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{#4}{-1}{#5}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{0}{#4}{-1}{#5}{\useKV[ClesTrigo]{Angle}}
           \end{center}
           \else%
           \begin{center}
-            \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{0}{-1}{#5}
+            \MPFigTrigo{\NomA}{\NomB}{\NomC}{#3}{0}{-1}{#5}{\useKV[ClesTrigo]{Angle}}
           \end{center}
           \fi%
         }{}%
-      }%
-      \par\columnbreak\par
-      \TrigoCalculs{#2}{#3}{#4}{#5}%
-    \end{multicols}
-  }{%
-    \TrigoCalculs{#2}{#3}{#4}{#5}%
+        \fi%
+        \par\columnbreak\par
+        \TrigoCalculs[#1]{#2}{#3}{#4}{#5}%
+      \end{multicols}
+    }{%
+      \TrigoCalculs[#1]{#2}{#3}{#4}{#5}%
+    }%
   }%
 }%
 
-%%%%%%%%%%%%%%%
-%% Statistiques
-%%%%%%%%%%%%%%%
+%%%
+% Statistiques
+%%%
 \newcommand\NbDonnees{}
 \newcommand\SommeDonnees{}%
 \newcommand\EffectifTotal{}%
@@ -5638,104 +6018,183 @@ vardef Positions(expr Step)=
 \newcommand\DonneeMin{}%
 \newcommand\EffectifMax{}%
 
-\setKVdefault[ClesStat]{Tableau=false,Frequence=false,EffectifTotal=false,Etendue=false,Moyenne=false,SET=false,Mediane=false,Total=false,Concret=false,Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif(s),Origine=0,Angle=false,SemiAngle=false,Qualitatif=false,TableauVide=false,Graphique=false,Batons=true,Unitex=0.5,Unitey=0.5,Rayon=3cm,AffichageAngle=false,Liste=false,ECC=false,Coupure=10,ColorTab=gray!15}
+\setKVdefault[ClesStat]{ColVide=0,EffVide=false,%
+FreqVide=false,AngVide=false,ECCVide=false,TotalVide=false,Sondage=false,%
+Tableau=false,Stretch=1,Frequence=false,EffectifTotal=false,%
+Etendue=false,Moyenne=false,SET=false,Mediane=false,Total=false,Concret=false,%
+Unite={},Largeur=1cm,Precision=2,Donnee=Valeurs,Effectif=Effectif,Origine=0,Angle=false,SemiAngle=false,Qualitatif=false,TableauVide=false,Graphique=false,Batons=true,Unitex=0.5,Unitey=0.5,Rayon=3cm,AffichageAngle=false,Liste=false,ECC=false,Coupure=10,CouleurTab=gray!15,ListeCouleurs={white},Hachures=false,Inverse=false,AbscisseRotation=false}
 
 % La construction du tableau
 \def\addtotok#1#2{#1\expandafter{\the#1#2}}
 \newtoks\tabtoksa\newtoks\tabtoksb\newtoks\tabtoksc
-\def\updatetoks#1/#2\nil{\addtotok\tabtoksa{&\num{#1}}\addtotok\tabtoksb{&\num{#2}}}
-\def\buildtab{%
+\def\updatetoks#1/#2\nil{\addtotok\tabtoksa{\ifboolKV[ClesStat]{Qualitatif}{&#1}{&\num{#1}}}\addtotok\tabtoksb{&\num{#2}}}
+\def\buildtab{% %%Tableau sans total
   \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
   \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoks\compteur\nil}%
   \[%
-    \begin{tabular}{|>{\columncolor{\useKV[ClesStat]{ColorTab}}}c|*{\number\numexpr\ListeCompletelen}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
+  %\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{\ListeComplete[##1,2]}%
+    \renewcommand{\arraystretch}{\useKV[ClesStat]{Stretch}}%
+    \begin{tabular}{|>{\columncolor{\useKV[ClesStat]{CouleurTab}}}c|*{\number\numexpr\ListeCompletelen}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
     \hline%
-    \rowcolor{\useKV[ClesStat]{ColorTab}}\the\tabtoksa\\\hline%
-    \the\tabtoksb\\\hline%
-      \ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculFrequence{##1}}}\\\hline}{}%
-      \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculAngle{##1}}}\\\hline}{}%
-      \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\CalculSemiAngle{##1}}\\\hline}{}%
-      \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculECC{##1}}}\\\hline}{}%
-    \end{tabular}
+    \rowcolor{\useKV[ClesStat]{CouleurTab}}\the\tabtoksa\\\hline%
+	\ifnum\number\numexpr\useKV[ClesStat]{ColVide}<1%
+    \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\the\tabtoksb}\\\hline% 
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}\\\hline}{}%
+     \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\\\hline}{}%
+	\end{tabular}
+	\else%
+	\ifnum\number\numexpr\useKV[ClesStat]{ColVide}>\ListeCompletelen%
+    \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\the\tabtoksb}\\\hline%  
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}\\\hline}{}%
+     \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\\\hline}{}%
+	\end{tabular}
+	\else%
+	\ifnum\number\numexpr\useKV[ClesStat]{ColVide}=1%
+    \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\useKV[ClesStat]{Effectif}&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ListeComplete[##1,2]}}\\\hline%  
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}\\\hline}{}%
+     \ifboolKV[ClesStat]{ECC}{E.C.C.&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\\\hline}{}%
+	\end{tabular}
+    \else%
+	\ifnum\number\numexpr\useKV[ClesStat]{ColVide}=\ListeCompletelen%
+    \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ListeComplete[##1,2]}}&\\\hline%  
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\\\hline}{}%
+	\ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\\\hline}{}%
+     \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\\\hline}{}%
+	\end{tabular}
+	\else%
+    \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&}}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ListeComplete[##1,2]}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ListeComplete[##1,2]}}\\\hline%  
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculAngle{##1}}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculSemiAngle{##1}}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}\\\hline}{}%
+	\end{tabular}
+    \fi%
+	\fi%
+	\fi%
+	\fi%  
+    \renewcommand{\arraystretch}{1}%
   \]
 }
 
-\def\buildtabt{%
+\def\buildtabt{% %%Tableau avec total
   \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
   \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoks\compteur\nil}%
-  \[%
-    \begin{tabular}{|>{\columncolor{\useKV[ClesStat]{ColorTab}}}c|*{\number\numexpr\ListeCompletelen+1}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
+  \[%	
+    \renewcommand{\arraystretch}{\useKV[ClesStat]{Stretch}}%
+    \begin{tabular}{|>{\columncolor{\useKV[ClesStat]{CouleurTab}}}c|*{\number\numexpr\ListeCompletelen+1}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
     \hline%
-    \rowcolor{\useKV[ClesStat]{ColorTab}}\the\tabtoksa&Total\\\hline%
-      \the\tabtoksb&\ifboolKV[ClesStat]{TableauVide}{}{\num{\EffectifTotal}}%
-      \\\hline%
-      \ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculFrequence{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{100}\\\hline}{}%
-      \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculAngle{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{360}\\\hline}{}%
-      \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculSemiAngle{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{180}\\\hline}{}%
-      \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculECC{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{\num{\EffectifTotal}}\\\hline}{}%
+    \rowcolor{\useKV[ClesStat]{CouleurTab}}\the\tabtoksa&Total\\\hline%
+	\ifnum\number\numexpr\useKV[ClesStat]{ColVide}<1%
+     \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen+1}}\do{&}}{\the\tabtoksb&\ifboolKV[ClesStat]{TotalVide}{}{\num{\EffectifTotal}}}\\\hline%
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}}\\\hline}{}%
     \end{tabular}
-  \]
-}
-
-\def\updatetoksq#1/#2\nil{\addtotok\tabtoksa{&#1}\addtotok\tabtoksb{&\num{#2}}}
-\def\buildtabq{%
-  \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
-  \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoksq\compteur\nil}%
-  \[%
-    \begin{tabular}{|>{\columncolor{\useKV[ClesStat]{ColorTab}}}c|*{\number\numexpr\ListeCompletelen}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
-    \hline%
-    \rowcolor{\useKV[ClesStat]{ColorTab}}\the\tabtoksa\\\hline%
-    \the\tabtoksb\\\hline%
-      \ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculFrequence{##1}}}\\\hline}{}%
-      \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculAngle{##1}}}\\\hline}{}%
-      \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculSemiAngle{##1}}}\\\hline}{}%
-      \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculECC{##1}}}\\\hline}{}%
+	\else%
+	\ifnum\number\numexpr\useKV[ClesStat]{ColVide}>\ListeCompletelen%
+     \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen+1}}\do{&}}{\the\tabtoksb&\ifboolKV[ClesStat]{TotalVide}{}{\num{\EffectifTotal}}}\\\hline%
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}}\\\hline}{}%
     \end{tabular}
-  \]
-}
-
-\def\buildtabqt{%
-  \tabtoksa{\useKV[ClesStat]{Donnee}}\tabtoksb{\useKV[ClesStat]{Effectif}}%
-  \foreachitem\compteur\in\ListeComplete{\expandafter\updatetoksq\compteur\nil}%
-  \[%
-    \begin{tabular}{|>{\columncolor{\useKV[ClesStat]{ColorTab}}}c|*{\number\numexpr\ListeCompletelen+1}{>{\centering\arraybackslash}p{\useKV[ClesStat]{Largeur}}|}}%
-    \hline%
-    \rowcolor{\useKV[ClesStat]{ColorTab}}\the\tabtoksa&Total\\\hline%
-    \the\tabtoksb&\num{\EffectifTotal}\\\hline%
-      \ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculFrequence{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{100}\\\hline}{}%
-      \ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculAngle{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{360}\\\hline}{}%
-      \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculSemiAngle{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{180}\\\hline}{}%
-      \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\CalculECC{##1}}}&\ifboolKV[ClesStat]{TableauVide}{}{\num{\EffectifTotal}}\\\hline}{}%
+	\else%
+	\ifnum\number\numexpr\useKV[ClesStat]{ColVide}=1%
+    \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen+1}}\do{&}}{\useKV[ClesStat]{Effectif}&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ListeComplete[##1,2]}&\ifboolKV[ClesStat]{TotalVide}{}{\num{\EffectifTotal}}}\\\hline%  
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{ECC}{E.C.C.&\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}}\\\hline}{}%
     \end{tabular}
+    \else%
+	\ifnum\number\numexpr\useKV[ClesStat]{ColVide}=\ListeCompletelen%
+    \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen+1}}\do{&}}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ListeComplete[##1,2]}&&\ifboolKV[ClesStat]{TotalVide}{}{\num{\EffectifTotal}}}\\\hline%  
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}}\\\hline}{}%
+    \end{tabular}
+	\else%
+    \ifboolKV[ClesStat]{EffVide}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen+1}}\do{&}}{\useKV[ClesStat]{Effectif}\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ListeComplete[##1,2]}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ListeComplete[##1,2]}&\ifboolKV[ClesStat]{TotalVide}{}{\num{\EffectifTotal}}}\\\hline% 
+	\ifboolKV[ClesStat]{Frequence}{Fréquence (\%)\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{\CalculFrequence{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{FreqVide}{}{100}}}\\\hline}{}%
+	\ifboolKV[ClesStat]{Angle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{360}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{SemiAngle}{Angle (\si{\degree})\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{\CalculSemiAngle{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{AngVide}{}{180}}}\\\hline}{}%
+      \ifboolKV[ClesStat]{ECC}{E.C.C.\xintFor* ##1 in {\xintSeq {1}{\number\numexpr\useKV[ClesStat]{ColVide}-1}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\xintFor* ##1 in {\xintSeq {\number\numexpr\useKV[ClesStat]{ColVide}+1}{\ListeCompletelen}}\do{&\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\CalculECC{##1}}}}&\ifboolKV[ClesStat]{TotalVide}{}{\ifboolKV[ClesStat]{TableauVide}{}{\ifboolKV[ClesStat]{ECCVide}{}{\num{\EffectifTotal}}}}\\\hline}{}%
+    \end{tabular}
+    \fi%
+	\fi%
+	\fi%
+	\fi%  
+    \renewcommand{\arraystretch}{1}%
   \]
 }
 
 % Pour construire le diagramme en bâtons
 \def\Updatetoks#1/#2\nil{\addtotok\toklistepoint{(#1,#2),}}
-\def\buildgraph{%
-  \newtoks\toklistepoint
+\newcommand\buildgraph[1][]{%
+  \newtoks\toklistepoint 
   \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoks\compteur\nil}%
-  \[\MPStat{\useKV[ClesStat]{Unitex}}{\useKV[ClesStat]{Unitey}}{\the\toklistepoint}{\useKV[ClesStat]{Donnee}}{\useKV[ClesStat]{Effectif}}{\useKV[ClesStat]{Origine}}\]%
+   \[\MPStat[#1]{\useKV[ClesStat]{Unitex}}{\useKV[ClesStat]{Unitey}}{\the\toklistepoint}{\useKV[ClesStat]{Donnee}}{\useKV[ClesStat]{Effectif}}{\useKV[ClesStat]{Origine}}{\useKV[ClesStat]{AbscisseRotation}}\]%
 }%
 
 % Pour construire le diagramme en bâtons qualitatif
 \def\Updatetoksq#1/#2\nil{\addtotok\toklistepointq{"#1",#2,}}
-\def\buildgraphq{%
+\newcommand\buildgraphq[1][]{%
   \newtoks\toklistepointq
-  \toklistepointq{}
   \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil}  
-  \[\MPStatQ{2*\useKV[ClesStat]{Unitex}}{0.5*\useKV[ClesStat]{Unitey}}{\the\toklistepointq}{\useKV[ClesStat]{Donnee}}{\useKV[ClesStat]{Effectif}}{\useKV[ClesStat]{Origine}}\]
+  \[\MPStatQ[#1]{2*\useKV[ClesStat]{Unitex}}{0.5*\useKV[ClesStat]{Unitey}}{\the\toklistepointq}{\useKV[ClesStat]{Donnee}}{\useKV[ClesStat]{Effectif}}{\useKV[ClesStat]{Origine}}{\useKV[ClesStat]{AbscisseRotation}}\]
 }
 
+
+\def\UpdateCoul#1\nil{\addtotok\toklistecouleur{#1,}}%
+
 % Pour construire le diagramme circulaire qualitatif
 \def\buildgraphcq#1{%
   \newtoks\toklistepointq%
   \toklistepointq{}%
+  \newtoks\toklistecouleur%
+  \toklistecouleur{}%
+  %
   \foreachitem\compteur\in\ListeComplete{\expandafter\Updatetoksq\compteur\nil}%
+  \xdef\ListeAvantCouleurs{\useKV[ClesStat]{ListeCouleurs}}%
+  \readlist*\ListeCouleur{\ListeAvantCouleurs}%
+  \foreachitem\couleur\in\ListeCouleur{\expandafter\UpdateCoul\couleur\nil}%
   \ifboolKV[ClesStat]{AffichageAngle}{%
-    \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}\]%
+    \ifboolKV[ClesStat]{Hachures}{%
+      \ifboolKV[ClesStat]{Inverse}{%
+        \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}{\the\toklistecouleur}{1}{1}\]%
+  }{%
+        \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}{\the\toklistecouleur}{1}{0}\]%
+      }%
+    }{%
+      \ifboolKV[ClesStat]{Inverse}{%
+        \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}{\the\toklistecouleur}{0}{1}\]%
+      }{%
+        \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{1}{\the\toklistecouleur}{0}{0}\]%
+      }%
+    }%
   }{%
-    \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}\]%
+    \ifboolKV[ClesStat]{Hachures}{%
+      \ifboolKV[ClesStat]{Inverse}{%
+        \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}{\the\toklistecouleur}{1}{1}\]%
+      }{%
+        \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}{\the\toklistecouleur}{1}{0}\]%
+      }%
+    }{%
+      \ifboolKV[ClesStat]{Inverse}{%
+        \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}{\the\toklistecouleur}{0}{1}\]%
+      }{%
+        \[\MPStatCirculaireQ{\useKV[ClesStat]{Rayon}}{\the\toklistepointq}{#1}{0}{\the\toklistecouleur}{0}{0}\]%
+      }%
+    }%
   }%
 }%
 
@@ -5767,92 +6226,103 @@ vardef Positions(expr Step)=
   \num{\TotalECC}%
 }
 
-% la construction du graphique
-\def\MPStat#1#2#3#4#5#6{%
+% la construction du graphique en bâtons pour quantitatif
+\newcommand\MPStat[8][]{%
   \ifluatex
    \mplibforcehmode
   \begin{mplibcode}
     maxx:=0;
     maxy:=0;
-    unitex:=#1*cm;
-    unitey:=#2*cm;
+    unitex:=#2*cm;
+    unitey:=#3*cm;
     pair A[],B[],P[];
     n:=0;
     vardef toto(text t)=
     for p_=t:
     if pair p_:
     n:=n+1;
-    P[n]=((xpart(p_)-(#6))*unitex,ypart(p_)*unitey);
+    P[n]=((xpart(p_)-(#7))*unitex,ypart(p_)*unitey);
     if xpart(p_)>maxx:
-    maxx:=xpart(p_)-(#6);
+    maxx:=xpart(p_)-(#7);
     fi;
     if ypart(p_)>maxy:
     maxy:=ypart(p_);
     fi;
-    A[n]=unitex*(xpart(p_)-(#6),0);
+    A[n]=unitex*(xpart(p_)-(#7),0);
     B[n]=unitey*(0,ypart(p_));
+    if (#8):
+    label.bot(TEX("\num{"&decimal(xpart(p_))&"}") rotated 90,A[n]);
+    else :
     label.bot(TEX("\num{"&decimal(xpart(p_))&"}"),A[n]);
+    fi;
     label.lft(TEX("\num{"&decimal(ypart(p_))&"}"),B[n]);
     fi;
     endfor;
     enddef;
-    toto(#3);
+    toto(#4);
     for k=1 upto n:
     draw A[k]--P[k] withpen pencircle scaled 2bp;
     draw B[k]--P[k] dashed evenly;
     endfor;
     drawarrow (0,0)--unitex*(maxx+1,0);
     drawarrow (0,0)--unitey*(0,maxy+1);
-    label.lrt(btex #4 etex,unitex*(maxx+1,0));
-    label.urt(btex #5 etex,unitey*(0,maxy+1));
+    label.lrt(btex #5 etex,unitex*(maxx+1,0));
+    label.urt(btex #6 etex,unitey*(0,maxy+1));
   \end{mplibcode}
   \else
+  \mpxcommands{%
+    \setKV[ClesStat]{#1}%
+  }
   \begin{mpost}
     maxx:=0;
     maxy:=0;
-    unitex:=#1*cm;
-    unitey:=#2*cm;
+    unitex:=#2*cm;
+    unitey:=#3*cm;
     pair A[],B[],P[];
     n:=0;
     vardef toto(text t)=
     for p_=t:
     if pair p_:
     n:=n+1;
-    P[n]=((xpart(p_)-(#6))*unitex,ypart(p_)*unitey);
+    P[n]=((xpart(p_)-(#7))*unitex,ypart(p_)*unitey);
     if xpart(p_)>maxx:
-    maxx:=xpart(p_)-(#6);
+    maxx:=xpart(p_)-(#7);
     fi;
     if ypart(p_)>maxy:
     maxy:=ypart(p_);
     fi;
-    A[n]=unitex*(xpart(p_)-(#6),0);
+    A[n]=unitex*(xpart(p_)-(#7),0);
     B[n]=unitey*(0,ypart(p_));
+    if (#8):
+    label.bot(LATEX("\num{"&decimal(xpart(p_))&"}") rotated 90,A[n]);
+    else :
     label.bot(LATEX("\num{"&decimal(xpart(p_))&"}"),A[n]);
+    fi;
     label.lft(LATEX("\num{"&decimal(ypart(p_))&"}"),B[n]);
     fi;
     endfor;
     enddef;
-    toto(#3);
+    toto(#4);
     for k=1 upto n:
     draw A[k]--P[k] withpen pencircle scaled 2bp;
     draw B[k]--P[k] dashed evenly;
     endfor;
     drawarrow (0,0)--unitex*(maxx+1,0);
     drawarrow (0,0)--unitey*(0,maxy+1);
-    label.lrt(btex #4 etex,unitex*(maxx+1,0));
-    label.urt(btex #5 etex,unitey*(0,maxy+1));
+    label.lrt(\btex \useKV[ClesStat]{Donnee} etex,unitex*(maxx+1,0));
+    label.urt(\btex \useKV[ClesStat]{Effectif} etex,unitey*(0,maxy+1));
   \end{mpost}
   \fi
 }
 
-% la construction du graphique qualitatif
-\def\MPStatQ#1#2#3#4#5#6{%
+% la construction du graphique en bâtons pour qualitatif
+\newcommand\MPStatQ[8][]{%
   \ifluatex
    \mplibforcehmode
   \begin{mplibcode}
     maxy:=0;
-    unitex:=#1*cm;
-    unitey:=#2*cm;
+    unitex:=#2*cm;
+    unitey:=#3*cm;
     pair A[],B[],P[];
     n:=0;
     vardef toto(text t)=
@@ -5867,25 +6337,32 @@ vardef Positions(expr Step)=
     n:=n+1;
     else:
     A[n]=unitex*(n+1,0);
+    if (#8):
     label.bot(TEX(p_) rotated 90,A[n]);
+    else :
+    label.bot(TEX(p_),A[n]);
+    fi;
     fi;
     endfor;
     enddef;
-    toto(#3);
+    toto(#4);
     for k=0 upto n-1:
     draw A[k]--P[k] withpen pencircle scaled 2bp;
     draw B[k]--P[k] dashed evenly;
     endfor;
     drawarrow (0,0)--unitex*(n+1,0);
     drawarrow (0,0)--unitey*(0,maxy+1);
-    label.lrt(btex #4 etex,unitex*(n+1,0));
-    label.urt(btex #5 etex,unitey*(0,maxy+1));
+    label.lrt(btex #5 etex,unitex*(n+1,0));
+    label.urt(btex #6 etex,unitey*(0,maxy+1));
     \end{mplibcode}
   \else
+    \mpxcommands{%
+      \setKV[ClesStat]{#1}%
+    }    
   \begin{mpost}
     maxy:=0;
-    unitex:=#1*cm;
-    unitey:=#2*cm;
+    unitex:=#2*cm;
+    unitey:=#3*cm;
     pair A[],B[],P[];
     n:=0;
     vardef toto(text t)=
@@ -5900,25 +6377,29 @@ vardef Positions(expr Step)=
     n:=n+1;
     else:
     A[n]=unitex*(n+1,0);
+    if (#8):
     label.bot(LATEX(p_) rotated 90,A[n]);
+    else :
+    label.bot(LATEX(p_),A[n]);
+    fi;
     fi;
     endfor;
     enddef;
-    toto(#3);
+    toto(#4);
     for k=0 upto n-1:
     draw A[k]--P[k] withpen pencircle scaled 2bp;
     draw B[k]--P[k] dashed evenly;
     endfor;
     drawarrow (0,0)--unitex*(n+1,0);
     drawarrow (0,0)--unitey*(0,maxy+1);
-    label.lrt(btex #4 etex,unitex*(n+1,0));
-    label.urt(btex #5 etex,unitey*(0,maxy+1));
+    label.lrt(\btex \useKV[ClesStat]{Donnee} etex,unitex*(n+1,0));
+    label.urt(\btex \useKV[ClesStat]{Effectif} etex,unitey*(0,maxy+1));
   \end{mpost}
   \fi
 }
 
 % la construction du graphique qualitatif
-\def\MPStatCirculaireQ#1#2#3#4{%
+\def\MPStatCirculaireQ#1#2#3#4#5#6#7{%
   \ifluatex
    \mplibforcehmode
   \begin{mplibcode}
@@ -5930,13 +6411,20 @@ vardef Positions(expr Step)=
     ang[0]:=0;
     path cc;
     cc=(fullcircle scaled (2*#1));
-    if #3=360:
-    draw cc;
+    % on récupère les couleurs
+    color Col[];
+    n:=0;
+    for p_=#5:
+    n:=n+1;
+    Col[n]=p_;
+    endfor;
+    if #7=0:
+    A[0]=point(0) of cc;
     else:
-    draw (subpath(0,length cc/2) of cc)--cycle;
+    A[0]=point(180) of cc;
     fi;
-    A[0]=point(0) of cc;
     vardef toto(text t)=
+    n:=0;
     for p_=t:
     if numeric p_:
     n:=n+1;
@@ -5951,28 +6439,65 @@ vardef Positions(expr Step)=
     for p_=t:
     if numeric p_:
     n:=n+1;
+    if #7=0:
     A[n]=A[n-1] rotatedabout(O,p_*(#3/total[N]));
-    draw A[n-1]--O--A[n];
+    else:
+    A[n]=A[n-1] rotatedabout(O,-p_*(#3/total[N]));
+    fi;
+    %hachure ou pas ?
+    if #6=0:
+    fill (O--if #7=0:arccercle(A[n-1],A[n],O) else:
+    arccercle(A[n],A[n-1],O) fi--cycle) withcolor if unknown Col[n]: white else:Col[n] fi;
+    else:
+    draw
+    hachurage((O--if #7=0:arccercle(A[n-1],A[n],O)
+    else:arccercle(A[n],A[n-1],O) fi--cycle),p_*(#3/total[N]) if
+    (n mod 2)=0: +90 else: -90 fi,0.25,if (n mod 2)=0 : 0 else: 1 fi)
+    if #4=1: withcolor 0.5white fi;
+    fi;
+    draw A[n-1]--O--A[n] if #6=1: withpen pencircle scaled2 fi;
     % Affichage des angles associés
     if #4=1:
     if round(p_*(#3/total[N]))>15:
     if (n mod 2)=0:
-    marque_a:=0.9*20
+    marque_a:=3.1*20
+    else:
+    marque_a:=3.1*20/0.9
+    fi;
+    if #6=1:
+    if #7=0:
+    undraw
+    Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")))));
+    else:
+    undraw
+    Codeangle(A[n],O,A[n-1],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")))));
+    fi;
+    fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
+    blanc;
+    fi;
+    if #7=0:
+    draw
+    Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")))));
     else:
-    marque_a:=1.1*20/0.9
+    draw
+    Codeangle(A[n],O,A[n-1],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")))));
     fi;
-    draw Codeangle(A[n-1],O,A[n],0,(((TEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")) scaled 0.5)));
     fi;
     fi;
     %
     fi;
     endfor;
+    if #3=360:
+    draw cc if #6=1: withpen pencircle scaled2 fi;
+    else:
+    draw (subpath(0,length cc/2) of cc)--cycle if #6=1: withpen pencircle scaled2 fi;;
+    fi;
     n:=0;
     path cd[];
     for p_=t:
     if string p_:
     n:=n+1;
-    C[n]=A[n-1] rotatedabout(O,(ang[n]-ang[n-1])/2);
+    C[n]=A[n-1] rotatedabout(O,if #7=1:-1* fi(ang[n]-ang[n-1])/2);
     draw 0.95[O,C[n]]--1.05[O,C[n]];
     C[n]:=1.05[O,C[n]];
     if (xpart(C[n])>xpart(O)) and (ypart(C[n])>ypart(O)):
@@ -6002,7 +6527,7 @@ vardef Positions(expr Step)=
     toto(#2);
   \end{mplibcode}
   \else
-  \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+  \begin{mpost}%[mpsettings={input PfC-Geometrie;}]
     pair A[],O,B[],C[],D[];
     O=(0,0);
     n:=0;
@@ -6011,13 +6536,20 @@ vardef Positions(expr Step)=
     ang[0]:=0;
     path cc;
     cc=(fullcircle scaled (2*#1));
-    if #3=360:
-    draw cc;
+    % on récupère les couleurs
+    color Col[];
+    n:=0;
+    for p_=#5:
+    n:=n+1;
+    Col[n]=p_;
+    endfor;
+    if #7=0:
+    A[0]=point(0) of cc;
     else:
-    draw (subpath(0,length cc/2) of cc)--cycle;
+    A[0]=point(180) of cc;
     fi;
-    A[0]=point(0) of cc;
     vardef toto(text t)=
+    n:=0;
     for p_=t:
     if numeric p_:
     n:=n+1;
@@ -6032,28 +6564,65 @@ vardef Positions(expr Step)=
     for p_=t:
     if numeric p_:
     n:=n+1;
+    if #7=0:
     A[n]=A[n-1] rotatedabout(O,p_*(#3/total[N]));
-    draw A[n-1]--O--A[n];
+    else:
+    A[n]=A[n-1] rotatedabout(O,-p_*(#3/total[N]));
+    fi;
+    %hachure ou pas ?
+    if #6=0:
+    fill (O--if #7=0:arccercle(A[n-1],A[n],O) else:
+    arccercle(A[n],A[n-1],O) fi--cycle) withcolor if unknown Col[n]: white else:Col[n] fi;
+    else:
+    draw
+    hachurage((O--if #7=0:arccercle(A[n-1],A[n],O)
+    else:arccercle(A[n],A[n-1],O) fi--cycle),p_*(#3/total[N]) if
+    (n mod 2)=0: +90 else: -90 fi,0.25,if (n mod 2)=0 : 0 else: 1 fi)
+    if #4=1: withcolor 0.5white fi;
+    fi;
+    draw A[n-1]--O--A[n] if #6=1: withpen pencircle scaled2 fi;
     % Affichage des angles associés
     if #4=1:
     if round(p_*(#3/total[N]))>15:
     if (n mod 2)=0:
-    marque_a:=0.9*20
+    marque_a:=3.1*20
+    else:
+    marque_a:=3.1*20/0.9
+    fi;
+    if #6=1:
+    if #7=0:
+    undraw
+    Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")))));
+    else:
+    undraw
+    Codeangle(A[n],O,A[n-1],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")))));
+    fi;
+    fill cercles(w shifted(marque_ang*unitvector(w-O)),3mm) withcolor
+    blanc;
+    fi;
+    if #7=0:
+    draw
+    Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")))));
     else:
-    marque_a:=1.1*20/0.9
+    draw
+    Codeangle(A[n],O,A[n-1],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")))));
     fi;
-    draw Codeangle(A[n-1],O,A[n],0,(((LATEX("\ang{"&decimal(round(p_*(#3/total[N])))&"}")) scaled 0.5)));
     fi;
     fi;
     %
     fi;
     endfor;
+    if #3=360:
+    draw cc if #6=1: withpen pencircle scaled2 fi;
+    else:
+    draw (subpath(0,length cc/2) of cc)--cycle if #6=1: withpen pencircle scaled2 fi;;
+    fi;
     n:=0;
     path cd[];
     for p_=t:
     if string p_:
     n:=n+1;
-    C[n]=A[n-1] rotatedabout(O,(ang[n]-ang[n-1])/2);
+    C[n]=A[n-1] rotatedabout(O,if #7=1:-1* fi(ang[n]-ang[n-1])/2);
     draw 0.95[O,C[n]]--1.05[O,C[n]];
     C[n]:=1.05[O,C[n]];
     if (xpart(C[n])>xpart(O)) and (ypart(C[n])>ypart(O)):
@@ -6089,8 +6658,16 @@ vardef Positions(expr Step)=
 \DTLgnewdb{mtdb}%
 \dtlexpandnewvalue%
 \newcount\nbdonnees%
-
-
+% 
+\def\AjoutListEEaa#1\nil{\addtotok\tabtoksEEa{#1,}}%
+\def\AjoutListEEab#1\nil{\addtotok\tabtoksEEa{#1/}}%
+\def\AjoutListEEb#1\nil{\addtotok\tabtoksEEb{#1,}}%
+\def\AjoutListEEx#1\nil{\addtotok\tabtoksEE{#1,}}%
+\def\AjoutListEEy#1\nil{\addtotok\tabtoksEE{#1/}}%
+
+\DTLgnewdb{mtdbEE}%
+\DTLgnewdb{mtdbEEqual}%
+%
 \newcommand\Stat[2][]{%
   \useKVdefault[ClesStat]%
   \setKV[ClesStat]{#1}%
@@ -6104,11 +6681,89 @@ vardef Positions(expr Step)=
     }%
     \readlist*\ListeComplete{\foo}%
     \setKV[ClesStat]{Qualitatif}%
+  }{
+  \ifboolKV[ClesStat]{Sondage}{%
+    \setsepchar{,}\ignoreemptyitems%
+    \readlist*\Liste{#2}%
+    % "liste vide"
+	\newtoks\tabtoksEEa%
+	\tabtoksEEa{}%
+	%
+	% "liste vide"
+	\newtoks\tabtoksEEb%
+	\tabtoksEEb{}%
+    %
+	\readlist*\ListeSansDoublonsEE{999}%   %% Pour ne pas avoir une liste vide
+	%
+	\newcount\cmptEE%
+	\newcount\PasNumEE%    %% Permettra de savoir si ce sondage est qualitatif ou quantitatif
+	\PasNumEE=0\relax%
+	\DTLcleardb{mtdbEE}%
+  % on range les resultats du sondage par ordre croissant.
+  \foreachitem\x\in\Liste{%
+    \DTLnewrow{mtdbEE}%
+    \DTLnewdbentry{mtdbEE}{Numeric}{\x}%
+  }%
+  \dtlsort{Numeric}{mtdbEE}{\dtlicompare}%
+	\DTLforeach{mtdbEE}{\nba=Numeric}{%
+		\IfDecimal{\nba}{}{\PasNumEE=\numexpr\PasNumEE+1\relax}%
+		\cmptEE=0\relax%
+		\foreachitem\nbb\in\ListeSansDoublonsEE{%
+			\ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
+		}%
+		\ifthenelse{\equal{\the\cmptEE}{0}}{%
+			\expandafter\AjoutListEEb\nba\nil%
+			\xdef\listEEa{\the\tabtoksEEb}%
+			\ignoreemptyitems%
+			\setsepchar{,}%
+			\readlist*\ListeSansDoublonsEE\listEEa%    	%%% Enlève tous les élements
+														%%% identiques de Liste
+		}{}%  
+	}%	
+	\foreachitem\nba\in\ListeSansDoublonsEE{%
+		\cmptEE=0\relax%
+		\DTLforeach{mtdbEE}{\nbb=Numeric}{%
+			\ifthenelse{\equal{\nba}{\nbb}}{\cmptEE=\numexpr\cmptEE+1\relax}{}%
+		}%
+		\expandafter\AjoutListEEab\nba\nil%
+		\expandafter\AjoutListEEaa\the\cmptEE\nil% 	%%% Compte tous les élements
+													%%% identiques de Liste
+	}%
+	\xdef\listEEb{\the\tabtoksEEa}
+	\ignoreemptyitems%
+	\setsepchar[*]{,*/}
+	\readlist*\ListeComplete\listEEb%
+    %
+    \ifthenelse{\equal{\the\PasNumEE}{0}}{\setKV[ClesStat]{Quantitatif}}{\setKV[ClesStat]{Qualitatif}}%
   }{%
+  \ifboolKV[ClesStat]{Qualitatif}{%
     %  % on lit la liste écrite sous la forme valeur/effectif
     \setsepchar[*]{,*/}\ignoreemptyitems%
     \readlist*\ListeComplete{#2}%
-  }
+    }{% Dans le qualitatif, on trie d'abord les valeurs.
+    \setsepchar[*]{,*/}\ignoreemptyitems%
+    \readlist*\ListeInitiale{#2}%
+% "liste vide"
+	\newtoks\tabtoksEE%
+	\tabtoksEE{}%
+	\DTLcleardb{mtdbEEqual}%
+  	\foreachitem\x\in\ListeInitiale{%
+    	\DTLnewrow{mtdbEEqual}%
+    	\itemtomacro\ListeInitiale[\xcnt,1]\x%
+    	\DTLnewdbentry{mtdbEEqual}{Val}{\x}%
+    	\itemtomacro\ListeInitiale[\xcnt,2]\y%
+    	\DTLnewdbentry{mtdbEEqual}{Eff}{\y}%
+  	}%
+  	\dtlsort{Val}{mtdbEEqual}{\dtlicompare}%
+	\DTLforeach{mtdbEEqual}{\Val=Val,\Eff=Eff}{%  
+		\expandafter\AjoutListEEy\Val\nil%
+		\expandafter\AjoutListEEx\Eff\nil%
+	}
+	\xdef\listEE{\the\tabtoksEE}
+	\ignoreemptyitems%
+	\setsepchar[*]{,*/}
+	\readlist*\ListeComplete\listEE%
+  }}}
   % on crée la base de données des valeurs dans le cas qualitatif
   \DTLcleardb{mtdb}%
   % on les trie pour la médiane dans le cas qualitatif % Touhami / Texnique.fr
@@ -6134,14 +6789,20 @@ vardef Positions(expr Step)=
     %  %% celui de la somme des données
     \foreachitem\don\in\ListeComplete{\xdef\SommeDonnees{\fpeval{\SommeDonnees+\ListeComplete[\doncnt,2]}}}%
     %  %% celui de l'effectif total
-    \xdef\EffectifTotal{\SommeDonnees}%
     \ifboolKV[ClesStat]{EffectifTotal}{%
-      L'effectif total est \num{\ListeCompletelen}.\par
-    }{}
+      \ifboolKV[ClesStat]{Liste}{L'effectif total de la série est
+        \num{\ListeCompletelen}.\par}{
+        \foreachitem\don\in\ListeComplete{\xdef\EffectifTotal{\fpeval{\EffectifTotal+\ListeComplete[\doncnt,2]}}}%
+        L'effectif total de la série est : \[\ListeComplete[1,2]\xintFor* ##1 in
+          {\xintSeq {2}{\ListeCompletelen}}\do{%
+            +\ListeComplete[##1,2]}=\num{\EffectifTotal}\]}
+    }{}%
+    \xdef\EffectifTotal{\SommeDonnees}%
     %  %% celui de la moyenne
-    \xdef\Moyenne{\fpeval{\SommeDonnees/\ListeCompletelen}}%
+    \xdef\Moyenne{\fpeval{\SommeDonnees/\ListeCompletelen}}%	
     \ifboolKV[ClesStat]{Moyenne}{%
-      La somme des données est :%
+    \ifboolKV[ClesStat]{Liste}{%    
+      La somme des données de la série est :%
       \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
         \[
           \num{\ListeComplete[1,2]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
@@ -6155,15 +6816,15 @@ vardef Positions(expr Step)=
         }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}%
       \]%
     }%
-      \ifboolKV[ClesStat]{SET}{}{L'effectif total est \num{\ListeCompletelen}.\\}%
-      Donc la moyenne est égale à :%
+      \ifboolKV[ClesStat]{SET}{}{Le nombre de données de la série est \num{\ListeCompletelen}.\\}%
+      Donc la moyenne de la série est égale à :%
       \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\ListeCompletelen}}%\IfInteger{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}{=}{\approx}
         \opdiv*{\SommeDonnees}{\ListeCompletelen}{resultatmoy}{restemoy}%
         \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
               \opcmp{resultatmoy}{resultatmoy1}\ifopeq=\else\approx\fi%
         \num{\fpeval{round(\fpeval{\SommeDonnees/\ListeCompletelen},\useKV[ClesStat]{Precision})}}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}.}{.}%
       \]%
-    }{}%
+    }{Pas de moyenne possible pour une série de données à caractère qualitatif.}}{}%
     %    %  %% celui de l'étendue
     \xintFor* ##1 in {\xintSeq {1}{\ListeCompletelen}}\do{%
       \xintifboolexpr{\ListeComplete[##1,2]>\DonneeMax}{%
@@ -6175,11 +6836,12 @@ vardef Positions(expr Step)=
     }%
     \xdef\EffectifMax{\DonneeMax}%
     \xdef\Etendue{\fpeval{\DonneeMax-\DonneeMin}}%
-    \ifboolKV[ClesStat]{Etendue}{L'étendue est égale à $\num{\DonneeMax}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\DonneeMin}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
-    }{}%
+    \ifboolKV[ClesStat]{Etendue}{%
+    \ifboolKV[ClesStat]{Liste}{%
+    L'étendue de la série est égale à $\num{\DonneeMax}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\DonneeMin}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+    }{Pas d'étendue possible pour une série de données à caractère qualitatif.}}{}%
     \ifboolKV[ClesStat]{Mediane}{%
-      %%%%%%%%%%%%%%%%%%%%%%%%
-      
+    \ifboolKV[ClesStat]{Liste}{%    
       On range les données par ordre croissant :%
       \nbdonnees=0%
       \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
@@ -6198,35 +6860,38 @@ vardef Positions(expr Step)=
       \newcount\meda%
       \ifodd\number\ListeCompletelen%odd impair
       \med=\fpeval{(\ListeCompletelen+1)/2}\relax%
-      L'effectif total est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$.\\
+      L'effectif total de la série est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$.\\
       \else% pair
       \med=\fpeval{\ListeCompletelen/2}\relax
       \meda=\numexpr\med+1\relax
-      L'effectif total est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\the\med}+\num{\the\med}$.\\
+      L'effectif total de la série est \num{\ListeCompletelen}. Or, $\num{\ListeCompletelen}=\num{\the\med}+\num{\the\med}$.\\
       \fi%
       \newcount\k%
       \k=0%
       \DTLforeach{mtdb}{\numeroDonnee=Numeric}{\k=\numexpr\k+1\relax%
         \ifnum\k=\med %La médiane vaut \numeroDonnee\fi
         \ifodd\number\ListeCompletelen%
-        La médiane est la \the\med\ieme{} donnée.\\Donc la médiane est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+        La médiane de la série est la \the\med\ieme{} donnée.\\Donc la médiane de la série est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
         \else%
         La \the\med\ieme{} donnée est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\xdef\Mediane{\numeroDonnee} %
         \fi
         \fi
         \ifnum\k=\meda
-        La \the\meda\ieme{} donnée est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.} Donc la médiane est \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}
+        La \the\meda\ieme{} donnée est \num{\numeroDonnee}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.} Donc la médiane de la série est \xdef\Mediane{\fpeval{(\Mediane+\numeroDonnee)/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}
         \fi
       }
       %%%%%%%%%%%%%%%%%%%%%%%% 
-    }{}
-    % construction du tableau
-    \ifboolKV[ClesStat]{Tableau}{\ifboolKV[ClesStat]{Total}{\buildtabqt}{\buildtabq}}{}
-    % Construction du graphique ??
+    }{Pas de médiane possible pour une série de données à caractère qualitatif.}}{}
+    % Construction du tableau
+    \ifboolKV[ClesStat]{Tableau}{%
+    \ifboolKV[ClesStat]{Liste}{Pas de tableau possible avec la clé Liste.\\Utilisez plutôt la clé Sondage si vous voulez un tableau avec cette liste.}{%
+    \ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}}%
+    {}%
+    % Construction du graphique
     \ifboolKV[ClesStat]{Graphique}{%
-      \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{}}
-      \ifboolKV[ClesStat]{Batons}{\buildgraphq}{}
-    }{}
+    \ifboolKV[ClesStat]{Liste}{Pas de graphique possible avec la clé Liste.\\Utilisez plutôt la clé Sondage si vous voulez un graphique avec cette liste.}{%
+      \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraphq[#1]}}%
+    }}{}
   }{%%%%%%%%%%%%%%%%%%%%%Début quantitatif
    %  % on effectue les calculs
    %  %% celui de la somme des données
@@ -6247,12 +6912,12 @@ vardef Positions(expr Step)=
     %  %% celui de la moyenne
     \xdef\Moyenne{\fpeval{\SommeDonnees/\EffectifTotal}}%
     \ifboolKV[ClesStat]{EffectifTotal}{%
-      L'effectif total est : \[\ListeComplete[1,2]\xintFor* ##1 in
+      L'effectif total de la série est : \[\ListeComplete[1,2]\xintFor* ##1 in
       {\xintSeq {2}{\ListeCompletelen}}\do{%
         +\ListeComplete[##1,2]}=\num{\EffectifTotal}\]
     }{}%
     \ifboolKV[ClesStat]{Moyenne}{%
-      La somme des données est :%
+      La somme des données de la série est :%
       \xintifboolexpr{\ListeCompletelen<\useKV[ClesStat]{Coupure}}{%
         \[
           \ifnum\ListeComplete[1,2]=1\else\num{\ListeComplete[1,2]}\times\fi\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
@@ -6268,7 +6933,7 @@ vardef Positions(expr Step)=
           }=\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}
         \]
       }
-      \ifboolKV[ClesStat]{SET}{}{L'effectif total est :%
+      \ifboolKV[ClesStat]{SET}{}{L'effectif total de la série est :%
         \ifboolKV[ClesStat]{Liste}{ \num{\EffectifTotal}\\}{%
           \[\num{\ListeComplete[1,2]}\xintFor* ##1 in {\xintSeq {2}{\ListeCompletelen}}\do{%
               +\num{\ListeComplete[##1,2]}
@@ -6276,7 +6941,7 @@ vardef Positions(expr Step)=
           \]%
         }%
       }
-      Donc la moyenne est égale à :%
+      Donc la moyenne de la série est égale à :%
       \[\frac{\num{\SommeDonnees}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}}{\num{\EffectifTotal}}%
         \opdiv*{\SommeDonnees}{\EffectifTotal}{resultatmoy}{restemoy}%
         \opround{resultatmoy}{\useKV[ClesStat]{Precision}}{resultatmoy1}%
@@ -6287,7 +6952,7 @@ vardef Positions(expr Step)=
     }{}%
     %  % Affichage des réponses.
     %  %% pour l'étendue
-    \ifboolKV[ClesStat]{Etendue}{L'étendue est égale à $\num{\ListeComplete[\ListeCompletelen,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}}{}%
+    \ifboolKV[ClesStat]{Etendue}{L'étendue de la série est égale à $\num{\ListeComplete[\ListeCompletelen,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}-\num{\ListeComplete[1,1]}\ifboolKV[ClesStat]{Concret}{~\text{\useKV[ClesStat]{Unite}}}{}=\num{\Etendue}$\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}}{}%
     %  %% pour la médiane
     \ifboolKV[ClesStat]{Mediane}{%
       
@@ -6295,11 +6960,11 @@ vardef Positions(expr Step)=
       \newcount\meda%
       \ifodd\number\EffectifTotal%odd impair
       \med=\fpeval{(\EffectifTotal+1)/2}\relax%
-      L'effectif total est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$. %
+      L'effectif total de la série est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med-1}}+1+\num{\fpeval{\med-1}}$. %
       \else% pair
       \med=\fpeval{\EffectifTotal/2}\relax%
       \meda=\numexpr\med+1\relax%
-      L'effectif total est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med}}+\num{\fpeval{\med}}$. %
+      L'effectif total de la série est \num{\EffectifTotal}. Or, $\num{\EffectifTotal}=\num{\fpeval{\med}}+\num{\fpeval{\med}}$. %
       \fi%
       \newcount\k%
       \k=0%
@@ -6308,13 +6973,13 @@ vardef Positions(expr Step)=
           \k=\numexpr\k+1\relax%
           \ifnum\k=\med%
           \ifodd\number\EffectifTotal%
-          La médiane est la \the\med\ieme{} donnée. Donc la médiane est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+          La médiane de la série est la \the\med\ieme{} donnée. Donc la médiane de la série est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
           \else%
           La \the\med\ieme{} donnée est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}. }{. }\xdef\Mediane{\ListeComplete[##1,1]}%
           \fi%
           \fi%
           \ifnum\k=\meda%
-          La \the\meda\ieme{} valeur est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\\Donc la médiane est \xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
+          La \the\meda\ieme{} valeur est \num{\ListeComplete[##1,1]}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}\\Donc la médiane de la série est \xdef\Mediane{\fpeval{(\Mediane+\ListeComplete[##1,1])/2}}\num{\Mediane}\ifboolKV[ClesStat]{Concret}{~\useKV[ClesStat]{Unite}.}{.}%
           \fi%
         }%
       }%
@@ -6322,13 +6987,15 @@ vardef Positions(expr Step)=
     % Construction de tableau
     \ifboolKV[ClesStat]{Tableau}{\ifboolKV[ClesStat]{Total}{\buildtabt}{\buildtab}}{}%
     % Construction du graphique ??
-    \ifboolKV[ClesStat]{Graphique}{\buildgraph}{}%
+    \ifboolKV[ClesStat]{Graphique}{%
+      \ifboolKV[ClesStat]{Angle}{\buildgraphcq{360}}{\ifboolKV[ClesStat]{SemiAngle}{\buildgraphcq{180}}{\buildgraph[#1]}}
+    }{}%
   }%
 }%
 
-%%%%%%%%%%%%%
-%%% Radar
-%%%%%%%%%%%%%
+%%%
+% Radar
+%%%
 \setKVdefault[ClesRadar]{Rayon=3cm,Reference=20,MoyenneClasse=false,Disciplines=false,Pas=5}
 
 \newtoks\toklisteradara%pour la moyenne de l'élève
@@ -6359,12 +7026,17 @@ vardef Positions(expr Step)=
     p:=0;
     for p_=#2:
     p:=p+1;
-    if N[p]>180:
-    label(TEX(p_)
-    rotated(90+N[p]),1.15[O,pointarc(cc,N[p])]);
-    else:
-    label(TEX(p_)
-    rotated(-90+N[p]),1.15[O,pointarc(cc,N[p])]);
+    if (N[p]<90) or (N[p]=90):
+    label.urt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if ((N[p]>90) and (N[p]<180)) or (N[p]=180):
+    label.ulft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if (N[p]>180) and (N[p]<270):
+    label.llft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if (N[p]>270) or (N[p]=270):
+    label.lrt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
     fi;
     endfor;
     % tracé des pas:
@@ -6376,7 +7048,7 @@ vardef Positions(expr Step)=
     trace pointarc(cc,N[1]) for l=2 upto n: --pointarc(cc,N[l]) endfor
     --cycle;
     % etiquettage des pas
-    dotlabel.top(btex \tiny #4 etex rotated -90,pointarc(cc,0));
+    dotlabel.urt(btex \tiny #4 etex,pointarc(cc,0));
     dotlabel.urt(btex \tiny #3 etex,(1/pas)[O,pointarc(cc,0)]);
     % tracé des résultats élèves
     pair El[];
@@ -6414,12 +7086,17 @@ vardef Positions(expr Step)=
     p:=0;
     for p_=#2:
     p:=p+1;
-    if N[p]>180:
-    label(LATEX(p_)
-    rotated(90+N[p]),1.15[O,pointarc(cc,N[p])]);
-    else:
-    label(LATEX(p_)
-    rotated(-90+N[p]),1.15[O,pointarc(cc,N[p])]);
+    if (N[p]<90) or (N[p]=90):
+    label.urt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if ((N[p]>90) and (N[p]<180)) or (N[p]=180):
+    label.ulft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if (N[p]>180) and (N[p]<270):
+    label.llft(TEX(p_),1.025[O,pointarc(cc,N[p])]);
+    fi;
+    if (N[p]>270) or (N[p]=270):
+    label.lrt(TEX(p_),1.025[O,pointarc(cc,N[p])]);
     fi;
     endfor;
     % tracé des pas:
@@ -6460,6 +7137,7 @@ vardef Positions(expr Step)=
   \useKVdefault[ClesRadar]%
   \setKV[ClesRadar]{#1}%
   \ignoreemptyitems%
+  \setsepchar[*]{,}%  
   \readlist*\ListeRadar{#2}%
   \toklisteradara{}%
   \foreachitem\compteur\in\ListeRadar{\expandafter\UpdateRadara\compteur\nil}%
@@ -6474,9 +7152,9 @@ vardef Positions(expr Step)=
   \MPRadar{\useKV[ClesRadar]{Rayon}}{\the\toklisteradarb}{\useKV[ClesRadar]{Pas}}{\useKV[ClesRadar]{Reference}}{\the\toklisteradara}{\the\toklisteradarc}%
 }
 
-%%%%%%%%%%%%
+%%%
 % Barres de niveaux
-%%%%%%%%%%%%
+%%%
 \setKVdefault[ClesBarre]{Niveau=false,LimiteI=25,LimiteF=50,LimiteS=75,TexteOrigine=0,TexteReference=100,CouleurGraduation=white,CouleurFond=gray!50,CouleurBarre=black,Graduation=false,Nom=Défaut,Pas=10,CouleurI=red,CouleurF=orange,CouleurS=yellow,CouleurM=green}
 
 \newlength{\barrewidth}
@@ -6537,10 +7215,10 @@ vardef Positions(expr Step)=
   }
 }
 
-%%%%%%%%%%%%%%%
-%%% Equations
-%%%%%%%%%%%%%%%
-\setKVdefault[ClesEquation]{Ecart=0.5,Fleches=false,FlecheDiv=false,Laurent=false,Decomposition=false,Terme=false,Composition=false,Symbole=false,Entier=false,Lettre=x,Solution=false,Bloc=false,Simplification=false,CouleurTerme=black,CouleurCompo=black,CouleurSous=red,CouleurSymbole=orange,Verification=false,Nombre=0,Egalite=false,Produit=false,Facteurs=false,Carre=false,Pose=false,Equivalence=false}
+%%%
+% Equations
+%%%
+\setKVdefault[ClesEquation]{Ecart=0.5,Fleches=false,FlecheDiv=false,Laurent=false,Decomposition=false,Terme=false,Composition=false,Symbole=false,Entier=false,Lettre=x,Solution=false,LettreSol=true,Bloc=false,Simplification=false,CouleurTerme=black,CouleurCompo=black,CouleurSous=red,CouleurSymbole=orange,Verification=false,Nombre=0,Egalite=false,Produit=false,Facteurs=false,Carre=false,Exact=false,Pose=false,Equivalence=false}
 
 \newcommand\rightcomment[4]%
   {\begin{tikzpicture}[remember picture,overlay]
@@ -6552,7 +7230,6 @@ vardef Positions(expr Step)=
    \end{tikzpicture}%
  }
 
-
  \newcommand\leftcomment[4]%
   {\begin{tikzpicture}[remember picture,overlay]
    \draw[Cfleches,-stealth]
@@ -6659,9 +7336,9 @@ vardef Positions(expr Step)=
 
 \definecolor{Cfleches}{RGB}{100,100,100}%
 
-\input{PfC-EquationSoustraction1}%
+\input{PfC-EquationSoustraction2}%
 \input{PfC-EquationTerme1}%
-\input{PfC-EquationComposition1}%
+\input{PfC-EquationComposition2}%
 \input{PfC-EquationPose1}%
 \input{PfC-EquationSymbole1}%
 \input{PfC-EquationLaurent1}
@@ -6716,12 +7393,12 @@ vardef Positions(expr Step)=
       Comme \num{#2} est positif, alors l'équation $\useKV[ClesEquation]{Lettre}^2=\num{#2}$ a deux solutions :%
       \begin{align*}
         \useKV[ClesEquation]{Lettre}&=\sqrt{\num{#2}}&&\text{et}&\useKV[ClesEquation]{Lettre}&=-\sqrt{\num{#2}}%\\
-        \ifboolKV[ClesEquation]{Entier}{\\%
+        \ifboolKV[ClesEquation]{Exact}{\\%
         \useKV[ClesEquation]{Lettre}&=\num{\fpeval{sqrt(#2)}}&&\text{et}&\useKV[ClesEquation]{Lettre}&=-\num{\fpeval{sqrt(#2)}}}{}%
       \end{align*}
-    }
-  }
-}
+    }%
+  }%
+}%
 
 \newcommand\ResolEquationProduit[5][]{%
   \setKV[ClesEquation]{#1}%
@@ -6782,9 +7459,8 @@ vardef Positions(expr Step)=
       }
     \end{align*}
   }%
-      
-    \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#3=0}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}})}\xintifboolexpr{#5=0}{\times\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}})}=0$ a deux solutions : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$ et \opdiv*{\Coeffd}{\Coeffc}{solution}{resteequa}\opcmp{resteequa}{0}$\useKV[ClesEquation]{Lettre}=\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffd}{\Coeffc}}{\frac{\num{\Coeffd}}{\num{\Coeffc}}}\fi$.
-    }{}
+  \ifboolKV[ClesEquation]{Solution}{L'équation $\xintifboolexpr{#3=0}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}})}\xintifboolexpr{#5=0}{\times\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}}{(\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}})}=0$ a deux solutions : \opdiv*{\Coeffb}{\Coeffa}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffb}{\Coeffa}}{\frac{\num{\Coeffb}}{\num{\Coeffa}}}\fi$ et \opdiv*{\Coeffd}{\Coeffc}{solution}{resteequa}\opcmp{resteequa}{0}$\ifboolKV[ClesEquation]{LettreSol}{\useKV[ClesEquation]{Lettre}=}{}\displaystyle\ifopeq\opexport{solution}{\solution}\num{\solution}\else\ifboolKV[ClesEquation]{Entier}{\SSimplifie{\Coeffd}{\Coeffc}}{\frac{\num{\Coeffd}}{\num{\Coeffc}}}\fi$.
+  }{}%
 }
 
 \newcommand\Verification[5][]{%
@@ -6802,10 +7478,10 @@ vardef Positions(expr Step)=
   }{\xintifboolexpr{\Testa=\Testb}{Comme $\num{\Testa}=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ est bien }{Comme $\num{\Testa}\not=\num{\Testb}$, alors $\useKV[ClesEquation]{Lettre}=\num{\useKV[ClesEquation]{Nombre}}$ n'est pas }une solution de l'équation $\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#2=1}{}{\num{#2}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}=\xintifboolexpr{#4=0}{\num{#5}}{\xintifboolexpr{#4=1}{}{\num{#4}}\useKV[ClesEquation]{Lettre}\xintifboolexpr{#5=0}{}{\xintifboolexpr{#5>0}{+\num{#5}}{-\num{\fpeval{0-#5}}}}}$.}
 }
 
-%%%%%%%%%%%%%%%%%%%% 
-%%% Proportionnalité
-%%%%%%%%%%%%%%%%%%%%
-\setKVdefault[ClesPropor]{GrandeurA=Grandeur A,GrandeurB=Grandeur B,Largeur=1cm,Math=false,Stretch=1,ColorFill=white,ColorTab=gray!15}%Tableau=false :
+%%%
+% Proportionnalité
+%%%
+\setKVdefault[ClesPropor]{GrandeurA=Grandeur A,GrandeurB=Grandeur B,Largeur=1cm,Math=false,Stretch=1,ColorFill=white,CouleurTab=gray!15}%Tableau=false :
                                 %inutile ?
 
 \def\Updatetoksmath#1/#2\nil{\addtotok\tabtoksa{&#1}\addtotok\tabtoksb{&#2}}%
@@ -6819,7 +7495,7 @@ vardef Positions(expr Step)=
   }%
   \xdef\LongListe{\ListeValeurlen}%
   \renewcommand{\arraystretch}{\useKV[ClesPropor]{Stretch}}%
-  \begin{tabular}{|>{\columncolor{\useKV[ClesPropor]{ColorTab}}}c|*{\number\numexpr\ListeValeurlen}{>{\centering\arraybackslash}p{\useKV[ClesPropor]{Largeur}}|}}%
+  \begin{tabular}{|>{\columncolor{\useKV[ClesPropor]{CouleurTab}}}c|*{\number\numexpr\ListeValeurlen}{>{\centering\arraybackslash}p{\useKV[ClesPropor]{Largeur}}|}}%
     \multicolumn{1}{c}{\TikzPHD\setcounter{NbPropor}{1}}\xintFor* ##1 in {\xintSeq {1}{\ListeValeurlen}}\do{&\multicolumn{1}{c}{\TikzPH}}\\%
     \hhline{*{\number\numexpr\ListeValeurlen+1}{-}}%
     \the\tabtoksa\\%
@@ -6839,9 +7515,15 @@ vardef Positions(expr Step)=
  }%
 
  \newcommand{\TikzPHD}{%
-   \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}
-   \tikz[remember picture,overlay]{%
-   \coordinate[name=ProporHD,xshift=-0.5*\the\wd1,yshift=-\the\dp\strutbox*\arraystretch];}%
+   \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}%
+   \setbox2=\hbox{\useKV[ClesPropor]{GrandeurB}}%
+   \xintifboolexpr{\wd1>\wd2}{%
+     \tikz[remember picture,overlay]{%
+       \coordinate[name=ProporHD,xshift=-0.5\wd1,yshift=-\the\dp\strutbox*\arraystretch];}%
+   }{%
+     \tikz[remember picture,overlay]{%
+       \coordinate[name=ProporHD,xshift=-0.5\wd2,yshift=-\the\dp\strutbox*\arraystretch];}%
+   }
  }%
 
  \newcommand{\TikzPB}{%
@@ -6851,20 +7533,26 @@ vardef Positions(expr Step)=
  }%
 
  \newcommand{\TikzPBD}{%
-   \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}
-   \tikz[remember picture, overlay]{%
-     \coordinate[name=ProporBD,xshift=-0.5*\the\wd1,yshift=\the\ht\strutbox*\arraystretch];}%
+   \setbox1=\hbox{\useKV[ClesPropor]{GrandeurA}}%
+   \setbox2=\hbox{\useKV[ClesPropor]{GrandeurB}}%
+   \xintifboolexpr{\wd1>\wd2}{%
+     \tikz[remember picture, overlay]{%
+       \coordinate[name=ProporBD,xshift=-0.5*\the\wd1,yshift=\the\ht\strutbox*\arraystretch];}%
+   }{%
+     \tikz[remember picture, overlay]{%
+       \coordinate[name=ProporBD,xshift=-0.5*\the\wd2,yshift=\the\ht\strutbox*\arraystretch];}%
+   }
    \stepcounter{NbPropor}%
  }%
  
  \newcommand\FlechesPH[3]{%
    \ifnum#1<#2\relax%
   \begin{tikzpicture}[remember picture,overlay]%
-    \draw[-stealth,out=50,in=130] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.65, sloped]{#3}(ProporH-#2);%
+    \draw[-stealth,out=50,in=130] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporH-#2);%
   \end{tikzpicture}%
   \else%
 \begin{tikzpicture}[remember picture,overlay]%
-    \draw[-stealth,out=130,in=50] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.65, sloped]{#3}(ProporH-#2);%
+    \draw[-stealth,out=130,in=50] (ProporH-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporH-#2);%
   \end{tikzpicture}%
   \fi%
 }%
@@ -6872,11 +7560,11 @@ vardef Positions(expr Step)=
 \newcommand\FlechesPB[3]{%
   \ifnum\number#1<\number#2\relax%
   \begin{tikzpicture}[remember picture,overlay]%
-    \draw[-stealth,out=-50,in=-130] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.65, sloped]{#3}(ProporB-#2);%
+    \draw[-stealth,out=-50,in=-130] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporB-#2);%
   \end{tikzpicture}%
   \else%
   \begin{tikzpicture}[remember picture,overlay]%
-    \draw[-stealth,out=-130,in=-50] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.65, sloped]{#3}(ProporB-#2);%
+    \draw[-stealth,out=-130,in=-50] (ProporB-#1) to node[inner sep=0pt, inner xsep=1pt,fill=\colorfill, pos=0.5, sloped]{#3}(ProporB-#2);%
   \end{tikzpicture}%
   \fi%
 }
@@ -6902,14 +7590,13 @@ vardef Positions(expr Step)=
 \end{tikzpicture}%
 }%
 
-\newcommand\FlecheCoefDebut[2][1.25\tabcolsep]{%
+\newcommand\FlecheCoefDebut[2][\tabcolsep+\arrayrulewidth]{%
   \begin{tikzpicture}[remember picture, overlay]%
     \node[] (Noeud1) at ($(ProporHD)!0.1!(ProporBD)$) {};%
     \node[] (Noeud2) at ($(ProporHD)!0.9!(ProporBD)$) {};%
     \coordinate[left of=Noeud1,node distance=#1] (noeud1);%
     \coordinate[left of=Noeud2,node distance=#1] (noeud2);%
     \draw[-stealth,out=160,in=-160] (noeud2) to node[midway,left,inner sep=1pt]{#2}(noeud1);%
-    %\draw[red](ProporHD) to (ProporBD);
 \end{tikzpicture}%
 }%
 
@@ -6945,26 +7632,26 @@ vardef Positions(expr Step)=
 \end{tikzpicture}
 }
 
-%%%%%%%%%%%
-%% Application : pourcentage
-%%%%%%%%%%%
-\setKVdefault[ClesPourcentage]{Appliquer,Calculer=false,Augmenter=false,Reduire=false,Fractionnaire=false,Decimal,Formule=false,Unite=g,Concret=false,GrandeurA=Grandeur A,GrandeurB=Total,MotReduction=diminution,AideTableau=false,ColorFill=white,ColorTab=gray!15}
+%%%
+% Application : pourcentage
+%%%
+\setKVdefault[ClesPourcentage]{Appliquer,Calculer=false,Augmenter=false,Reduire=false,Fractionnaire=false,Decimal,Formule=false,Unite=g,Concret=false,GrandeurA=Grandeur A,GrandeurB=Total,MotReduction=diminution,AideTableau=false,ColorFill=white,CouleurTab=gray!15}
   
 \newcommand\Pourcentage[3][]{%
   \useKVdefault[ClesPourcentage]%
   \setKV[ClesPourcentage]{#1}%
   \ifboolKV[ClesPourcentage]{Reduire}{%
     \ifboolKV[ClesPourcentage]{Formule}{%
-        Réduire une quantité de \num{#2}~\%, cela revient à multiplier cette quantitié par $1-\dfrac{\num{#2}}{100}$. Par conséquent, si on réduit \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
+        Réduire une quantité de \num{#2}~\%, cela revient à multiplier cette quantité par $1-\dfrac{\num{#2}}{100}$. Par conséquent, si on réduit \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
         \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1-\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1-\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1-#2/100)}}=\num{\fpeval{#3*(1-#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\]
       }{%
         Calculons ce que représente la \useKV[ClesPourcentage]{MotReduction} de \num{#2}~\%.
         \ifboolKV[ClesPourcentage]{AideTableau}{%
           \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
           \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
-          \xdef\NomColorTab{\useKV[ClesPourcentage]{ColorTab}}%
+          \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
           \begin{center}
-            \Propor[GrandeurA=\NomA,GrandeurB=\NomB,ColorTab=\NomColorTab]{/#3,#2/100}
+            \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab]{/#3,#2/100}
           \end{center}
           \FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
           On obtient une \useKV[ClesPourcentage]{MotReduction} de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}. Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}-\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1-#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
@@ -6975,16 +7662,16 @@ vardef Positions(expr Step)=
   }{%
     \ifboolKV[ClesPourcentage]{Augmenter}{%
       \ifboolKV[ClesPourcentage]{Formule}{%
-        Augmenter de \num{#2}~\% une quantité, cela revient à multiplier cette quantitié par $1+\dfrac{\num{#2}}{100}$. Par conséquent, si on augmente \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
+        Augmenter de \num{#2}~\% une quantité, cela revient à multiplier cette quantité par $1+\dfrac{\num{#2}}{100}$. Par conséquent, si on augmente \num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{} de \num{#2}~\%, cela donne :
         \[\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\left(1+\frac{\num{#2}}{100}\right)=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times(1+\num{\fpeval{#2/100}})=\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\times\num{\fpeval{(1+#2/100)}}=\num{\fpeval{#3*(1+#2/100)}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}\]
       }{%
         Calculons ce que représente l'augmentation de \num{#2}~\%. %
         \ifboolKV[ClesPourcentage]{AideTableau}{%
           \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
           \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
-          \xdef\NomColorTab{\useKV[ClesPourcentage]{ColorTab}}%
+          \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
           \begin{center}%
-            \Propor[GrandeurA=\NomA,GrandeurB=\NomB,ColorTab=\NomColorTab]{/#3,#2/100}%
+            \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab]{/#3,#2/100}%
           \end{center}%
           \FlecheCoefInv{\tiny$\times\num{\fpeval{#2/100}}$}%
           On obtient une augmentation de $\num{\fpeval{#2/100}}\times\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*#2/100}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.\\Donc un total de $\num{#3}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}+\num{\fpeval{#3*#2/100}}\ifboolKV[ClesPourcentage]{Concret}{~\text{\useKV[ClesPourcentage]{Unite}}}{}=\num{\fpeval{#3*(1+#2/100)}}$\ifboolKV[ClesPourcentage]{Concret}{~\useKV[ClesPourcentage]{Unite}}{}.%
@@ -6996,8 +7683,8 @@ vardef Positions(expr Step)=
       \ifboolKV[ClesPourcentage]{Calculer}{%
         \xdef\NomA{\useKV[ClesPourcentage]{GrandeurA}}%
         \xdef\NomB{\useKV[ClesPourcentage]{GrandeurB}}%
-        \xdef\NomColorTab{\useKV[ClesPourcentage]{ColorTab}}%
-        \Propor[GrandeurA=\NomA,GrandeurB=\NomB,ColorTab=\NomColorTab]{#2/#3,/100}%
+        \xdef\NomCouleurTab{\useKV[ClesPourcentage]{CouleurTab}}%
+        \Propor[GrandeurA=\NomA,GrandeurB=\NomB,CouleurTab=\NomCouleurTab]{#2/#3,/100}%
         \xdef\colorfill{\useKV[ClesPourcentage]{ColorFill}}%
         \FlechesPB{2}{1}{\scriptsize$\times\num{\fpeval{#3/100}}$}%
         \FlechesPH{1}{2}{\scriptsize$\div\num{\fpeval{#3/100}}$}%
@@ -7010,10 +7697,10 @@ vardef Positions(expr Step)=
   }%
 }%
 
-%%%%%%%%%%%%%
-%Lien : ratio
-%%%%%%%%%%%%%
-\setKVdefault[ClesRatio]{Figure=false,Longueur=5cm,TexteTotal=quantité,TextePart=part,Tableau=false,GrandeurA=Grandeur A,GrandeurB=Part(s),Largeur=1cm,Stretch=1,Nom=false,CouleurUn=gris,CouleurDeux=0.5gris+0.5blanc,CouleurTrois=white,ColorTab=gray!15}
+%%%
+% Lien : ratio
+%%%
+\setKVdefault[ClesRatio]{Figure=false,Longueur=5cm,TexteTotal=quantité,TextePart=part,Tableau=false,GrandeurA=Grandeur A,GrandeurB=Part(s),Largeur=1cm,Stretch=1,Nom=false,CouleurUn=gris,CouleurDeux=0.5gris+0.5blanc,CouleurTrois=white,CouleurTab=gray!15}
 
 \newcommand\MPTest[9][]{%
   % #2 : Longueur de la barre unité
@@ -7098,12 +7785,11 @@ vardef Positions(expr Step)=
     fi;
   \end{mplibcode}
   \else
-  \usempxpackage{simplekv}
   \mpxcommands{%
     \setKVdefault[ClesRatio]{TexteTotal=quantité,TextePart=part}
     \setKV[ClesRatio]{#1}
   }
-  \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+  \begin{mpost}
     vardef RatioTrois(expr long)(text t)=%longueur de la barre / quantité à partager / textepart :) / t le ratio
     pair A,B,C,D;
     A=u*(1,1);
@@ -7189,7 +7875,7 @@ vardef Positions(expr Step)=
   \foreachitem\compteur\in\ListeRatio{\expandafter\updateratiotoks\compteur\nil}%
   \xdef\LongListe{\ListeRatiolen}%
   \renewcommand{\arraystretch}{\useKV[ClesRatio]{Stretch}}%
-  \begin{tabular}{|>{\columncolor{\useKV[ClesRatio]{ColorTab}}}c|*{\number\numexpr\ListeRatiolen}{>{\centering\arraybackslash}p{\useKV[ClesRatio]{Largeur}}|}l}
+  \begin{tabular}{|>{\columncolor{\useKV[ClesRatio]{CouleurTab}}}c|*{\number\numexpr\ListeRatiolen}{>{\centering\arraybackslash}p{\useKV[ClesRatio]{Largeur}}|}l}
     \ifboolKV[ClesRatio]{Nom}{%
     \hhline{~*{\number\numexpr\ListeRatiolen}{-}}
     \multicolumn{1}{c|}{}\the\tabtoksc\\
@@ -7245,7 +7931,7 @@ vardef Positions(expr Step)=
     \foreachitem\compteur\in\ListeRatio{\expandafter\UpdateRatio\compteur\nil}%
     \itemtomacro\ListeRatio[1]\NbUn
     \itemtomacro\ListeRatio[2]\NbDeux
-    \xintifboolexpr{\ListeRatiolen>2}{\itemtomacro\ListeRatio[3]\NbTrois}{\newcommand\NbTrois{}}
+    \xintifboolexpr{\ListeRatiolen>2}{\itemtomacro\ListeRatio[3]\NbTrois}{\xdef\NbTrois{}}
     \MPTest[#1]{\useKV[ClesRatio]{Longueur}}{\NbUn}{\NbDeux}{\NbTrois}{\the\toklisteratio}{\useKV[ClesRatio]{CouleurUn}}{\useKV[ClesRatio]{CouleurDeux}}{\useKV[ClesRatio]{CouleurTrois}}%
   }{%
     \ifboolKV[ClesRatio]{Tableau}{%
@@ -7256,9 +7942,9 @@ vardef Positions(expr Step)=
   }%
 }%
 
-%%%%%%%%%%%%%%%
-%% Cartes Mentales
-%%%%%%%%%%%%%%%
+%%%
+% Cartes Mentales
+%%%
 \setKVdefault[ClesMentales]{Nom={Bulle}, Largeur=5cm, Ancre={0,0},Pointilles=false,CTrace=black,CFond=white,Epaisseur=1pt,Rayon=1}%
 \newenvironment{Mind}{\begin{tikzpicture}}{\end{tikzpicture}}%
 
@@ -7282,9 +7968,9 @@ vardef Positions(expr Step)=
   }
 }
 
-%%%%%%%%%%%%
+%%%
 % Pptés des droites (6eme)
-%%%%%%%%%%%
+%%%
 \setKVdefault[ClesDroites]{Brouillon=false,CitePropriete=false,Num=1,Figure=false,Remediation=false}
 
 \newcommand\Redaction[4][]{%
@@ -7320,7 +8006,7 @@ vardef Positions(expr Step)=
           Comme les droites $(\hbox to2em{\dotfill})$ et $(\hbox to2em{\dotfill})$ sont parallèles, alors la droite $(\hbox to2em{\dotfill})$ qui est perpendiculaire à $(\hbox to2em{\dotfill})$ est également perpendiculaire à la droite $(\hbox to2em{\dotfill})$.
         }
       }
-    }%%%%%%%%%%%%%%%%%%%%%
+    }%
   }{%
     \xintifboolexpr{\useKV[ClesDroites]{Num}=1}{%
       \ifboolKV[ClesDroites]{CitePropriete}{%
@@ -7351,11 +8037,11 @@ vardef Positions(expr Step)=
           Donc les droites $(#2)$ et $(#3)$ sont perpendiculaires.
         }{%
           Comme les droites $(#2)$ et $(#4)$ sont parallèles, alors la droite $(#3)$ qui est perpendiculaire à $(#4)$ est également perpendiculaire à la droite $(#2)$.
-        }
-      }
-    }
-  }
-}
+        }%
+      }%
+    }%
+  }%
+}%
 
 \newcommand\Brouillon[4][]{%
   \setlength{\abovedisplayskip}{0pt}
@@ -7417,10 +8103,10 @@ vardef Positions(expr Step)=
             \end{array}
           \right\}(#2)\perp(#3)
         \]
-      }
-    }
-  }
-}
+      }%
+    }%
+  }%
+}%
 
 \def\MPFigureDroite#1#2{%
   \ifluatex
@@ -7626,11 +8312,10 @@ vardef Positions(expr Step)=
   }%
 }%
 
-%%%%%%%%%%%%%%%%%%%%
-%%% Fonction Affine
-%%%%%%%%%%%%%%%%%%%%
-\setKVdefault[ClesAffine]{Nom=f,Variable=x,Ligne=false,Image=false,Antecedent=false,Graphique=false,Retrouve=false,ProgCalcul=false,Unitex=1,Unitey=1,VoirCoef=false,ACoef=0,Redaction=false,Ecriture=false,Definition=false}%ACoefficient=false
-                                %: inutile ?
+%%%
+% Fonction Affine
+%%%
+\setKVdefault[ClesAffine]{Nom=f,Variable=x,Ligne=false,Image=false,Antecedent=false,Graphique=false,Retrouve=false,ProgCalcul=false,Unitex=1,Unitey=1,VoirCoef=false,ACoef=0,Redaction=false,Ecriture=false,Definition=false}%ACoefficient=false%: inutile ?
 
 \newcommand\FonctionAffine[5][]{%
   % #1 nombre ou abscisse premier point
@@ -7641,7 +8326,7 @@ vardef Positions(expr Step)=
   \setKV[ClesAffine]{#1}%
   \ifboolKV[ClesAffine]{Image}{%
     \ifboolKV[ClesAffine]{Ligne}{%
-      \ensuremath{\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}=\num{\fpeval{#2*#3}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}\xintifboolexpr{#4=0}{}{=\num{\fpeval{#2*#3+#4}}}}%
+      \ensuremath{\useKV[ClesAffine]{Nom}(\num{#2})=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}=\num{\fpeval{#2*#3}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\xintifboolexpr{#4=0}{}{=\num{\fpeval{#2*#3+#4}}}}%
     }{%
       \ifboolKV[ClesAffine]{ProgCalcul}{%
         \begin{align*}
@@ -7650,8 +8335,8 @@ vardef Positions(expr Step)=
         \end{align*}    
       }{%
         \begin{align*}
-          \useKV[ClesAffine]{Nom}(\num{#2})&=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}\\
-          \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}%\\
+          \useKV[ClesAffine]{Nom}(\num{#2})&=\num{#3}\times\xintifboolexpr{#2<0}{(\num{#2})}{\num{#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}\\
+          \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}%\\
           \xintifboolexpr{#4=0}{}{\\
           \useKV[ClesAffine]{Nom}(\num{#2})&=\num{\fpeval{#3*#2+#4}}%\\
           }
@@ -7669,17 +8354,20 @@ vardef Positions(expr Step)=
           \useKV[ClesAffine]{Nom}&:\frac{\num{\fpeval{#2-#4}}}{\num{#3}}\stackrel{\div\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longleftarrow}\num{\fpeval{#2-#4}}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{-\num{#4}}{\longleftarrow}}{\stackrel{+\num{\fpeval{0-#4}}}{\longleftarrow}}\num{#2}}
         \end{align*}    
       }{%
-        On cherche l'antécédent de $\num{#2}$ par la fonction $\useKV[ClesAffine]{Nom}$, c'est-à-dire le nombre $\useKV[ClesAffine]{Variable}$ tel que $\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\num{#2}$. Or, la fonction $\useKV[ClesAffine]{Nom}$ est définie par :
-        \begin{align*}
-          \useKV[ClesAffine]{Nom}&:\useKV[ClesAffine]{Variable}\stackrel{\times\xintifboolexpr{#3<0}{(\num{#3})}{\num{#3}}}{\longrightarrow}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{\stackrel{+\num{#4}}{\longrightarrow}}{\stackrel{\num{#4}}{\longrightarrow}}\num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}}
-        \end{align*}
+        On cherche l'antécédent de $\num{#2}$ par la fonction
+        $\useKV[ClesAffine]{Nom}$, c'est-à-dire le nombre
+        $\useKV[ClesAffine]{Variable}$ tel que
+        $\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\num{#2}$. Or,
+        la fonction $\useKV[ClesAffine]{Nom}$ est définie par : \[%
+          \useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#3=0}{}{\num{#3}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#3=0}{\num{#4}}{\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}}
+        \]
         Par conséquent, on a :
         \begin{align*}
-            \num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{\num{#4}}}&=\num{#2}\\
-            \xintifboolexpr{#4=0}{\useKV[ClesAffine]{Variable}\uppercase{&}=\frac{\num{#2}}{\num{#3}}
-            }{\num{#3}\useKV[ClesAffine]{Variable}&=\num{\fpeval{#2-#4}}\\
-               \useKV[ClesAffine]{Variable}&=\frac{\num{\fpeval{#2-#4}}}{\num{#3}}
-            }
+            \num{#3}\useKV[ClesAffine]{Variable}\xintifboolexpr{#4=0}{}{\xintifboolexpr{#4>0}{+\num{#4}}{-\num{\fpeval{0-#4}}}}&=\num{#2}\\
+          \xintifboolexpr{#4=0}{\useKV[ClesAffine]{Variable}\uppercase{&}=\frac{\num{#2}}{\num{#3}}%\\
+          }{\num{#3}\useKV[ClesAffine]{Variable}&=\num{\fpeval{#2-#4}}\\
+          \useKV[ClesAffine]{Variable}&=\frac{\num{\fpeval{#2-#4}}}{\num{#3}}%\\
+          }
         \end{align*}
       }%
     }{%
@@ -7716,16 +8404,15 @@ vardef Positions(expr Step)=
   \ifboolKV[ClesAffine]{Redaction}{%
     \xintifboolexpr{#2=0}{Comme la fonction $\useKV[ClesAffine]{Nom}$
       est une fonction constante, alors sa représentation graphique est une droite parallèle à l'axe des abscisses passant par le point de coordonnées $(0;\num{#3})$.}%
-    {\xintifboolexpr{#3=0}{Comme              la              fonction
-        $\useKV[ClesAffine]{Nom}$ est une fonction linéaire, alors sa représentation graphique est une droite passant par l'origine du repère.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonctionA{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonctionA,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonnées $(\num{#4};\num{\fpeval{#2*#4+#3}})$.
+    {\xintifboolexpr{#3=0}{Comme la fonction $\useKV[ClesAffine]{Nom}$ est une fonction linéaire, alors sa représentation graphique est une droite passant par l'origine du repère.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonctionA{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonctionA,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonnées $(\num{#4};\num{\fpeval{#2*#4+#3}})$.
       }{%
-        Comme $\useKV[ClesAffine]{Nom}$ est une fonction affine, alors sa représentation graphique est une droite.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomFonction{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonction,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonnées $(\num{#4};\num{\fpeval{#2*#4+#3}})$.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#5}$. Son image est \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#5}{#2}{#3}{#4}. On place le point de coordonnées $(\num{#5};\num{\fpeval{#2*#5+#3}})$.%        
+        Comme $\useKV[ClesAffine]{Nom}$ est une fonction affine, alors sa représentation graphique est une droite.\\Je choisis $\useKV[ClesAffine]{Variable}=\num{#4}$. Son image est \xdef\NomVariable{\useKV[ClesAffine]{Variable}}\xdef\NomFonction{\useKV[ClesAffine]{Nom}}\FonctionAffine[Nom=\NomFonction,Image,Ligne]{#4}{#2}{#3}{#5}. On place le point de coordonnées $(\num{#4};\num{\fpeval{#2*#4+#3}})$.\\Je choisis \setKV[ClesAffine]{Variable=\NomVariable}$\useKV[ClesAffine]{Variable}=\num{#5}$. Son image est \FonctionAffine[Nom=\NomFonction,Image,Ligne]{#5}{#2}{#3}{#4}. On place le point de coordonnées $(\num{#5};\num{\fpeval{#2*#5+#3}})$.%        
       }%
     }%
   }%
   {}%
-  \ifboolKV[ClesAffine]{Ecriture}{\ensuremath{\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#2=0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}}}{}%
-  \ifboolKV[ClesAffine]{Definition}{\ensuremath{\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\xintifboolexpr{#2=0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{\num{#3}}}}}}{}%
+  \ifboolKV[ClesAffine]{Ecriture}{\ensuremath{\useKV[ClesAffine]{Nom}(\useKV[ClesAffine]{Variable})=\xintifboolexpr{#2=0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}%
+  \ifboolKV[ClesAffine]{Definition}{\ensuremath{\useKV[ClesAffine]{Nom}:\useKV[ClesAffine]{Variable}\mapsto\xintifboolexpr{#2=0}{}{\num{#2}\useKV[ClesAffine]{Variable}}\xintifboolexpr{#2=0}{\num{#3}}{\xintifboolexpr{#3=0}{}{\xintifboolexpr{#3>0}{+\num{#3}}{-\num{\fpeval{0-#3}}}}}}}{}%
 }%
 
 \def\MPFonctionAffine#1#2#3#4#5#6#7{%
@@ -7987,56 +8674,254 @@ vardef Positions(expr Step)=
 }
 
 
-%%%%%%%%%%%%%%%
+%%%
 % Fonction
-%%%%%%%%%%%%%%%
-\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false}
-
-\newcommand{\Fonction}[2][]{%
-  \useKVdefault[ClesFonction]
-  \setKV[ClesFonction]{#1}
-  \ignoreemptyitems%
-  \readlist*\ListeFonction{#2}
-  \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\i}[\temp]%
-  
-  \StrSubstitute{\useKV[ClesFonction]{Calcul}}{**}{^}[\tempa]%
-  \StrSubstitute{\tempa}{*}{}[\tempab]%
-  \ifboolKV[ClesFonction]{Ecriture}{%
-    \ensuremath{\useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})=\tempab}
-  }{}%
-  \ifboolKV[ClesFonction]{Definition}{%
-    \ensuremath{\useKV[ClesFonction]{Nom}:\useKV[ClesFonction]{Variable}\mapsto\tempab}
-  }{}%
-  \ifboolKV[ClesFonction]{Tableau}{%
-    \buildtabfonction%
-    }{}
-}
+%%%
+\setKVdefault[ClesFonction]{Nom=f,Variable=x,Calcul=x,Tableau=false,Largeur=5mm,Ecriture=false,Definition=false,Points=false,Tangentes=false,PasX=1,PasY=1,UniteX=1,UniteY=1,Prolonge=false}
 
-\def\buildtabfonction{%\\
-  \[%
-    \begin{array}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeFonctionlen}{>{\centering\arraybackslash}p{\useKV[ClesFonction]{Largeur}}|}}%
-      \hline
-      \useKV[ClesFonction]{Variable}\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&\num{\ListeFonction[##1]}}\\
-      \hline
-      \useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&  \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\ListeFonction[##1]}[\tempab]\num{\fpeval{\tempab}}}
-      \\\hline
-    \end{array}
-  \]
-}
+\newtoks\toklistePtsFn%pour la discipline
 
-%%%%%%%
-%% Formules
-%%%%%%
-\setKVdefault[ClesFormule]{Perimetre=false,Aire=false,Volume=false,Surface=carré,Solide=pavé droit,Figure=false,Angle=0,Ancre={(0,0)},Largeur=5cm}
+\def\UpdatePtsFn#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{#1,(#2,#3),#4,}}%
+\def\UpdatePtsFN#1/#2/#3/#4\nil{\addtotok\toklistePtsFn{(#2,#3),}}%
 
-\def\MPFigureCarre{%
+\def\MPCourbePoints#1#2#3#4#5#6{%
+  % #1 la liste des points
+  % #2: pas en x
+  % #3: pas en y
+  % #4: unité en x
+  % #5: unité en y
+  % #6 : prolongement avant et après les premier et dernier points ?
   \ifluatex
-   \mplibforcehmode
+  \mplibforcehmode
   \begin{mplibcode}
-    drawoptions( dashed dashpattern(on1cm));
-    pair A,B,C,D;
-    A=u*(1,1);
-    B-A=u*(2,0);
+    x.u:=#2;
+    y.u:=#3;
+    X.u:=#4;
+    Y.u:=#5;
+    numeric dirav[],dirap[];
+    pair Fn[],Gn[];
+    n=0;
+    for p_=#1:
+    Gn[n]=p_;
+    Fn[n]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    n:=n+1;
+    endfor;
+    N:=(n-1);
+    MinX=999;
+    MaxX=-999;
+    MinY=999;
+    MaxY=-999;
+    for k=0 upto N:
+    if xpart(Gn[k])<MinX:
+    MinX:=xpart(Gn[k]);
+    fi;
+    if xpart(Gn[k])>MaxX:
+    MaxX:=xpart(Gn[k]);
+    fi;
+    if ypart(Gn[k])<MinY:
+    MinY:=ypart(Gn[k]);
+    fi;
+    if ypart(Gn[k])>MaxY:
+    MaxY:=ypart(Gn[k]);
+    fi;
+    endfor;
+    if #6=0:
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX-1 step x.u until MaxX+1:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    else:
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX step x.u until MaxX:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    fi;
+    if #6=0:
+    for k=0 upto N:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    else:
+    for k=1 upto N-1:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    fi;
+    if #6=0:
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
+    else:
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
+    fi;
+    label.llft(btex O etex,(0,0));
+    dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+    dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+    draw Fn[0]
+    for k=1 upto N:
+    ..Fn[k]
+    endfor;
+  \end{mplibcode}
+  \fi
+}
+
+\def\MPCourbe#1#2#3#4#5#6{%
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    x.u:=#2;
+    y.u:=#3;
+    X.u:=#4;
+    Y.u:=#5;
+    numeric dirav[],dirap[];
+    pair Fn[],Gn[];
+    n=0;
+    for p_=#1:
+    if (n mod 3)=0:
+    dirav[n div 3]=p_;
+    fi;
+    if (n mod 3)=1:
+    Gn[n div 3]=p_;
+    Fn[n div 3]=cm*(X.u*xpart(p_),Y.u*ypart(p_));
+    fi;
+    if (n mod 3)=2:
+    dirap[n div 3]=p_;
+    fi;
+    n:=n+1;
+    endfor;
+    N:=(n-1) div 3;
+    MinX=999;
+    MaxX=-999;
+    MinY=999;
+    MaxY=-999;
+    for k=0 upto N:
+    if xpart(Gn[k])<MinX:
+    MinX:=xpart(Gn[k]);
+    fi;
+    if xpart(Gn[k])>MaxX:
+    MaxX:=xpart(Gn[k]);
+    fi;
+    if ypart(Gn[k])<MinY:
+    MinY:=ypart(Gn[k]);
+    fi;
+    if ypart(Gn[k])>MaxY:
+    MaxY:=ypart(Gn[k]);
+    fi;
+    endfor;
+        if #6=0:
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX-1)*X.u,k*Y.u)--cm*((MaxX+1)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX-1 step x.u until MaxX+1:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    else:
+    for k=MinY-1 step y.u until MaxY+1:
+    draw cm*((MinX)*X.u,k*Y.u)--cm*((MaxX)*X.u,k*Y.u) withcolor 0.75white;
+    endfor;
+    for k=MinX step x.u until MaxX:
+    draw cm*(k*X.u,(MinY-1)*Y.u)--cm*(k*X.u,(MaxY+1)*Y.u) withcolor 0.75white;
+    endfor;
+    fi;
+    if #6=0:
+    for k=0 upto N:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    else:
+    for k=1 upto N-1:
+    fill cercles(Fn[k],0.5mm);
+    endfor;
+    fi;
+    if #6=0:
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX-1)*X.u*cm,0)--((MaxX+1)*X.u*cm,0);
+    else:
+    drawarrow (0,(MinY-1)*Y.u*cm)--(0,(MaxY+1)*Y.u*cm);
+    drawarrow ((MinX)*X.u*cm,0)--((MaxX)*X.u*cm,0);
+    fi;
+    label.llft(btex O etex,(0,0));
+    dotlabel.bot(btex 1 etex,cm*X.u*(1,0));
+    dotlabel.lft(btex 1 etex,cm*Y.u*(0,1));
+    draw Fn[0]{dir dirap[0]}
+    for k=1 upto (N-1):
+    ..{dir dirav[k]}Fn[k]{dir dirap[k]}
+    endfor
+    ..{dir dirav[N]}Fn[N];
+  \end{mplibcode}
+  \fi
+}
+
+\newcommand{\Fonction}[2][]{%
+  \useKVdefault[ClesFonction]
+  \setKV[ClesFonction]{#1}
+  \ifboolKV[ClesFonction]{Points}{%
+    \toklistePtsFn{}%
+    \setsepchar[*]{,*/}%\ignoreemptyitems%
+    \readlist*\ListePoints{#2}%
+    \ifboolKV[ClesFonction]{Tangentes}{%
+      \foreachitem\compteur\in\ListePoints{%
+        \expandafter\UpdatePtsFn\compteur\nil%
+      }%
+      \ifboolKV[ClesFonction]{Prolonge}{%
+        \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}%
+      }{%
+        \MPCourbe{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}%
+      }%
+    }{%
+      \foreachitem\compteur\in\ListePoints{%
+        \expandafter\UpdatePtsFN\compteur\nil%
+      }%
+      \ifboolKV[ClesFonction]{Prolonge}{%
+        \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{1}%
+      }{%
+        \MPCourbePoints{\the\toklistePtsFn}{\useKV[ClesFonction]{PasX}}{\useKV[ClesFonction]{PasY}}{\useKV[ClesFonction]{UniteX}}{\useKV[ClesFonction]{UniteY}}{0}%
+      }%
+    }%
+  }{%
+    \ignoreemptyitems%
+    \readlist*\ListeFonction{#2}
+    \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{\i}[\temp]%
+    \StrSubstitute{\useKV[ClesFonction]{Calcul}}{**}{^}[\tempa]%
+    \StrSubstitute{\tempa}{*}{}[\tempab]%
+    \ifboolKV[ClesFonction]{Ecriture}{%
+      \ensuremath{\useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})=\tempab}
+    }{}%
+    \ifboolKV[ClesFonction]{Definition}{%
+      \ensuremath{\useKV[ClesFonction]{Nom}:\useKV[ClesFonction]{Variable}\mapsto\tempab}
+    }{}%
+    \ifboolKV[ClesFonction]{Tableau}{%
+      \buildtabfonction%
+    }{}%
+  }%
+}%
+
+\def\buildtabfonction{%\\
+  \[%
+    \begin{array}{|>{\columncolor{gray!15}}c|*{\number\numexpr\ListeFonctionlen}{>{\centering\arraybackslash}p{\useKV[ClesFonction]{Largeur}}|}}%
+      \hline
+      \useKV[ClesFonction]{Variable}\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&\num{\ListeFonction[##1]}}\\
+      \hline
+      \useKV[ClesFonction]{Nom}(\useKV[ClesFonction]{Variable})\xintFor* ##1 in {\xintSeq {1}{\ListeFonctionlen}}\do{&  \StrSubstitute{\useKV[ClesFonction]{Calcul}}{\useKV[ClesFonction]{Variable}}{(\ListeFonction[##1])}[\tempab]\num{\fpeval{\tempab}}}
+      \\\hline
+    \end{array}
+  \]
+}
+
+%%%
+% Formules
+%%%
+\setKVdefault[ClesFormule]{Perimetre=false,Aire=false,Volume=false,Surface=carré,Solide=pavé,Angle=0,Ancre={(0,0)},Largeur=5cm,Couleur=white}
+
+\def\MPFigureCarre{%
+  \ifluatex
+   \mplibforcehmode
+  \begin{mplibcode}
+    drawoptions( dashed dashpattern(on1cm));
+    pair A,B,C,D;
+    A=u*(1,1);
+    B-A=u*(2,0);
     C=rotation(A,B,-90);
     D-C=A-B;
     draw polygone(A,B,C,D);
@@ -8496,7 +9381,6 @@ vardef Positions(expr Step)=
   \mplibforcehmode
   \begin{mplibcode}
     drawoptions( dashed dashpattern(on1cm));
-    %    Figure(-10u,-10u,10u,10u);
     u:=0.5cm;
     z0=(-0.5,0)*u;
     z1=(2.5,0.5)*u;
@@ -8788,7 +9672,6 @@ vardef Positions(expr Step)=
   \mplibforcehmode
   \begin{mplibcode}
     drawoptions( dashed dashpattern(on1cm));
-    % Figure(-5u,-5u,5u,5u);
     pair A,B,C,H,I,J;
     A=u*(0.5,1);
     B-A=u*(1.4,0);
@@ -8866,12 +9749,13 @@ vardef Positions(expr Step)=
 }
 
 \newcommand\Formule[1][]{%
-  \useKVdefault[ClesFormule]
-  \setKV[ClesFormule]{#1}
-  \setlength{\RoundedBoxWidth}{\useKV[ClesFormule]{Largeur}}
+  \useKVdefault[ClesFormule]%
+  \setKV[ClesFormule]{#1}%
+  \setlength{\RoundedBoxWidth}{\useKV[ClesFormule]{Largeur}}%
+  \xdef\ColorFill{\useKV[ClesFormule]{Couleur}}%
   \ifboolKV[ClesFormule]{Perimetre}{%
     \begin{tikzpicture}[remember picture, overlay]
-      \node[draw,dashed,rounded corners,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
+      \node[draw,fill=\ColorFill,dashed,rounded corners,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
           \IfStrEqCase{\useKV[ClesFormule]{Surface}}{%
             {carré}{\begin{center}
                 \MPFigureCarre\par
@@ -8883,7 +9767,7 @@ vardef Positions(expr Step)=
                 Périmètre d'un polygone : \par$\text{Somme des côtés}$
               \end{center}
             }%
-            {rectangle}{
+            {rectangle}{%
               \begin{center}
                 \MPFigureRectangle\par
                 Périmètre d'un rectangle : \par$2\times(L+\ell)$
@@ -8907,7 +9791,7 @@ vardef Positions(expr Step)=
                 Périmètre d'un cercle : \par$\pi\times\text{diamètre}$
               \end{center}
             }%
-            {parallélogramme}{
+            {parallélogramme}{%
               \begin{center}
                 \MPFigureParallelogramme\par
                 Périmètre d'un parallélogramme : \par Somme des côtés
@@ -8917,7 +9801,7 @@ vardef Positions(expr Step)=
     \end{tikzpicture}
   }{\ifboolKV[ClesFormule]{Aire}{%
       \begin{tikzpicture}[remember picture, overlay]
-        \node[draw,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
+        \node[draw,fill=\ColorFill,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
             \IfStrEqCase{\useKV[ClesFormule]{Surface}}{%
               {carré}{\begin{center}
                   \MPFigureCarre\par
@@ -8963,7 +9847,7 @@ vardef Positions(expr Step)=
     \end{tikzpicture}
     }{%Volume
       \begin{tikzpicture}[remember picture, overlay]
-        \node[draw,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
+        \node[draw,fill=\ColorFill,dashed,rounded corners=2,rotate={\useKV[ClesFormule]{Angle}}] (test) at \useKV[ClesFormule]{Ancre} {\begin{minipage}{\RoundedBoxWidth}%
             \IfStrEqCase{\useKV[ClesFormule]{Solide}}{%
               {boule}{\begin{center}
                 \MPFigureSphere\par
@@ -9012,10 +9896,10 @@ vardef Positions(expr Step)=
   }
 }
 
-%%%%%%%%%%
-%%% Proba
-%%%%%%%%%%
-\setKVdefault[ClesProba]{Echelle=false,Arbre=false,Branche=2,Angle=60,Rayon=0.25,LongueurEchelle=5,Affichage=0,Grille=0}
+%%%
+% Proba
+%%%
+\setKVdefault[ClesProba]{Echelle=false,Arbre=false,Branche=2,Angle=60,Rayon=0.25,LongueurEchelle=5,Affichage=0,Grille=1}
 
 \def\Updatetoksproba#1/#2\nil{\addtotok\toklistepointproba{"#1","\footnotesize #2",}}
 \def\Updatetoksprobaechelle#1/#2/#3\nil{\addtotok\toklistepointproba{#1,#2,"#3",}}
@@ -9091,7 +9975,7 @@ vardef Positions(expr Step)=
             dotlabel.top("",C[k]);
           fi;
           if (#3>2):
-            label.bot(TEX("$\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5));%Le \noexpand est nécessaire pour éviter un problème à la compilation, dû à l'expansion du \frac par gmp.
+            label.bot(TEX("$\frac{"&decimal(num)&"}{"&decimal(deno)&"}$"),C[k]-u*(0,0.5));
           fi;
           k:=k+1;
         fi;
@@ -9271,10 +10155,10 @@ vardef Positions(expr Step)=
   }
 }
 
-%%%%%%%%%%%%%%
-%%%Reperage
-%%%%%%%%%%%%%%
-\setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AffichageNom=false,AffichageCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,EchelleEspace=50,CouleurCoord=black}
+%%%
+% Reperage
+%%%
+\setKVdefault[ClesReperage]{Unitex=1,Pasx=1,Unitey=1,Pasy=1,Unitez=1,Pasz=1,DemiDroite=false,Droite=false,Plan=false,Trace=false,ListeSegment={},Espace=false,Sphere=false,AffichageNom=false,AffichageGrad=false,AffichageAbs=0,AffichageCoord=false,LectureCoord=false,ValeurUnitex=1,ValeurUnitey=1,ValeurOrigine=0,NomOrigine=O,EchelleEspace=50,CouleurCoord=black}
 % ValeurOrigine permet de faire des morceaux de demi-droite graduée en passant par droite :)
 
 \def\Updatetoksdroite#1/#2\nil{\addtotok\toklistepointdroite{#1,"#2",}}
@@ -9565,46 +10449,44 @@ vardef Positions(expr Step)=
 }%
 
 % Pour construire le repère du plan
-\def\buildrepere{%
+\def\buildreperenew{%
   \toklistepointrepere{}%
   \foreachitem\compteur\in\ListePointRepere{\expandafter\Updatetoksrepere\compteur\nil}%
   \ifboolKV[ClesReperage]{Trace}{%
     \[\MPPlanTrace{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{2}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}{\useKV[ClesReperage]{ListeSegment}}\]%
   }{%
-    \ifboolKV[ClesReperage]{AffichageNom}{%
-      \ifboolKV[ClesReperage]{AffichageCoord}{%
-        \[\MPPlan{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{3}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}\]%
-      }{%
-        \[\MPPlan{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{2}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}\]%
-      }
-    }{%
-      \ifboolKV[ClesReperage]{AffichageCoord}{%
-        \[\MPPlan{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{1}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}\]%
-      }{%
-        \[\MPPlan{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\useKV[ClesReperage]{Unitey}}{\useKV[ClesReperage]{Pasy}}{\the\toklistepointrepere}{0}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurUnitey}}\]%
-      }
-    }%
+    \xdef\AfficheNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\ifboolKV[ClesReperage]{LectureCoord}{\xdef\AfficheNom{3}}{\xdef\AfficheNom{2}}}{\ifboolKV[ClesReperage]{LectureCoord}{\xdef\AfficheNom{1}}{}}%
+    \xdef\AfficheGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AfficheGrad{1}}{}%
+    \xdef\AfficheCoord{\useKV[ClesReperage]{AffichageAbs}}%
+    \MPPlannew{(\useKV[ClesReperage]{Unitex},\useKV[ClesReperage]{Pasx})}{(\useKV[ClesReperage]{Unitey},\useKV[ClesReperage]{Pasy})}{\the\toklistepointrepere}{\AfficheNom}{\AfficheCoord}{\AfficheGrad}{(\useKV[ClesReperage]{ValeurUnitex},\useKV[ClesReperage]{ValeurUnitey})}%
   }%
 }
 
-\def\MPPlan#1#2#3#4#5#6#7#8{%
+\def\MPPlannew#1#2#3#4#5#6#7{%
+  %#1 : Unitex, pasx
+  %#2 : unitey, pasy
+  %#3 : liste de points
+  %#4 : Affichage nom + lecture graphique
+  %#5 : Affichage des (abscisses/ordonnées)
+  %#6 : Graduation complète ?
+  %#7 : (unitex,unitey)
   \ifluatex
   \begin{mplibcode}
     maxx:=-4000;
-  minx=4000;
-  unitex:=#1*cm;
-  pasx=#2;
-  unitpx:=unitex/pasx;
-  maxy:=-4000;
-  miny:=4000;
-  unitey:=#3*cm;
-  pasy:=#4;
-  unitpy:=unitey/pasy;
-  n:=1;
-  vardef toto(text t)=
+    minx=4000;
+    unitex:=(xpart(#1))*cm;
+    pasx=ypart(#1);
+    unitpx:=unitex/pasx;
+    maxy:=-4000;
+    miny:=4000;
+    unitey:=(xpart(#2))*cm;
+    pasy:=ypart(#2);
+    unitpy:=unitey/pasy;
+    n:=1;
+    vardef toto(text t)=
     for p_=t:
     if (n mod 3)=1:
-      if p_>maxx:
+    if p_>maxx:
         maxx:=p_;
       fi;
       if p_<minx:
@@ -9623,22 +10505,22 @@ vardef Positions(expr Step)=
     endfor;
     maxx:=maxx+1;
     minx:=minx-1;
-    if maxx<(#2+1):
-    maxx:=#2+1;
+    if maxx<(ypart(#1)+1):
+    maxx:=ypart(#1)+1;
     fi;
-    if minx>(-#2-1):
-    minx:=-#2-1;
+    if minx>(-ypart(#1)-1):
+    minx:=-ypart(#1)-1;
     fi;
     maxy:=maxy+1;
     miny:=miny-1;
-    if maxy<(#4+1):
-    maxy:=#2+1;
+    if maxy<(ypart(#2)+1):
+    maxy:=ypart(#2)+1;
     fi;
-    if miny>(-#4-1):
-    miny:=-#4-1;
+    if miny>(-ypart(#2)-1):
+    miny:=-ypart(#2)-1;
     fi;
     enddef;
-    toto(#5);
+    toto(#3);
     Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
     pair A,B,C,D,E;
     A=(0,0);
@@ -9654,14 +10536,32 @@ vardef Positions(expr Step)=
     endfor;
     drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
     drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
-    dotlabel.bot(TEX("\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
-    dotlabel.lft(TEX("\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
-    label.llft(btex 0 etex,A);
+    % graduation complète ou pas ?
+    label.llft(btex \footnotesize 0 etex,A);
+    if #6>0:
+    for k=minx upto maxx:
+    if (xpart((k*unitex,0))>xpart(B+(-0.75*unitpx,0))) and (xpart((k*unitex,0))<xpart(C+(0.75*unitpx,0))):
+    if k<>0:
+    dotlabel.lrt(TEX("\footnotesize\num{"&decimal(k)&"}"),(k*unitex,0));
+    fi;
+    fi;
+    endfor;
+    for k=miny upto maxy:
+    if (ypart((0,k*unitey))>ypart(D+(0,-0.75*unitpy))) and (ypart((0,k*unitey))<ypart(E+(0,0.75*unitpy))):
+    if k<>0:
+    dotlabel.ulft(TEX("\footnotesize\num{"&decimal(k)&"}"),(0,k*unitey));
+    fi;
+    fi;
+    endfor;
+    else:
+    dotlabel.lrt(TEX("\footnotesize\num{"&decimal(xpart(#7))&"}"),(unitex,0));
+    dotlabel.ulft(TEX("\footnotesize\num{"&decimal(ypart(#7))&"}"),(0,unitey));
+    fi;
     % apparition du nom des points ou pas
     m_c:=m_c*3;
     marque_p:="croix";
     vardef tata(text t)=%on place les points
-    if #6>0:
+    if #4>0:
     n:=1;
     k:=0;%pour retenir la coordonnée en x
     l:=0;%pour retenir la coordonnée en y
@@ -9677,15 +10577,14 @@ vardef Positions(expr Step)=
     fi;
     fi;
     if (n mod 3)=0:
-    if #6>1:
-    message("p = "&p_);
-  %  if p_<>"":
+    if #4>1:
+    if p_<>"":
     if (k>0) and (l>0):
     label.urt(TEX(p_),(k*unitpx,l*unitpy));
     fi;
-   if (k=0) and (l>0):
-   label.urt(TEX(p_),(k*unitpx,l*unitpy));
-   fi;
+    if (k=0) and (l>0):
+    label.urt(TEX(p_),(k*unitpx,l*unitpy));
+    fi;
     if (k>0) and (l=0):
     label.urt(TEX(p_),(k*unitpx,l*unitpy));
     fi;
@@ -9705,35 +10604,92 @@ vardef Positions(expr Step)=
     label.lrt(TEX(p_),(k*unitpx,l*unitpy));
     fi;
     pointe((k*unitpx,l*unitpy));
- %   fi;
     fi;
-    if (#6=1) or (#6=3):
+    fi;
+    if (#4=1) or (#4=3):
     draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
     fi;
     fi;
     n:=n+1;
     endfor;
     fi;
+    if #5=2:
+    n:=1;
+    k:=0;%pour retenir la coordonnée en x
+    l:=0;%pour retenir la coordonnée en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if p_<>"":
+        if (k mod pasx)<>0:
+        label.lrt(TEX("\footnotesize$\frac{\num{"&decimal(k)&"}}{\num{"&decimal(pasx)&"}}$"),(k*unitpx,0));
+        else:
+        label.lrt(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+        fi;
+        if (l mod pasy)<>0:
+        label.ulft(TEX("\footnotesize$\frac{\num{"&decimal(l)&"}}{\num{"&decimal(pasy)&"}}$"),(0,l*unitpy));
+        else:
+        label.ulft(TEX("\footnotesize\num{\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+        fi;
+      pointe((k*unitpx,0),(0,l*unitpy));
+      fi;
+    fi;
+    n:=n+1;
+    endfor;
+    elseif #5=1:
+    n:=1;
+    k:=0;%pour retenir la coordonnée en x
+    l:=0;%pour retenir la coordonnée en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if p_<>"":
+    label.lrt(TEX("\footnotesize\num{\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+    label.ulft(TEX("\footnotesize\num{\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+    pointe((k*unitpx,0),(0,l*unitpy));
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
     enddef;
-    tata(#5);
+    tata(#3);
   \end{mplibcode}
   \else
-  \begin{mpost}[mpsettings={input PfC-Geometrie;}]
-  maxx:=-4000;
-  minx=4000;
-  unitex:=#1*cm;
-  pasx=#2;
-  unitpx:=unitex/pasx;
-  maxy:=-4000;
-  miny:=4000;
-  unitey:=#3*cm;
-  pasy:=#4;
-  unitpy:=unitey/pasy;
-  n:=1;
-  vardef toto(text t)=
+  \begin{mpost}
+    maxx:=-4000;
+    minx=4000;
+    unitex:=(xpart(#1))*cm;
+    pasx=ypart(#1);
+    unitpx:=unitex/pasx;
+    maxy:=-4000;
+    miny:=4000;
+    unitey:=(xpart(#2))*cm;
+    pasy:=ypart(#2);
+    unitpy:=unitey/pasy;
+    n:=1;
+    vardef toto(text t)=
     for p_=t:
     if (n mod 3)=1:
-      if p_>maxx:
+    if p_>maxx:
         maxx:=p_;
       fi;
       if p_<minx:
@@ -9752,22 +10708,22 @@ vardef Positions(expr Step)=
     endfor;
     maxx:=maxx+1;
     minx:=minx-1;
-    if maxx<(#2+1):
-    maxx:=#2+1;
+    if maxx<(ypart(#1)+1):
+    maxx:=ypart(#1)+1;
     fi;
-    if minx>(-#2-1):
-    minx:=-#2-1;
+    if minx>(-ypart(#1)-1):
+    minx:=-ypart(#1)-1;
     fi;
     maxy:=maxy+1;
     miny:=miny-1;
-    if maxy<(#4+1):
-    maxy:=#2+1;
+    if maxy<(ypart(#2)+1):
+    maxy:=ypart(#2)+1;
     fi;
-    if miny>(-#4-1):
-    miny:=-#4-1;
+    if miny>(-ypart(#2)-1):
+    miny:=-ypart(#2)-1;
     fi;
     enddef;
-    toto(#5);
+    toto(#3);
     Figure((minx-1)*unitpx,(miny-1)*unitpy,(maxx+1)*unitpx,(maxy+1)*unitpy);
     pair A,B,C,D,E;
     A=(0,0);
@@ -9783,14 +10739,32 @@ vardef Positions(expr Step)=
     endfor;
     drawarrow (B+(-0.75*unitpx,0))--(C+(0.75*unitpx,0));
     drawarrow (D+(0,-0.75*unitpy))--(E+(0,0.75*unitpy));
-    dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#7)&"}"),(unitex,0));
-    dotlabel.lft(LATEX("\noexpand\footnotesize\num{"&decimal(#8)&"}"),(0,unitey));
-    label.llft(btex 0 etex,A);
+    % graduation complète ou pas ?
+    label.llft(btex \noexpand\footnotesize 0 etex,A);
+    if #6>0:
+    for k=minx upto maxx:
+    if (xpart((k*unitex,0))>xpart(B+(-0.75*unitpx,0))) and (xpart((k*unitex,0))<xpart(C+(0.75*unitpx,0))):
+    if k<>0:
+    dotlabel.lrt(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(k)&"}"),(k*unitex,0));
+    fi;
+    fi;
+    endfor;
+    for k=miny upto maxy:
+    if (ypart((0,k*unitey))>ypart(D+(0,-0.75*unitpy))) and (ypart((0,k*unitey))<ypart(E+(0,0.75*unitpy))):
+    if k<>0:
+    dotlabel.ulft(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(k)&"}"),(0,k*unitey));
+    fi;
+    fi;
+    endfor;
+    else:
+    dotlabel.lrt(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(xpart(#7))&"}"),(unitex,0));
+    dotlabel.ulft(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(ypart(#7))&"}"),(0,unitey));
+    fi;
     % apparition du nom des points ou pas
     m_c:=m_c*3;
     marque_p:="croix";
     vardef tata(text t)=%on place les points
-    if #6>0:
+    if #4>0:
     n:=1;
     k:=0;%pour retenir la coordonnée en x
     l:=0;%pour retenir la coordonnée en y
@@ -9806,7 +10780,8 @@ vardef Positions(expr Step)=
     fi;
     fi;
     if (n mod 3)=0:
-    if #6>1:
+    if #4>1:
+    if p_<>"":
     if (k>0) and (l>0):
     label.urt(LATEX(p_),(k*unitpx,l*unitpy));
     fi;
@@ -9833,15 +10808,73 @@ vardef Positions(expr Step)=
     fi;
     pointe((k*unitpx,l*unitpy));
     fi;
-    if (#6=1) or (#6=3):
+    fi;
+    if (#4=1) or (#4=3):
     draw (0,l*unitpy)--(k*unitpx,l*unitpy)--(k*unitpx,0) dashed evenly;
     fi;
     fi;
     n:=n+1;
     endfor;
     fi;
-    enddef;
-    tata(#5);
+    if #5=2:
+    n:=1;
+    k:=0;%pour retenir la coordonnée en x
+    l:=0;%pour retenir la coordonnée en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if p_<>"":
+        if (k mod pasx)<>0:
+        label.lrt(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{"&decimal(k)&"}}{\noexpand\num{"&decimal(pasx)&"}}$"),(k*unitpx,0));
+        else:
+        label.lrt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+        fi;
+        if (l mod pasy)<>0:
+        label.ulft(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{"&decimal(l)&"}}{\noexpand\num{"&decimal(pasy)&"}}$"),(0,l*unitpy));
+        else:
+        label.ulft(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+        fi;
+      pointe((k*unitpx,0),(0,l*unitpy));
+      fi;
+    fi;
+    n:=n+1;
+    endfor;
+    elseif #5=1:
+    n:=1;
+    k:=0;%pour retenir la coordonnée en x
+    l:=0;%pour retenir la coordonnée en y
+    for p_=t:
+        if (n mod 3)=1:
+    if numeric p_:
+    k:=p_;
+    fi;
+    fi;
+    if (n mod 3)=2:
+    if numeric p_:
+    l:=p_;
+    fi;
+    fi;
+    if (n mod 3)=0:
+    if p_<>"":
+    label.lrt(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(k)&"/"&decimal(pasx)&"}}"),(k*unitpx,0));
+    label.ulft(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(l)&"/"&decimal(pasy)&"}}"),(0,l*unitpy));
+    pointe((k*unitpx,0),(0,l*unitpy));
+    fi;
+    fi;
+    n:=n+1;
+    endfor;
+    fi;
+    enddef;
+    tata(#3);
   \end{mpost}
   \fi
 }
@@ -10146,231 +11179,68 @@ vardef Positions(expr Step)=
   \fi
 }
 
-% Pour construire la demi-droite graduée
-\def\builddemidroite{%
-  \toklistepointdroite{}%
-  \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdroite\compteur\nil}%
-  \ifboolKV[ClesReperage]{DemiDroite}{%
-    \ifboolKV[ClesReperage]{AffichageNom}{%
-      \[\MPDemiGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{1}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}\]%
-    }{%
-      \[\MPDemiGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{0}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}\]%
-    }
-  }{%
-    \ifboolKV[ClesReperage]{AffichageNom}{%
-      \[\MPDroiteGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{1}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}\]%
-    }{%
-      \[\MPDroiteGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{0}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}\]%
-    }%
-  }%
-}%
-
-\def\MPDemiGraduee#1#2#3#4#5#6{%
-    % #1 : unite
+\def\MPDEMIGraduee#1#2#3#4#5#6#7#8{%
+  % #1 : unite
   % #2 : pas
   % #3 : liste des points à placer en pas. pour gérer le cas des repérages fractionnaires
   % #4 : on affiche le nom des points ou pas
   % #5 : quelle est la valeur de la longueur unité ?
   % #6 : la valeur de l'unité (ne sert à rien ici, mais en prévision
   % de Droite)
+  % #7 : on affiche les abscisses ou pas : 0 non, 1 oui, 2 fraction
+  % #8 : on affiche tous les multiples de la graduation "principale"
   \ifluatex
+  \mplibforcehmode
   \begin{mplibcode}
     maxx:=0;
-  unitex:=#1*cm;
-  pasx:=#2;
-  unitp:=unitex/pasx;%unité de déplacement
-  vardef toto(text t)=%On détermine le nombre "d'unités" à placer
-  for p_=t:
-  if numeric p_:
-  if p_>maxx:
-  maxx:=p_;
-  fi;
-  fi;
-  endfor;
-  maxx:=maxx+1;
-  if maxx<(#2+1):
-  maxx:=#2+1;
-  fi;
-  enddef;
-  toto(#3);
-  Figure(-u,-u,(maxx+0.75)*unitp,u);
-  pair A,B;
-  A=(0,0);
-  B=unitp*(maxx,0);
-  drawarrow A--(B+(0.75*unitp,0));
-  %marquage secondaire
-  marque_s:=marque_s/3;
-  for k=0 step 2 until (maxx):
-  draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
-  endfor;
-  drawoptions();
-  % marquage primaire
-  marque_s:=marque_s*3;
-  for k=0 step pasx until (maxx-1):
-  draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
-  endfor;
-  % marquage des points
-  m_c:=m_c*3;
-  marque_p:="croix";
-  labeloffset:=labeloffset*2;
-  dotlabel.bot(TEX("\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0));
-  label.bot(TEX("\footnotesize\num{"&decimal(#6)&"}"),A);
-  vardef tata(text t)=%on place les points
-  if #4>0:
-  for p_=t:
-  if numeric p_:
-  label("",unitp*(p_,0));
-  k:=p_;
-  fi;
-  if string p_:
-  if p_<>"":
-  label.top(TEX(p_),unitp*(k,0));
-  pointe(unitp*(k,0));
-  fi;
-  fi;
-  endfor;
-  fi;
-  enddef;
-  tata(#3);
-  \end{mplibcode}
-  \else
-  \begin{mpost}[mpsettings={input PfC-Geometrie;}]
-  maxx:=0;
-  unitex:=#1*cm;
-  pasx:=#2;
-  unitp:=unitex/pasx;%unité de déplacement
-  vardef toto(text t)=%On détermine le nombre "d'unités" à placer
-  for p_=t:
-  if numeric p_:
-  if p_>maxx:
-  maxx:=p_;
-  fi;
-  fi;
-  endfor;
-  maxx:=maxx+1;
-  if maxx<(#2+1):
-  maxx:=#2+1;
-  fi;
-  enddef;
-  toto(#3);
-  Figure(-u,-u,(maxx+0.75)*unitp,u);
-  pair A,B;
-  A=(0,0);
-  B=unitp*(maxx,0);
-  drawarrow A--(B+(0.75*unitp,0));
-  %marquage secondaire
-  marque_s:=marque_s/3;
-  for k=0 step 2 until (maxx):
-  draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
-  endfor;
-  drawoptions();
-  % marquage primaire
-  marque_s:=marque_s*3;
-  for k=0 step pasx until (maxx-1):
-  draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
-  endfor;
-  % marquage des points
-  m_c:=m_c*3;
-  marque_p:="croix";
-  labeloffset:=labeloffset*2;
-  dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0));
-  label.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#6)&"}"),A);
-  vardef tata(text t)=%on place les points
-  if #4>0:
-  for p_=t:
-  if numeric p_:
-  label("",unitp*(p_,0));
-  k:=p_;
-  fi;
-  if string p_:
-  label.top(LATEX(p_),unitp*(k,0));
-  if p_<>"":
-  pointe(unitp*(k,0));
-  fi;
-  fi;
-  endfor;
-  fi;
-  enddef;
-  tata(#3);
-\end{mpost}
-\fi
-}
-
-\def\MPDroiteGraduee#1#2#3#4#5#6{%
-      % #1 : unite
-    % #2 : pas
-    % #3 : liste des points à placer en pas. pour gérer le cas des repérages fractionnaires
-    % #4 : on affiche le nom des points ou pas
-    % #5 : quelle est la valeur de la longueur unité ?
-  \ifluatex
-  \begin{mplibcode}
-    maxx:=0;
-    minx:=4000;
     unitex:=#1*cm;
     pasx:=#2;
     unitp:=unitex/pasx;%unité de déplacement
     vardef toto(text t)=%On détermine le nombre "d'unités" à placer
-      for p_=t:
-        if numeric p_:
-          if p_>maxx:
-            maxx:=p_;
-          fi;
-          if p_<minx:
-            minx:=p_;
-          fi;
-        fi;
-      endfor;
-      maxx:=maxx+1;
-      minx:=minx-1;
-      if maxx<(#2+1):
-      maxx:=#2+1;
-      fi;
-      if minx>(-#2-1):
-      minx:=-#2-1;
-      fi;
+    for p_=t:
+    if numeric p_:
+    if p_>maxx:
+    maxx:=p_;
+    fi;
+    fi;
+    endfor;
+    maxx:=maxx+1;
+    if maxx<(#2+1):
+    maxx:=#2+1;
+    fi;
     enddef;
     toto(#3);
-    Figure((minx-1)*u,-u,(maxx+1)*unitp,u);
-    pair A,B,C;
+    Figure(-u,-u,(maxx+0.75)*unitp,u);
+    pair A,B;
     A=(0,0);
     B=unitp*(maxx,0);
-    C=unitp*(minx,0);
-    drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+    drawarrow A--(B+(0.75*unitp,0));
+    % marquage secondaire
     marque_s:=marque_s/3;
-    labeloffset:=labeloffset*2;
-    if ((maxx-minx) mod 2)=0:
-%    show maxx; show minx;
-      for k=(minx+1) step 2 until (maxx-1):
-      draw marquedemidroite(C,B);
-      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
-      endfor;
-      else:
- %         show maxx; show minx;
-      for k=(minx) step 2 until (maxx-1):
-        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
-     endfor;
-     fi;
-       % marquage primaire%%%%%%%%%%%%%%%%%%%%%%%%
-     marque_s:=marque_s*3;
-     for k=0 step pasx until (maxx-pasx):
-     draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
-     endfor;
-     for k=0 step -pasx until (minx+pasx):
-     draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
-     endfor;
+    for k=0 step 2 until (maxx):
+    draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+    endfor;
+    drawoptions();
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-1):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
     m_c:=m_c*3;
     marque_p:="croix";
+    labeloffset:=labeloffset*2;
     dotlabel.bot(TEX("\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0));
     label.bot(TEX("\footnotesize\num{"&decimal(#6)&"}"),A);
-    if #5=1:
-    label.top(TEX("I"),unitex*(1,0));
+    if #8>0:
+    for k=2 upto maxx:
+    dotlabel.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}"),unitex*(k,0));
+    endfor;
     fi;
-    label.top(TEX("O"),A);
     vardef tata(text t)=%on place les points
     if #4>0:
     for p_=t:
     if numeric p_:
-    label("",unitp*(p_,0));
     k:=p_;
     fi;
     if string p_:
@@ -10381,83 +11251,123 @@ vardef Positions(expr Step)=
     fi;
     endfor;
     fi;
+    if #7=2:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
+    if ((#5*k) mod pasx)<>0:
+    label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(k,0));
+    else:
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0));
+    fi;
+    pointe(unitp*(k,0));
+    fi;
+    fi;
+    endfor;
+    elseif #7=1:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0));
+    pointe(unitp*(k,0));
+    fi;
+    fi;
+    endfor;
+    fi;
     enddef;
     tata(#3);
   \end{mplibcode}
   \else
-  \begin{mpost}[mpsettings={input PfC-Geometrie;}]
+  \begin{mpost}
     maxx:=0;
-    minx:=4000;
     unitex:=#1*cm;
     pasx:=#2;
     unitp:=unitex/pasx;%unité de déplacement
     vardef toto(text t)=%On détermine le nombre "d'unités" à placer
-      for p_=t:
-        if numeric p_:
-          if p_>maxx:
-            maxx:=p_;
-          fi;
-          if p_<minx:
-            minx:=p_;
-          fi;
-        fi;
-      endfor;
-      maxx:=maxx+1;
-      minx:=minx-1;
-      if maxx<(#2+1):
-      maxx:=#2+1;
-      fi;
-      if minx>(-#2-1):
-      minx:=-#2-1;
-      fi;
+    for p_=t:
+    if numeric p_:
+    if p_>maxx:
+    maxx:=p_;
+    fi;
+    fi;
+    endfor;
+    maxx:=maxx+1;
+    if maxx<(#2+1):
+    maxx:=#2+1;
+    fi;
     enddef;
     toto(#3);
-    Figure((minx-1)*u,-u,(maxx+1)*unitp,u);
-    pair A,B,C;
+    Figure(-u,-u,(maxx+0.75)*unitp,u);
+    pair A,B;
     A=(0,0);
     B=unitp*(maxx,0);
-    C=unitp*(minx,0);
-    drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+    drawarrow A--(B+(0.75*unitp,0));
+    % marquage secondaire
     marque_s:=marque_s/3;
-    labeloffset:=labeloffset*2;
-    if ((maxx-minx) mod 2)=0:
-%    show maxx; show minx;
-      for k=(minx+1) step 2 until (maxx-1):
-      draw marquedemidroite(C,B);
-      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
-      endfor;
-      else:
- %         show maxx; show minx;
-      for k=(minx) step 2 until (maxx-1):
-        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
-     endfor;
-     fi;
-       % marquage primaire%%%%%%%%%%%%%%%%%%%%%%%%
-     marque_s:=marque_s*3;
-     for k=0 step pasx until (maxx-pasx):
-     draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
-     endfor;
-     for k=0 step -pasx until (minx+pasx):
-     draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
-     endfor;
+    for k=0 step 2 until (maxx):
+    draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+    endfor;
+    drawoptions();
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-1):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
     m_c:=m_c*3;
     marque_p:="croix";
+    labeloffset:=labeloffset*2;
     dotlabel.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0));
     label.bot(LATEX("\noexpand\footnotesize\num{"&decimal(#6)&"}"),A);
-    if #5=1:
-    label.top(LATEX("I"),unitex*(1,0));
+    if #8>0:
+    for k=2 upto maxx:
+    dotlabel.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}"),unitex*(k,0));
+    endfor;
     fi;
-    label.top(LATEX("O"),A);
     vardef tata(text t)=%on place les points
     if #4>0:
     for p_=t:
     if numeric p_:
-    label("",unitp*(p_,0));
     k:=p_;
     fi;
     if string p_:
+    if p_<>"":
     label.top(LATEX(p_),unitp*(k,0));
+    pointe(unitp*(k,0));
+    fi;
+    fi;
+    endfor;
+    fi;
+    if #7=2:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
+    if ((#5*k) mod pasx)<>0:
+    label.bot(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\noexpand\num{"&decimal(pasx)&"}}$"),unitp*(k,0));
+    else:
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0));
+    fi;
+    pointe(unitp*(k,0));
+    fi;
+    fi;
+    endfor;
+    elseif #7=1:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
     if p_<>"":
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0));
     pointe(unitp*(k,0));
     fi;
     fi;
@@ -10468,64 +11378,417 @@ vardef Positions(expr Step)=
   \end{mpost}
   \fi
 }
-  
-\newcommand\Reperage[2][]{%
-  \useKVdefault[ClesReperage]%
-  \setKV[ClesReperage]{#1}%
-  \ifboolKV[ClesReperage]{Espace}{%
-    \setKV[ClesReperage]{Unitex=2,Unitey=2.5,Unitez=1.5}%
-    \setKV[ClesReperage]{#1}%
-    \setsepchar[*]{,*/}\ignoreemptyitems%
-    \readlist*\ListePointEspace{#2}%
-    \buildespace%
-  }{\ifboolKV[ClesReperage]{Plan}{%
-      \setsepchar[*]{,*/}\ignoreemptyitems%
-      \readlist*\ListePointRepere{#2}%
-      \buildrepere%
-    }{\ifboolKV[ClesReperage]{Droite}{%
-        \setsepchar[*]{,*/}\ignoreemptyitems%
-        \readlist*\ListePointDroite{#2}%
-        \builddemidroite%
-      }{%
-        \setsepchar[*]{,*/}\ignoreemptyitems%
-        \readlist*\ListePointDroite{#2}%
-        \builddemidroite%
-      }%
-    }%
+
+% Pour construire les droite/demi-droite graduée
+\def\builddemidroitenew{%
+  \toklistepointdroite{}%
+  \foreachitem\compteur\in\ListePointDroite{\expandafter\Updatetoksdroite\compteur\nil}%
+  \xdef\AffichageNom{0}\ifboolKV[ClesReperage]{AffichageNom}{\xdef\AffichageNom{1}}{}
+  \xdef\AffichageCoord{\useKV[ClesReperage]{AffichageAbs}}
+  \xdef\AffichageGrad{0}\ifboolKV[ClesReperage]{AffichageGrad}{\xdef\AffichageGrad{1}}{}
+  \ifboolKV[ClesReperage]{DemiDroite}{%
+    \[\MPDEMIGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{\AffichageNom}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}{\AffichageCoord}{\AffichageGrad}\]%
+  }{%
+    \[\MPDROITEGraduee{\useKV[ClesReperage]{Unitex}}{\useKV[ClesReperage]{Pasx}}{\the\toklistepointdroite}{\AffichageNom}{\useKV[ClesReperage]{ValeurUnitex}}{\useKV[ClesReperage]{ValeurOrigine}}{\AffichageCoord}{\AffichageGrad}\]%
   }%
 }%
 
 
-%%%%%%%%
-%% Puissances
-%%%%%%
-\newcommand\Puissances[2]{%
-  \ensuremath{
-    \xintifboolexpr{#2=0}{1}{\xintifboolexpr{#2>0}{\xdef\total{\fpeval{#2-1}}#1\multido{\i=1+1}{\total}{\times#1}}{\xdef\total{\fpeval{-#2-1}}\frac{1}{#1\multido{\i=1+1}{\total}{\times#1}}}}%
-  }
-}
-
-%%%%%%%%%
-% Ecritures d'unités
-%%%%%%%%%%
-\setKVdefault[Unites]{m=false,km=false,hm=false,dam=false,dm=false,cm=true,mm=false,g=true,kg=false,hg=false,dag=false,dg=false,cg=false,mg=false,kmh=true,ms=false,kgm=false,gcm=true,L=true,kL=false,hL=false,daL=false,dL=false,cL=false,mL=false,l=true,kl=false,hl=false,dal=false,dl=false,cl=false,ml=false}
-
-\newcommand\Lg[2][]{%
-  \useKVdefault[Unites]%
-  \setKV[Unites]{#1}%
-  \ifboolKV[Unites]{km}{%
-    \SI{#2}{\km}%
-  }{\ifboolKV[Unites]{hm}{%
-      \SI{#2}{\hecto\metre}%
-    }{\ifboolKV[Unites]{dam}{%
-        \SI{#2}{\deca\metre}%
-      }{\ifboolKV[Unites]{dm}{%
-          \SI{#2}{\dm}%
-        }{\ifboolKV[Unites]{m}{%
-            \SI{#2}{\m}%
-          }{\ifboolKV[Unites]{mm}{%
-              \SI{#2}{\mm}%
-            }{\SI{#2}{\cm}%
+\def\MPDROITEGraduee#1#2#3#4#5#6#7#8{%
+  % #1 : unite
+  % #2 : pas
+  % #3 : liste des points à placer en pas. pour gérer le cas des repérages fractionnaires
+  % #4 : on affiche le nom des points ou pas
+  % #5 : quelle est la valeur de la longueur unité ?
+  % #6 : la valeur de l'unité
+  % #7 : on affiche les abscisses ou pas : 0 non, 1 oui, 2 fraction
+  % #8 : on affiche tous les multiples de la graduation "principale"
+  \ifluatex
+  \mplibforcehmode
+  \begin{mplibcode}
+    maxx:=0;
+    minx:=4000;
+    unitex:=#1*cm;
+    pasx:=#2;
+    unitp:=unitex/pasx;%unité de déplacement
+    vardef toto(text t)=%On détermine le nombre "d'unités" à placer
+    for p_=t:
+    if numeric p_:
+    if p_>maxx:
+    maxx:=p_;
+    fi;
+    if p_<minx:
+    minx:=p_;
+    fi;
+    fi;
+    endfor;
+    maxx:=maxx+(pasx div 2);
+    minx:=minx-(pasx div 2);
+    if maxx<(#2+1):
+    maxx:=#2+(pasx-1);
+    fi;
+    if minx>(-#2-1):
+    minx:=-#2-(pasx-1);
+    fi;
+    enddef;
+    toto(#3);
+    Figure((minx-1)*unitp,-u,(maxx+1)*unitp,u);
+    pair A,B,C;
+    A=(0,0);
+    B=unitp*(maxx,0);
+    C=unitp*(minx,0);
+    drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+    % marquage secondaire
+    marque_s:=marque_s/3;
+    labeloffset:=labeloffset*2;
+    if ((maxx-minx) mod 2)=0:
+      for k=(minx+1) step 2 until (maxx-1):
+      draw marquedemidroite(C,B);
+      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+      endfor;
+      else:
+      for k=(minx) step 2 until (maxx-1):
+        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+     endfor;
+     fi;
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-pasx):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    for k=0 step -pasx until (minx+pasx):
+    draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
+    m_c:=m_c*3;
+    marque_p:="croix";
+    labeloffset:=labeloffset*2;
+    label.bot(TEX("\footnotesize\num{"&decimal(#5)&"}"),unitex*(1,0));
+    label.bot(TEX("\footnotesize\num{"&decimal(#6)&"}"),A);
+    if #8>0:
+    for k=2 upto maxx:
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    endfor;
+    for k=minx upto -1:
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    endfor;
+    fi;
+    vardef tata(text t)=%on place les points
+    if #4>0:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
+    label.top(TEX(p_),unitp*(k,0));
+    pointe(unitp*(k,0));
+    fi;
+    fi;
+    endfor;
+    fi;
+    if #7=2:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
+    if ((#5*k) mod pasx)<>0:
+    label.bot(TEX("\footnotesize$\frac{\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\num{"&decimal(pasx)&"}}$"),unitp*(k,0));
+    else:
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0));
+    fi;
+    pointe(unitp*(k-#6,0));
+    fi;
+    fi;
+    endfor;
+    elseif #7=1:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
+    label.bot(TEX("\footnotesize\num{\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0));
+    pointe(unitp*(k,0));
+    fi;
+    fi;
+    endfor;
+    fi;
+    enddef;
+    tata(#3);
+  \end{mplibcode}
+  \else
+  \begin{mpost}
+    maxx:=0;
+    minx:=4000;
+    unitex:=#1*cm;
+    pasx:=#2;
+    unitp:=unitex/pasx;%unité de déplacement
+    vardef toto(text t)=%On détermine le nombre "d'unités" à placer
+    for p_=t:
+    if numeric p_:
+    if p_>maxx:
+    maxx:=p_;
+    fi;
+    if p_<minx:
+    minx:=p_;
+    fi;
+    fi;
+    endfor;
+    maxx:=maxx+(pasx div 2);
+    minx:=minx-(pasx div 2);
+    if maxx<(#2+1):
+    maxx:=#2+(pasx-1);
+    fi;
+    if minx>(-#2-1):
+    minx:=-#2-(pasx-1);
+    fi;
+    enddef;
+    toto(#3);
+    Figure((minx-1)*unitp,-u,(maxx+1)*unitp,u);
+    pair A,B,C;
+    A=(0,0);
+    B=unitp*(maxx,0);
+    C=unitp*(minx,0);
+    drawarrow (C+unitp*(-0.75,0))--(B+unitp*(0.75,0));
+    % marquage secondaire
+    marque_s:=marque_s/3;
+    labeloffset:=labeloffset*2;
+    if ((maxx-minx) mod 2)=0:
+      for k=(minx+1) step 2 until (maxx-1):
+      draw marquedemidroite(C,B);
+      draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+      endfor;
+      else:
+      for k=(minx) step 2 until (maxx-1):
+        draw marquesegment((k/maxx)[A,B],((k+1)/maxx)[A,B]);
+     endfor;
+     fi;
+    % marquage primaire
+    marque_s:=marque_s*3;
+    for k=0 step pasx until (maxx-pasx):
+    draw marquesegment((k/maxx)[A,B],((k+pasx)/maxx)[A,B]);
+    endfor;
+    for k=0 step -pasx until (minx+pasx):
+    draw marquesegment((k/maxx)[A,B],((k-pasx)/maxx)[A,B]);
+    endfor;
+    % marquage des points
+    m_c:=m_c*3;
+    marque_p:="croix";
+    labeloffset:=labeloffset*2;
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(#5)&"}"),unitex*(1,0));
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{"&decimal(#6)&"}"),A);
+    if #8>0:
+    for k=2 upto maxx:
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    endfor;
+    for k=minx upto -1:
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"}}"),unitex*(k,0));%%%
+    endfor;
+    fi;
+    vardef tata(text t)=%on place les points
+    if #4>0:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
+    label.top(LATEX(p_),unitp*(k,0));
+    pointe(unitp*(k,0));
+    fi;
+    fi;
+    endfor;
+    fi;
+    if #7=2:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
+    if ((#5*k) mod pasx)<>0:
+    label.bot(LATEX("\noexpand\footnotesize$\noexpand\frac{\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"}}}{\noexpand\num{"&decimal(pasx)&"}}$"),unitp*(k,0));
+    else:
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#5)&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0));
+    fi;
+    pointe(unitp*(k-#6,0));
+    fi;
+    fi;
+    endfor;
+    elseif #7=1:
+    for p_=t:
+    if numeric p_:
+    k:=p_;
+    fi;
+    if string p_:
+    if p_<>"":
+    label.bot(LATEX("\noexpand\footnotesize\noexpand\num{\noexpand\fpeval{"&decimal(#6)&"+"&decimal(#5-(#6))&"*"&decimal(k)&"/"&decimal(pasx)&"}}"),unitp*(k,0));
+    pointe(unitp*(k,0));
+    fi;
+    fi;
+    endfor;
+    fi;
+    enddef;
+    tata(#3);
+  \end{mpost}
+  \fi
+}
+
+\newcommand\Reperage[2][]{%
+  \useKVdefault[ClesReperage]%
+  \setKV[ClesReperage]{#1}%
+  \ifboolKV[ClesReperage]{Espace}{%
+    \setKV[ClesReperage]{Unitex=2,Unitey=2.5,Unitez=1.5}%
+    \setKV[ClesReperage]{#1}%
+    \setsepchar[*]{,*/}\ignoreemptyitems%
+    \readlist*\ListePointEspace{#2}%
+    \buildespace%
+  }{\ifboolKV[ClesReperage]{Plan}{%
+      \setsepchar[*]{,*/}\ignoreemptyitems%
+      \readlist*\ListePointRepere{#2}%
+      \buildreperenew%
+    }{%
+      \setsepchar[*]{,*/}\ignoreemptyitems%
+      \readlist*\ListePointDroite{#2}%
+      \builddemidroitenew%
+    }%
+  }%
+}%
+
+%%%
+% Puissances
+%%%
+\newcommand\Puissances[2]{%
+  \ensuremath{%
+    \xintifboolexpr{#2=0}{1}{\xintifboolexpr{#2>0}{\xdef\total{\fpeval{#2-1}}#1\multido{\i=1+1}{\total}{\times#1}}{\xdef\total{\fpeval{-#2-1}}\frac{1}{#1\multido{\i=1+1}{\total}{\times#1}}}}%
+  }%
+}
+
+%%%
+% Ecritures d'unités
+%%%
+\setKVdefault[Unites]{m=false,km=false,hm=false,ha=false,dam=false,a=false,dm=false,cm=true,mm=false,um=false,nm=false,g=true,t=false,q=false,kg=false,hg=false,dag=false,dg=false,cg=false,mg=false,ug=false,ng=false,kmh=true,kms=false,ms=false,kgm=false,gcm=true,L=true,kL=false,hL=false,daL=false,dL=false,cL=false,mL=false,l=true,kl=false,hl=false,dal=false,dl=false,cl=false,ml=false,Go=true,Mo=false,ko=false,To=false,o=false,kWh=true,C=true,K=false,F=false}
+
+%D'apres https://tex.stackexchange.com/questions/38905/time-of-the-day-or-time-period-using-the-package-siunitx
+\ExplSyntaxOn
+\NewDocumentCommand \Temps { o > { \SplitArgument { 5 } { ; } } m }
+{
+  \group_begin:
+  \IfNoValueF {#1}
+  { \keys_set:nn { siunitx } {#1} }
+  \siunitx_hms_output:nnn #2
+  \group_end:
+}
+\cs_new_protected:Npn \siunitx_hms_output:nnn #1#2#3#4#5#6
+{
+  \IfNoValueF {#1}
+  {
+    \tl_if_blank:nF {#1}
+    {
+      \SI {#1} { \annee\xintifboolexpr{#1>1}{s}{} }
+      \IfNoValueF {#2} { ~ }
+    }
+  }
+  \IfNoValueF {#2}
+  {
+    \tl_if_blank:nF {#2}
+    {
+      \SI {#2} { \mois }
+      \IfNoValueF {#3} { ~ }
+    }
+  }
+  \IfNoValueF {#3}
+  {
+    \tl_if_blank:nF {#3}
+    {
+      \SI {#3} { \jour }
+      \IfNoValueF {#4} { ~ }
+    }
+  }
+  \IfNoValueF {#4}
+  {
+    \tl_if_blank:nF {#4}
+    {
+      \SI {#4} { \hour }
+      \IfNoValueF {#5} { ~ }
+    }
+  }
+  \IfNoValueF {#5}
+  {
+    \tl_if_blank:nF {#5}
+    {
+      \SI {#5} { \minute }
+      \IfNoValueF {#6} { ~ }
+    }
+  }
+  \IfNoValueF {#6}
+  { \tl_if_blank:nF {#6} { \SI {#6} { \second } } }
+}
+\ExplSyntaxOff
+
+\newcommand\Temp[2][]{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{F}{%
+    \SI{#2}{\fahrenheit}%
+  }{%
+    \ifboolKV[Unites]{K}{%
+      \SI{#2}{\kelvin}%
+    }{%
+      \SI{#2}{\celsius}%
+    }%
+  }%
+}%
+
+\newcommand\Conso[2][]{%
+  \SI{#2}{\kWh}%
+}
+
+\newcommand\Octet[2][]{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{o}{%
+    \SI{#2}{\octet}%
+  }{%
+    \ifboolKV[Unites]{ko}{%
+      \SI{#2}{\kilo\octet}%
+    }{\ifboolKV[Unites]{Mo}{%
+        \SI{#2}{\mega\octet}%
+      }{\ifboolKV[Unites]{To}{%
+          \SI{#2}{\tera\octet}%
+        }{%
+          \SI{#2}{\giga\octet}%
+        }%
+      }%
+    }%
+  }%
+}%
+
+\newcommand\Lg[2][]{%
+  \useKVdefault[Unites]%
+  \setKV[Unites]{#1}%
+  \ifboolKV[Unites]{nm}{%
+    \SI{#2}{\nm}%
+  }{\ifboolKV[Unites]{um}{%
+      \SI{#2}{\um}%
+    }{\ifboolKV[Unites]{km}{%
+        \SI{#2}{\km}%
+      }{\ifboolKV[Unites]{hm}{%
+          \SI{#2}{\hecto\metre}%
+        }{\ifboolKV[Unites]{dam}{%
+            \SI{#2}{\deca\metre}%
+          }{\ifboolKV[Unites]{dm}{%
+              \SI{#2}{\dm}%
+            }{\ifboolKV[Unites]{m}{%
+                \SI{#2}{\m}%
+              }{\ifboolKV[Unites]{mm}{%
+                  \SI{#2}{\mm}%
+                }{\SI{#2}{\cm}%
+                }%
+              }%
             }%
           }%
         }%
@@ -10537,19 +11800,32 @@ vardef Positions(expr Step)=
 \newcommand\Masse[2][]{%
   \useKVdefault[Unites]%
   \setKV[Unites]{#1}%
-  \ifboolKV[Unites]{kg}{%
-    \SI{#2}{\kg}%
-  }{\ifboolKV[Unites]{hg}{%
-      \SI{#2}{\hecto\gram}%
-    }{\ifboolKV[Unites]{dag}{%
-        \SI{#2}{\deca\gram}%
-      }{\ifboolKV[Unites]{dg}{%
-          \SI{#2}{\deci\gram}%
-        }{\ifboolKV[Unites]{cg}{%
-            \SI{#2}{\centi\gram}%
-          }{\ifboolKV[Unites]{mg}{%
-              \SI{#2}{\milli\gram}%
-            }{\SI{#2}{\gram}%
+  \ifboolKV[Unites]{ng}{%
+    \SI{#2}{\ng}%
+  }{\ifboolKV[Unites]{ug}{%
+      \SI{#2}{\ug}%
+    }{\ifboolKV[Unites]{t}{%
+        \SI{#2}{\tonne}%
+      }{\ifboolKV[Unites]{q}{%
+          \SI{#2}{\quintal}%
+        }{%
+          \ifboolKV[Unites]{kg}{%
+            \SI{#2}{\kg}%
+          }{\ifboolKV[Unites]{hg}{%
+              \SI{#2}{\hecto\gram}%
+            }{\ifboolKV[Unites]{dag}{%
+                \SI{#2}{\deca\gram}%
+              }{\ifboolKV[Unites]{dg}{%
+                  \SI{#2}{\deci\gram}%
+                }{\ifboolKV[Unites]{cg}{%
+                    \SI{#2}{\centi\gram}%
+                  }{\ifboolKV[Unites]{mg}{%
+                      \SI{#2}{\milli\gram}%
+                    }{\SI{#2}{\gram}%
+                    }%
+                  }%
+                }%
+              }%
             }%
           }%
         }%
@@ -10589,15 +11865,21 @@ vardef Positions(expr Step)=
     \SI{#2}{\square\km}%
   }{\ifboolKV[Unites]{hm}{%
       \SI{#2}{\square\hecto\metre}%
-    }{\ifboolKV[Unites]{dam}{%
-        \SI{#2}{\square\deca\metre}%
-      }{\ifboolKV[Unites]{dm}{%
-          \SI{#2}{\square\dm}%
-        }{\ifboolKV[Unites]{m}{%
-            \SI{#2}{\square\metre}%
-          }{\ifboolKV[Unites]{mm}{%
-              \SI{#2}{\square\mm}%
-            }{\SI{#2}{\square\cm}%
+    }{\ifboolKV[Unites]{ha}{%
+        \SI{#2}{\hectare}%
+      }{\ifboolKV[Unites]{dam}{%
+          \SI{#2}{\square\deca\metre}%
+        }{\ifboolKV[Unites]{a}{%
+            \SI{#2}{\are}%
+          }{\ifboolKV[Unites]{dm}{%
+              \SI{#2}{\square\dm}%
+            }{\ifboolKV[Unites]{m}{%
+                \SI{#2}{\square\metre}%
+              }{\ifboolKV[Unites]{mm}{%
+                  \SI{#2}{\square\mm}%
+                }{\SI{#2}{\square\cm}%
+                }%
+              }%
             }%
           }%
         }%
@@ -10636,7 +11918,11 @@ vardef Positions(expr Step)=
   \ifboolKV[Unites]{ms}{%
     \SI[per-mode=symbol]{#2}{\meter\per\second}%
   }{%
-    \SI[per-mode=symbol]{#2}{\kilo\meter\per\hour}%
+    \ifboolKV[Unites]{kms}{%
+      \SI[per-mode=symbol]{#2}{\kilo\meter\per\second}%
+    }{%
+      \SI[per-mode=symbol]{#2}{\kilo\meter\per\hour}%
+    }%
   }%
 }%
 
@@ -10650,177 +11936,378 @@ vardef Positions(expr Step)=
   }%
 }%
 
-%%%%%%%%% 
-%% Tableaux d'unités
-%%%%%%%%%
-\setKVdefault[ClesTableaux]{Entiers=false,Decimaux=false,Milliards=false,Millions=false,Milliers=true,Partie=false,CouleurG=gray!15,CouleurM=gray!15,Couleurm=gray!15,Couleuru=gray!15,Classes=false,Nombres=false,Metre=false,Carre=false,Cube=false,Litre=false,Gramme=false,Fleches=false,Colonnes=false,Prefixes=false}
+%%%
+% Tableaux d'unités
+%%%
+\setKVdefault[ClesTableaux]{Virgule=true,Entiers=false,Decimaux=false,Milliards=false,Millions=false,Micro=false,Nano=false,Partie=false,CouleurG=gray!15,CouleurM=gray!15,Couleurm=gray!15,Couleuru=gray!15,Classes=false,Nombres=false,Puissances=false,NbLignes=2,Metre=false,Are=false,Capacite=false,Carre=false,Cube=false,Litre=false,Gramme=false,Fleches=false,FlechesB=false,FlechesH=false,Colonnes=false,Prefixes=false}
 
 \newcommand\Tableau[1][]{%
   \useKVdefault[ClesTableaux]%
   \setKV[ClesTableaux]{#1}%
+  % 
+  %%% Clé Prefixes
+  % 
   \ifboolKV[ClesTableaux]{Prefixes}{%
-    \setlength{\tabcolsep}{0.01\tabcolsep}
-    \begin{center}
-      \begin{tabular}{|*{12}{>{\centering\arraybackslash}m{3.25em}|}>{\columncolor{gray!15},}{c}|*{12}{>{\centering\arraybackslash}m{3.25em}|}}
+    \setlength{\tabcolsep}{0.01\tabcolsep}%
+    \begin{center}%
+      % 
+      %%% Definition du tableau
+      % 
+      \begin{tabular}{|*{\ifboolKV[ClesTableaux]{Milliards}{12}{%
+      \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+      }}{>{\centering\arraybackslash}m{3.25em}|}>{\columncolor{gray!15}}{c}|*{%	
+      \ifboolKV[ClesTableaux]{Micro}{6}{%
+      \ifboolKV[ClesTableaux]{Nano}{9}{3}%
+      }}%
+      {>{\centering\arraybackslash}m{3.25em}|}}%
+        %
+      	%%% Prise en compte de la clé Partie
+      	%
         \ifboolKV[ClesTableaux]{Partie}{%
-        \multicolumn{12}{c}{\bfseries Partie entière}
-        &\multicolumn{1}{c}{\cellcolor{gray!15},}%
-        &\multicolumn{12}{c}{\bfseries Partie décimale}\\}{}
+        \multicolumn{%
+        \ifboolKV[ClesTableaux]{Milliards}{12}{%
+      \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+      }}{c}{\bfseries Partie entière}
+        &\multicolumn{1}{c}{\cellcolor{gray!15}\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
+        &\multicolumn{%	
+      \ifboolKV[ClesTableaux]{Micro}{6}{%
+      \ifboolKV[ClesTableaux]{Nano}{9}{3}%
+      }}%
+      {c}{\bfseries Partie décimale}\\}{}%
+        %
+      	%%% Prise en compte de la clé Classes
+      	%
         \ifboolKV[ClesTableaux]{Classes}{%
-        \hline%
-        \multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe
-        des milliards}%
-        &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe
+        \hline
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        \cline{1-12}\multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe des milliards}%
+        &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}%
+          &}{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        \cline{1-9}\multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe
           des millions}%
-        &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe
+          &}{%
+        \cline{1-6}}}%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        \multicolumn{3}{c|}}{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        \multicolumn{3}{c|}}{\multicolumn{3}{|c|}}}%
+        {\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe
           des milliers}%
         &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleuru}}Classe
           des unités}%
-        &&&&&&&&&&&&&\\}{}
-        \hline
-        % 
+        &\ifboolKV[ClesTableaux]{Virgule}{,}{}%
+        &\multicolumn{%	
+      \ifboolKV[ClesTableaux]{Micro}{6}{%
+      \ifboolKV[ClesTableaux]{Nano}{9}{3}%
+      }}%
+      {c|}{}\\}{}%
+      	%
+      	%%% Valeurs par défaut
+      	%
+        \hline%
+        \ifboolKV[ClesTableaux]{Milliards}{%
         &%
         &\fontsize{8.5}{8.5}\selectfont giga%
         &%
         &%
         &\fontsize{8.5}{8.5}\selectfont méga%
         &%
+        }{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        &%
+        &\fontsize{8.5}{8.5}\selectfont méga%
+        &%
+        }{%
+        }}%
         &%
         &\fontsize{8.5}{8.5}\selectfont kilo%
         &\fontsize{8.5}{8.5}\selectfont hecto%
         &\fontsize{8.5}{8.5}\selectfont déca%
         &\fontsize{8.5}{8.5}\selectfont unités%
-        &%
+        &\ifboolKV[ClesTableaux]{Virgule}{,}{}%
         &\fontsize{8.5}{8.5}\selectfont deci%
         &\fontsize{8.5}{8.5}\selectfont centi%
-        &\fontsize{8.5}{8.5}\selectfont milli%
+        &\fontsize{8.5}{8.5}\selectfont milli%	
+      	\ifboolKV[ClesTableaux]{Micro}{&%
         &%
+        &\fontsize{8.5}{8.5}\selectfont micro\\}{%
+      	\ifboolKV[ClesTableaux]{Nano}{&%
         &%
         &\fontsize{8.5}{8.5}\selectfont micro%
         &%
         &%
-        &\fontsize{8.5}{8.5}\selectfont nano%
+        &\fontsize{8.5}{8.5}\selectfont nano\\}{\\}%
+      	}%     
+        %
+      	%%% Prise en compte de la clé Nombres
+      	%
+        \ifboolKV[ClesTableaux]{Nombres}{%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        \fontsize{4.5}{4.5}\selectfont\num{100000000000}%
+        &\fontsize{4.5}{4.5}\selectfont\num{10000000000}%
+        &\fontsize{4.5}{4.5}\selectfont\num{1000000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{100000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{10000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{1000000}%
         &%
+        }{}
+        \ifboolKV[ClesTableaux]{Millions}{%
+        \fontsize{4.5}{4.5}\selectfont \num{100000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{10000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{1000000}%
         &%
-        &\\      
-        \ifboolKV[ClesTableaux]{Nombres}{%
+        }{}
+        \fontsize{4.5}{4.5}\selectfont \num{100000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{10000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{1000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{100}%
+        &\fontsize{4.5}{4.5}\selectfont \num{10}%
+        &\fontsize{4.5}{4.5}\selectfont \num{1}%
+        &\ifboolKV[ClesTableaux]{Virgule}{,}{}%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,1} ou $\dfrac{\strut1}{\strut10}$%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,01} ou $\dfrac{\strut1}{\strut100}$%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,001} ou $\dfrac{\strut1}{\strut\num{1000}}$%
+        \ifboolKV[ClesTableaux]{Micro}{%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,0001} ou $\dfrac{\strut1}{\strut\num{10000}}$%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,00001} ou $\dfrac{\strut1}{\strut\num{100000}}$%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,000001} ou $\dfrac{\strut1}{\strut\num{1000000}}$%
+        }{%
+        \ifboolKV[ClesTableaux]{Nano}{%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,0001} ou $\dfrac{\strut1}{\strut\num{10000}}$%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,00001} ou $\dfrac{\strut1}{\strut\num{100000}}$%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,000001} ou $\dfrac{\strut1}{\strut\num{1000000}}$%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,0000001} ou $\dfrac{\strut1}{\strut\num{10000000}}$%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,00000001} ou $\dfrac{\strut1}{\strut\num{100000000}}$%
+        &\fontsize{4.5}{4.5}\selectfont \num{0,000000001} ou $\dfrac{\strut1}{\strut\num{1000000000}}$%
+        }{}%
+        }{}\\}{}%
+        %
+      	%%% Prise en compte de la clé Puissances
+      	%
+        \ifboolKV[ClesTableaux]{Puissances}{%
+        \ifboolKV[ClesTableaux]{Milliards}{%
         &%
         &\fontsize{4.5}{4.5}\selectfont $\times10^{9}$%
         &%
         &%
         &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$%
+        &
+        }{%
+        \ifboolKV[ClesTableaux]{Millions}{%
         &%
+        &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$%
+        &
+        }{%
+        }}%
         &%
         &\fontsize{4.5}{4.5}\selectfont $\times10^3$%
         &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^2$%
         &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^1$%
         &\fontsize{4.5}{4.5}\selectfont $\times\num{1}$%
+        &\ifboolKV[ClesTableaux]{Virgule}{,}{}%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-1}$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-2}$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-3}$%
+        \ifboolKV[ClesTableaux]{Micro}{&%
         &%
-        &\fontsize{4.5}{4.5}\selectfont$\times\num{10}^{-1}$%
-        &\fontsize{4.5}{4.5}\selectfont$\times\num{10}^{-2}$%
-        &\fontsize{4.5}{4.5}\selectfont$\times\num{10}^{-3}$%
-        &%
-        &%
-        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-6}$%
-        &%
-        &%
-        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-9}$%  
-        &
-        &
-        &\\
-        }{}
-        \hline
-        &&&&&&&&&&&&&&&&&&&&&&&&\\
-        &&&&&&&&&&&&&&&&&&&&&&&&\\
-      \end{tabular}
-    \end{center}
-    \setlength{\tabcolsep}{100\tabcolsep}
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-6}$}{%
+      	\ifboolKV[ClesTableaux]{Nano}{&%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-6}$%
+        &%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-9}$}{}%
+      	}%
+        \\%
+        }{}%
+        %
+      	%%% Lignes vierges
+      	%
+        \hline%
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        &&&&&&%
+        }{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        &&&%
+        }{%
+        }}%
+        &&&&&&,&&&%
+		\ifboolKV[ClesTableaux]{Micro}{&&&}{%
+      	\ifboolKV[ClesTableaux]{Nano}{&&&&&&}{}%
+      	}	        
+        \\}%
+      \end{tabular}%
+    \end{center}%
+    \setlength{\tabcolsep}{100\tabcolsep}%
   }{}%
+  % 
+  %%% Clé Entiers
+  % 
   \ifboolKV[ClesTableaux]{Entiers}{%
-    \setlength{\tabcolsep}{0.01\tabcolsep}
-    \begin{center}
-      \begin{tabular}{|*{12}{>{\centering\arraybackslash}m{4.75em}|}}
-        \ifboolKV[ClesTableaux]{Classes}{\hline\multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe
-        des milliards}%
-        &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe
-          des millions}%
-        &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe
+    \setlength{\tabcolsep}{0.01\tabcolsep}%
+    \begin{center}%
+      %  
+      %%% Definition du tableau
+      %
+    \begin{tabular}{|*{%
+			\ifboolKV[ClesTableaux]{Milliards}{12}{%
+      \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+      }%
+      }{>{\centering\arraybackslash}m{4.75em}|}}%
+        \ifboolKV[ClesTableaux]{Classes}{%
+        \hline
+        \ifboolKV[ClesTableaux]{Milliards}{\multicolumn{3}{|c}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe des milliards}&\multicolumn{3}{|c}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}&}{}
+        \ifboolKV[ClesTableaux]{Millions}{\multicolumn{3}{|c}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}&}{}
+        \multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe
           des milliers}%
         &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleuru}}Classe des unités}\\}{}
         \hline
+        \ifboolKV[ClesTableaux]{Milliards}{%
         \fontsize{4.5}{4.5}\selectfont centaines de milliards%
         &\fontsize{4.5}{4.5}\selectfont dizaines de milliards%
         &\fontsize{4.5}{4.5}\selectfont unités de milliards%
         &\fontsize{4.5}{4.5}\selectfont centaines de millions%
         &\fontsize{4.5}{4.5}\selectfont dizaines de millions%
         &\fontsize{4.5}{4.5}\selectfont unités de millions%
-        &\fontsize{4.5}{4.5}\selectfont centaines de milliers%
+        &
+        }{}
+        \ifboolKV[ClesTableaux]{Millions}{%
+        \fontsize{4.5}{4.5}\selectfont centaines de millions%
+        &\fontsize{4.5}{4.5}\selectfont dizaines de millions%
+        &\fontsize{4.5}{4.5}\selectfont unités de millions%
+        &
+        }{}
+        \fontsize{4.5}{4.5}\selectfont centaines de milliers%
         &\fontsize{4.5}{4.5}\selectfont dizaines de milliers%
         &\fontsize{4.5}{4.5}\selectfont unités de milliers%
         &\fontsize{4.5}{4.5}\selectfont centaines%
         &\fontsize{4.5}{4.5}\selectfont dizaines%
         &\fontsize{4.5}{4.5}\selectfont unités\\%
         \ifboolKV[ClesTableaux]{Nombres}{%
-        \fontsize{4.5}{4.5}\selectfont \num{100000000000}%
-        &\fontsize{4.5}{4.5}\selectfont \num{10000000000}%
-        &\fontsize{4.5}{4.5}\selectfont \num{1000000000}%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        \fontsize{4.5}{4.5}\selectfont\num{100000000000}%
+        &\fontsize{4.5}{4.5}\selectfont\num{10000000000}%
+        &\fontsize{4.5}{4.5}\selectfont\num{1000000000}%
         &\fontsize{4.5}{4.5}\selectfont \num{100000000}%
         &\fontsize{4.5}{4.5}\selectfont \num{10000000}%
         &\fontsize{4.5}{4.5}\selectfont \num{1000000}%
-        &\fontsize{4.5}{4.5}\selectfont \num{100000}%
+        &%
+        }{}
+        \ifboolKV[ClesTableaux]{Millions}{%
+        \fontsize{4.5}{4.5}\selectfont \num{100000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{10000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{1000000}%
+        &%
+        }{}
+        \fontsize{4.5}{4.5}\selectfont \num{100000}%
         &\fontsize{4.5}{4.5}\selectfont \num{10000}%
         &\fontsize{4.5}{4.5}\selectfont \num{1000}%
         &\fontsize{4.5}{4.5}\selectfont \num{100}%
         &\fontsize{4.5}{4.5}\selectfont \num{10}%
         &\fontsize{4.5}{4.5}\selectfont \num{1}%
         \\
-        }{}
-        \hline
-        &&&&&&&&&&&\\
-        &&&&&&&&&&&\\
-      \end{tabular}
-    \end{center}
-    \setlength{\tabcolsep}{100\tabcolsep}
+        }{} 
+        %
+      	%%% Prise en compte de la clé Puissances
+      	%
+        \ifboolKV[ClesTableaux]{Puissances}{%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times10^{9}$%
+        &%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$%
+        &
+        }{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$%
+        &
+        }{%
+        }}%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times10^3$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^2$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^1$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{1}$%
+        \\%
+        }{}%
+        %
+      	%%% Lignes vierges
+      	%
+        \hline%        
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        &&&&&&}{}%                         
+        \ifboolKV[ClesTableaux]{Millions}{%
+        &&&}{}
+        &&&&&\\}%
+      \end{tabular}%
+    \end{center}%
+    \setlength{\tabcolsep}{100\tabcolsep}%
   }{}%
+  %
+  %%% Clé Decimaux
+  %
   \ifboolKV[ClesTableaux]{Decimaux}{%
-    \setlength{\tabcolsep}{0.01\tabcolsep}
-    \ifboolKV[ClesTableaux]{Milliards}{%
-      \newcolumntype{X}{|*{12}{>{\centering\arraybackslash}m{4.75em}|}>{\columncolor{gray!15},}{c}|*{3}{>{\centering\arraybackslash}m{4.75em}|}}%
-    }{\ifboolKV[ClesTableaux]{Millions}{%
-        \newcolumntype{X}{|*{9}{>{\centering\arraybackslash}m{4.75em}|}>{\columncolor{gray!15},}{c}|*{3}{>{\centering\arraybackslash}m{4.75em}|}}%
-      }{\newcolumntype{X}{|*{6}{>{\centering\arraybackslash}m{4.75em}|}>{\columncolor{gray!15},}{c}|*{3}{>{\centering\arraybackslash}m{4.75em}|}}%
-      }
-    }
-    \begin{center}
-      \begin{tabular}{X}
+    \setlength{\tabcolsep}{0.01\tabcolsep}%
+    \begin{center}%
+      % 
+      %%% Definition du tableau
+      % 
+      \begin{tabular}{|*{\ifboolKV[ClesTableaux]{Milliards}{12}{%
+      \ifboolKV[ClesTableaux]{Millions}{9}{6}%
+      }}{>{\centering\arraybackslash}m{4.75em}|}>{\columncolor{gray!15}}{c}|*{3}%
+      {>{\centering\arraybackslash}m{4.75em}|}}%
+      	%
+      	%%% Prise en compte de la clé Partie
+      	%
         \ifboolKV[ClesTableaux]{Partie}{%
-        \ifboolKV[ClesTableaux]{Milliards}{\multicolumn{12}{c}{\bfseries Partie entière}}{\ifboolKV[ClesTableaux]{Millions}{\multicolumn{9}{c}{\bfseries Partie entière}}{\multicolumn{6}{c}{\bfseries Partie entière}}}
-        &\multicolumn{1}{c}{\cellcolor{gray!15},}%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        \multicolumn{12}{c}{\bfseries Partie entière}}{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        \multicolumn{9}{c}{\bfseries Partie entière}}{%
+        \multicolumn{6}{c}{\bfseries Partie entière}}}%
+        &\multicolumn{1}{c}{\cellcolor{gray!15}\ifboolKV[ClesTableaux]{Virgule}{,}{}}%
         &\multicolumn{3}{c}{\bfseries Partie décimale}\\}{}
+        %
+      	%%% Prise en compte de la clé Classes
+      	%
         \ifboolKV[ClesTableaux]{Classes}{%
         \hline%
-        \ifboolKV[ClesTableaux]{Milliards}{\multicolumn{3}{|c}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe des milliards}\uppercase{&}\multicolumn{3}{|c}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}\uppercase{&}}{}
-        \ifboolKV[ClesTableaux]{Millions}{\multicolumn{3}{|c}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}\uppercase{&}}{}
-        \multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        \multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurG}}Classe des milliards}&\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}&}{}%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        \multicolumn{3}{|c|}{\cellcolor{\useKV[ClesTableaux]{CouleurM}}Classe des millions}&}{}%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        \multicolumn{3}{c|}}{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        \multicolumn{3}{c|}}{\multicolumn{3}{|c|}}}%
+        {\cellcolor{\useKV[ClesTableaux]{Couleurm}}Classe
           des milliers}%
         &\multicolumn{3}{c|}{\cellcolor{\useKV[ClesTableaux]{Couleuru}}Classe
           des unités}%
-        &&&&\\}{}
+        &\ifboolKV[ClesTableaux]{Virgule}{,}{}&\multicolumn{3}{c|}{}\\}{}
+        %
+        %%% Valeurs ci-dessous par défaut
+        %
         \hline
         \ifboolKV[ClesTableaux]{Milliards}{%
         \fontsize{4.5}{4.5}\selectfont centaines de milliards%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont dizaines de milliards%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont unités de milliards%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont centaines de millions%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont dizaines de millions%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont unités de millions%
-        \uppercase{&}
+        &\fontsize{4.5}{4.5}\selectfont dizaines de milliards%
+        &\fontsize{4.5}{4.5}\selectfont unités de milliards%
+        &\fontsize{4.5}{4.5}\selectfont centaines de millions%
+        &\fontsize{4.5}{4.5}\selectfont dizaines de millions%
+        &\fontsize{4.5}{4.5}\selectfont unités de millions%
+        &
         }{}
         \ifboolKV[ClesTableaux]{Millions}{%
         \fontsize{4.5}{4.5}\selectfont centaines de millions%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont dizaines de millions%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont unités de millions%
-        \uppercase{&}
+        &\fontsize{4.5}{4.5}\selectfont dizaines de millions%
+        &\fontsize{4.5}{4.5}\selectfont unités de millions%
+        &
         }{}
         \fontsize{4.5}{4.5}\selectfont centaines de milliers%
         &\fontsize{4.5}{4.5}\selectfont dizaines de milliers%
@@ -10828,53 +12315,84 @@ vardef Positions(expr Step)=
         &\fontsize{4.5}{4.5}\selectfont centaines%
         &\fontsize{4.5}{4.5}\selectfont dizaines%
         &\fontsize{4.5}{4.5}\selectfont unités%
-        &%
+        &\ifboolKV[ClesTableaux]{Virgule}{,}{}%
         &\fontsize{4.5}{4.5}\selectfont dixièmes%
           &\fontsize{4.5}{4.5}\selectfont centièmes%
         &\fontsize{4.5}{4.5}\selectfont millièmes\\
         \ifboolKV[ClesTableaux]{Nombres}{%
         \ifboolKV[ClesTableaux]{Milliards}{%
         \fontsize{4.5}{4.5}\selectfont\num{100000000000}%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont\num{10000000000}%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont\num{1000000000}%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont \num{100000000}%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont \num{10000000}%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont \num{1000000}%
-        \uppercase{&}%
+        &\fontsize{4.5}{4.5}\selectfont\num{10000000000}%
+        &\fontsize{4.5}{4.5}\selectfont\num{1000000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{100000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{10000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{1000000}%
+        &%
         }{}
         \ifboolKV[ClesTableaux]{Millions}{%
         \fontsize{4.5}{4.5}\selectfont \num{100000000}%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont \num{10000000}%
-        \uppercase{&}\fontsize{4.5}{4.5}\selectfont \num{1000000}%
-        \uppercase{&}%
-        }{}          
+        &\fontsize{4.5}{4.5}\selectfont \num{10000000}%
+        &\fontsize{4.5}{4.5}\selectfont \num{1000000}%
+        &%
+        }{}
         \fontsize{4.5}{4.5}\selectfont \num{100000}%
         &\fontsize{4.5}{4.5}\selectfont \num{10000}%
         &\fontsize{4.5}{4.5}\selectfont \num{1000}%
         &\fontsize{4.5}{4.5}\selectfont \num{100}%
         &\fontsize{4.5}{4.5}\selectfont \num{10}%
         &\fontsize{4.5}{4.5}\selectfont \num{1}%
-        &%
+        &\ifboolKV[ClesTableaux]{Virgule}{,}{}%
         &\fontsize{4.5}{4.5}\selectfont \num{0,1} ou $\dfrac{\strut1}{\strut10}$%
         &\fontsize{4.5}{4.5}\selectfont \num{0,01} ou $\dfrac{\strut1}{\strut100}$%
         &\fontsize{4.5}{4.5}\selectfont \num{0,001} ou $\dfrac{\strut1}{\strut\num{1000}}$%
         \\
+        }{}%
+        % 
+        %%% Prise en compte de la clé Puissances
+        % 
+        \ifboolKV[ClesTableaux]{Puissances}{%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times10^{9}$%
+        &%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$%
+        &
+        }{%
+        \ifboolKV[ClesTableaux]{Millions}{%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times10^{6}$%
+        &
+        }{%
+        }}%
+        &%
+        &\fontsize{4.5}{4.5}\selectfont $\times10^3$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^2$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^1$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{1}$%
+        &\ifboolKV[ClesTableaux]{Virgule}{,}{}%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-1}$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-2}$%
+        &\fontsize{4.5}{4.5}\selectfont $\times\num{10}^{-3}$%
+        \\%
         }{}
-        \hline
-       \ifboolKV[ClesTableaux]{Milliards}{%
-        \uppercase{&}\uppercase{&}\uppercase{&}\uppercase{&}\uppercase{&}\uppercase{&}}{}                %                                                                            
-       \ifboolKV[ClesTableaux]{Millions}{%
-       \uppercase{&}\uppercase{&}\uppercase{&}}{}
-                   &&&&&&&&&\\
-       \ifboolKV[ClesTableaux]{Milliards}{%
-        \uppercase{&}\uppercase{&}\uppercase{&}\uppercase{&}\uppercase{&}\uppercase{&}}{}                %                                                                            
+        \hline%
+        %
+        %%% Lignes vierges       
+        % 
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+        \ifboolKV[ClesTableaux]{Milliards}{%
+        &&&&&&}{}%                         
        \ifboolKV[ClesTableaux]{Millions}{%
-       \uppercase{&}\uppercase{&}\uppercase{&}}{}
-                   &&&&&&&&&\\
+       &&&}{}
+       &&&&&&,&&&\\}
       \end{tabular}
-    \end{center}
-    \setlength{\tabcolsep}{100\tabcolsep}
-  }{}
+    \end{center}%
+    \setlength{\tabcolsep}{100\tabcolsep}%
+  }{}%
+  % 
+  %%% Prise en compte de la clé Metre
+  % 
   \ifboolKV[ClesTableaux]{Metre}{%
     \[\renewcommand{\arraystretch}{1.15}%
       \begin{tabular}{|*{7}{p{7.5mm}|}}%
@@ -10888,7 +12406,8 @@ vardef Positions(expr Step)=
         \hline
         \multicolumn{1}{|c|}{km}&\multicolumn{1}{c|}{hm}&\multicolumn{1}{c|}{dam}&\multicolumn{1}{c|}{m}&\multicolumn{1}{c|}{dm}&\multicolumn{1}{c|}{cm}&\multicolumn{1}{c|}{mm}\\
         \hline
-        &&&&&&\\
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+        &&&&&&\\}
         \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (G1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (F1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (E1);}}%
@@ -10896,33 +12415,25 @@ vardef Positions(expr Step)=
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (C1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (B1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (A1);}}\\%
-      \end{tabular}
-    \]
-    \ifboolKV[ClesTableaux]{Fleches}{%
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\mbox{10}$}(B);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\mbox{10}$}(C);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\mbox{10}$}(D);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\mbox{10}$}(E);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\mbox{10}$}(F);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\mbox{10}$}(G);}
-      % bas
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\mbox{10}$}(B1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\mbox{10}$}(C1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\mbox{10}$}(D1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\mbox{10}$}(E1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\mbox{10}$}(F1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\mbox{10}$}(G1);}
-    }{}
-  }
-  {}
+      \end{tabular}%
+    \]%
+    \Conversion{10}%
+  }%
+  {}%
+  % 
+  %%% Prise en compte de la clé Carre
+  % 
   \ifboolKV[ClesTableaux]{Carre}{%
     \[\renewcommand{\arraystretch}{1.15}%
       \ifboolKV[ClesTableaux]{Colonnes}{%
-        \newcolumntype{X}{|*{7}{p{2.5mm}!{\color{gray!50}\vrule}p{2.5mm}|}}%
+      \newcolumntype{X}{|*{7}{>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}|}}%
       }{%
-        \newcolumntype{X}{|*{7}{p{2.5mm}p{2.5mm}|}}
-      }
-      \begin{tabular}{X}
+      \ifboolKV[ClesTableaux]{Are}{%
+      \newcolumntype{X}{|*{7}{>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}|}}%
+      }{
+        \newcolumntype{X}{|*{7}{p{3.5mm}p{3.5mm}|}}%
+    }}%
+      \begin{tabular}{X}%
         \multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}%
         &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (B);}}%
         &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (C);}}%
@@ -10931,9 +12442,14 @@ vardef Positions(expr Step)=
         &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}%
         &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\%
         \hline
-        \multicolumn{2}{|c|}{km$^2$}&\multicolumn{2}{c|}{hm$^2$}&\multicolumn{2}{c|}{dam$^2$}&\multicolumn{2}{c|}{m$^2$}&\multicolumn{2}{c|}{dm$^2$}&\multicolumn{2}{c|}{cm$^2$}&\multicolumn{2}{c|}{mm$^2$}\\
-        \hline
-        &&&&&&&&&&&&&\\
+        \multicolumn{2}{|c|}{km$^2$}&\multicolumn{2}{c|}{hm$^2$}&\multicolumn{2}{c|}{dam$^2$}&\multicolumn{2}{c|}{m$^2$}&\multicolumn{2}{c|}{dm$^2$}&\multicolumn{2}{c|}{cm$^2$}&\multicolumn{2}{c|}{mm$^2$}\\%
+        \ifboolKV[ClesTableaux]{Are}{%
+        \cline{3-6}
+        \multicolumn{2}{|c|}{}&&{\scriptsize ha}&&{\scriptsize a}&\multicolumn{2}{c|}{}&\multicolumn{2}{c|}{}&\multicolumn{2}{c|}{}&\multicolumn{2}{c|}{}\\
+        }{}        
+        \hline        
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
+        &&&&&&&&&&&&&\\}
         \multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (G1);}}%
         &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (F1);}}%
         &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (E1);}}%
@@ -10942,32 +12458,23 @@ vardef Positions(expr Step)=
         &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (B1);}}%
         &\multicolumn{2}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=0.6em] (A1);}}\\%
       \end{tabular}
-    \]
-    \ifboolKV[ClesTableaux]{Fleches}{%
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\mbox{100}$}(B);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\mbox{100}$}(C);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\mbox{100}$}(D);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\mbox{100}$}(E);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\mbox{100}$}(F);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\mbox{100}$}(G);}
-      % bas
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\mbox{100}$}(B1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\mbox{100}$}(C1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\mbox{100}$}(D1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\mbox{100}$}(E1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\mbox{100}$}(F1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\mbox{100}$}(G1);}
-    }{}%
-  }%
-  {}%
+    \]%
+    \Conversion{100}%
+  }{}%
+  % 
+  %%% Prise en compte de la clé Cube
+  % 
   \ifboolKV[ClesTableaux]{Cube}{%
     \setlength{\tabcolsep}{0.625\tabcolsep}%
-    \ifboolKV[ClesTableaux]{Colonnes}{%
-      \newcolumntype{X}{|*{7}{p{2.5mm}!{\color{gray!50}\vrule}p{2.5mm}!{\color{gray!50}\vrule}p{2.5mm}|}}%
+	\ifboolKV[ClesTableaux]{Colonnes}{%
+      \newcolumntype{X}{|*{7}{>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}|}}%
     }{%
-      \newcolumntype{X}{|*{7}{p{2.5mm}p{2.5mm}p{2.5mm}|}}%
-    }
-    \[\renewcommand{\arraystretch}{1.15}
+    \ifboolKV[ClesTableaux]{Capacite}{%
+      \newcolumntype{X}{|*{7}{>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}!{\color{gray!50}\vrule}>{\centering\arraybackslash}p{3.5mm}|}}%
+    }{%
+      \newcolumntype{X}{|*{7}{p{3.5mm}p{3.5mm}p{3.5mm}|}}%
+    }}% 
+    \[\renewcommand{\arraystretch}{1.15}%
       \begin{tabular}{X}
         \multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}%
         &\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (B);}}%
@@ -10978,8 +12485,14 @@ vardef Positions(expr Step)=
         &\multicolumn{3}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\%
         \hline
         \multicolumn{3}{|c|}{km$^3$}&\multicolumn{3}{c|}{hm$^3$}&\multicolumn{3}{c|}{dam$^3$}&\multicolumn{3}{c|}{m$^3$}&\multicolumn{3}{c|}{dm$^3$}&\multicolumn{3}{c|}{cm$^3$}&\multicolumn{3}{c|}{mm$^3$}\\
+        \ifboolKV[ClesTableaux]{Capacite}{%
+        \cline{10-15}
+        \multicolumn{3}{|c|}{}&\multicolumn{3}{c|}{}&\multicolumn{3}{c|}{}&{\scriptsize hL}&{\scriptsize daL}&{\scriptsize L}&{\scriptsize dL}&{\scriptsize cL}&{\scriptsize mL}&\multicolumn{3}{c|}{}&\multicolumn{3}{c|}{}\\
+        }{}%
         \hline
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}}}\do{%
         &&&&&&&&&&&&&&&&&&&&\\
+        }%
         \multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (G1);}}%
         &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (F1);}}%
         &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (E1);}}%
@@ -10988,75 +12501,41 @@ vardef Positions(expr Step)=
         &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (B1);}}%
         &\multicolumn{3}{c}{\tikz[remember picture,overlay,yshift=\ht\strutbox]{\coordinate (A1);}}\\%
       \end{tabular}
-    \]
-    \setlength{\tabcolsep}{1.6\tabcolsep}
-    \ifboolKV[ClesTableaux]{Fleches}{%
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150]
-        (A) to node[above, midway]{$\times\mbox{\num{1000}}$}(B);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to
-        node[above, midway]{$\times\mbox{\num{1000}}$}(C);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to
-        node[above, midway]{$\times\mbox{\num{1000}}$}(D);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to
-        node[above, midway]{$\times\mbox{\num{1000}}$}(E);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to
-        node[above, midway]{$\times\mbox{\num{1000}}$}(F);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to
-        node[above, midway]{$\times\mbox{\num{1000}}$}(G);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to
-        node[below, midway]{$\div\mbox{\num{1000}}$}(B1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to
-        node[below, midway]{$\div\mbox{\num{1000}}$}(C1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to
-        node[below, midway]{$\div\mbox{\num{1000}}$}(D1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to
-        node[below, midway]{$\div\mbox{\num{1000}}$}(E1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to
-        node[below, midway]{$\div\mbox{\num{1000}}$}(F1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to
-        node[below, midway]{$\div\mbox{\num{1000}}$}(G1);}
-    }{}
-  }
-  {}
+    \]%
+    \setlength{\tabcolsep}{1.6\tabcolsep}%
+    \Conversion{1000}%
+  }{}%
+  % 
+  %%% Prise en compte de la clé Litre
+  % 
   \ifboolKV[ClesTableaux]{Litre}{%
     \[\renewcommand{\arraystretch}{1.15}%
-      \begin{tabular}{|*{7}{p{7.5mm}|}}
+      \begin{tabular}{|*{6}{p{7.5mm}|}}
         \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (A);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (B);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (C);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (D);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (E);}}%
-        &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}%
-        &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\%
+        &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}\\%
         \hline
-        \multicolumn{1}{|c|}{kL}&\multicolumn{1}{c|}{hL}&\multicolumn{1}{c|}{daL}&\multicolumn{1}{c|}{L}&\multicolumn{1}{c|}{dL}&\multicolumn{1}{c|}{cL}&\multicolumn{1}{c|}{mL}\\
-        \hline
-        &&&&&&\\
-        \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (G1);}}%
-        &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (F1);}}
+        \multicolumn{1}{|c|}{hL}&\multicolumn{1}{c|}{daL}&\multicolumn{1}{c|}{L}&\multicolumn{1}{c|}{dL}&\multicolumn{1}{c|}{cL}&\multicolumn{1}{c|}{mL}\\
+        \hline        
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}-1}}\do{%
+        &&&&&\\}%
+        &&&&&\\%
+        \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (F1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (E1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (D1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (C1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (B1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (A1);}}\\%
       \end{tabular}
-    \]
-    \ifboolKV[ClesTableaux]{Fleches}{%
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\mbox{10}$}(B);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\mbox{10}$}(C);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\mbox{10}$}(D);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\mbox{10}$}(E);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\mbox{10}$}(F);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\mbox{10}$}(G);}
-      % bas
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\mbox{10}$}(B1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\mbox{10}$}(C1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\mbox{10}$}(D1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\mbox{10}$}(E1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\mbox{10}$}(F1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\mbox{10}$}(G1);}
-    }{}%
+    \]%
+    \Conversion{10}%
   }{}%
+  % 
+  %%% Prise en compte de la clé Gramme
+  % 
   \ifboolKV[ClesTableaux]{Gramme}{%
     \[\renewcommand{\arraystretch}{1.15}%
       \begin{tabular}{|*{7}{p{7.5mm}|}}
@@ -11066,11 +12545,12 @@ vardef Positions(expr Step)=
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (D);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (E);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (F);}}%
-        &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}
-        \\%
+        &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate (G);}}\\%
         \hline
         \multicolumn{1}{|c|}{kg}&\multicolumn{1}{c|}{hg}&\multicolumn{1}{c|}{dag}&\multicolumn{1}{c|}{g}&\multicolumn{1}{c|}{dg}&\multicolumn{1}{c|}{cg}&\multicolumn{1}{c|}{mg}\\
         \hline
+        \xintFor* ##1 in {\xintSeq{1}{\useKV[ClesTableaux]{NbLignes}-1}}\do{%
+        &&&&&&\\}%
         &&&&&&\\
         \multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (G1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (F1);}}%
@@ -11080,21 +12560,483 @@ vardef Positions(expr Step)=
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (B1);}}%
         &\multicolumn{1}{c}{\tikz[remember picture,overlay]{\coordinate[yshift=1em] (A1);}}\\%
       \end{tabular}
-    \]
-    \ifboolKV[ClesTableaux]{Fleches}{%
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\mbox{10}$}(B);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\mbox{10}$}(C);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\mbox{10}$}(D);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\mbox{10}$}(E);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\mbox{10}$}(F);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\mbox{10}$}(G);}
-%      % bas
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\mbox{10}$}(B1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\mbox{10}$}(C1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\mbox{10}$}(D1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\mbox{10}$}(E1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\mbox{10}$}(F1);}
-      \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\mbox{10}$}(G1);}
-    }{}%
+    \]%
+    \Conversion{10}%
+  }{}%
+}%
+
+\newcommand\Conversion[1]{%
+  \ifboolKV[ClesTableaux]{Fleches}{\setKV[ClesTableaux]{FlechesH,FlechesB}}{}%
+  \ifboolKV[ClesTableaux]{FlechesH}{%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (A) to node[above, midway]{\small$\times\num{#1}$}(B);}%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (B) to node[above, midway]{\small$\times\num{#1}$}(C);}%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (C) to node[above, midway]{\small$\times\num{#1}$}(D);}%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (D) to node[above, midway]{\small$\times\num{#1}$}(E);}%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (E) to node[above, midway]{\small$\times\num{#1}$}(F);}%
+    \ifboolKV[ClesTableaux]{Litre}{}{\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=30,in=150] (F) to node[above, midway]{\small$\times\num{#1}$}(G);}%
+    }%
+  }{}%
+  \ifboolKV[ClesTableaux]{FlechesB}{%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (A1) to node[below, midway]{\small$\div\num{#1}$}(B1);}%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (B1) to node[below, midway]{\small$\div\num{#1}$}(C1);}%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (C1) to node[below, midway]{\small$\div\num{#1}$}(D1);}%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (D1) to node[below, midway]{\small$\div\num{#1}$}(E1);}%
+    \tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (E1) to node[below, midway]{\small$\div\num{#1}$}(F1);}%
+    \ifboolKV[ClesTableaux]{Litre}{}{\tikz[remember picture, overlay]{\draw[gray,->,>=latex,out=-150,in=-30] (F1) to node[below, midway]{\small$\div\num{#1}$}(G1);}}%
   }{}%
+}%
+
+%%%
+% Cards
+%%%
+\newtcolorbox{Mybox}[3]{%
+  enhanced,
+  nobeforeafter,
+  left=0pt,right=0pt,top=0pt,
+  text fill,
+  width=\largeurcarte,
+  height=\hauteurcarte,
+  arc=5pt,
+  overlay unbroken and first={%
+    \coordinate[yshift=-0.5\hauteurtitre] (A1) at (frame.north west);
+    \coordinate[yshift=-0.5\hauteurtitre] (B1) at (frame.north east);    
+    \coordinate[yshift=-\hauteurtitre] (A) at (frame.north west);
+    \coordinate[yshift=-\hauteurtitre] (B) at (frame.north east);
+    \coordinate[xshift=1.5pt,yshift=8mm] (S1) at (frame.south west);
+    \coordinate[xshift=-1.5pt,yshift=8mm] (S2) at (frame.south east);
+    \coordinate[xshift=3mm+(\largeurtitre/2)] (A2) at (A1);
+    \coordinate[xshift=-3mm-(\largeurtitre/2)] (B2) at (B1);
+    \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurtitre,fill=TrameCouleur] (T1) at (A2){};
+    \node[TexteCouleur] (T1a) at (T1){\Large #1};
+    \node[yshift=-0.65cm] (T1b) at (T1){\tiny réponse précédente};
+    \node[inner sep=0pt,rounded corners, rectangle, draw=black,minimum height=1cm,text width=\largeurtitre,fill=TrameCouleur] (T2) at (B2){};
+    \node[inner sep=0pt,TexteCouleur] (T2a) at (T2){
+      \begin{minipage}{\largeurtitre}
+        \begin{center}
+          #2
+        \end{center}
+      \end{minipage}
+    };
+    \node[yshift=-0.65cm] (T2b) at (T2){};
+    \ifboolKV[Cards]{Titre}{\node[] at (T2b) {\tiny\useKV[Cards]{NomTitre}};}{},
+    \node[rectangle,xshift=5mm,yshift=4.25mm,minimum width=2em,rounded corners,fill=TrameCouleur,draw=black] (R) at (frame.south west) {\color{black}\Large\bfseries #3};
+    \draw[dashed] (S1) -- (S2);
+  },
+  colback=white,
+  colbacktitle=TrameCouleur,
+}
+
+\usetikzlibrary{backgrounds}
+
+\makeatletter
+%https://tex.stackexchange.com/questions/347434/clip-background-image-inside-tcolorbox
+\newtcolorbox{MyboxSimpleAv}[1]{%
+  enhanced,
+  nobeforeafter,
+  left=0pt,right=0pt,top=\hauteurtitre,bottom=0pt,
+  text fill,
+  width=\largeurcarte,
+  height=\hauteurcarte,
+  arc=5pt,
+  colback=white,
+  underlay={%
+    \ifboolKV[Cards]{BackgroundAv}{%
+    \begin{tcbclipinterior}
+      \node[anchor=center,opacity=1]
+      at (interior.center) {%
+        \includegraphics[%
+        height=\tcb@height,
+        width=\tcb@width,
+        ]{\useKV[Cards]{ImageAv}}};
+    \end{tcbclipinterior},
+  }{}
+  },
+  overlay unbroken and first={%
+    \coordinate[yshift=-0.5\hauteurtitre] (A) at (frame.north);
+    \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at
+    (A){\begin{minipage}{\largeurcarte-6mm}
+        \begin{center}
+          #1
+        \end{center}
+      \end{minipage}};
+    \node[yshift=-0.5em-0.5\hauteurtitre] (B) at (A){};
+    \ifboolKV[Cards]{Titre}{\node[fill=white] at (B) {\useKV[Cards]{NomTitre}};}{},
+  }
+}
+
+\newtcolorbox{MyboxSimpleAr}[1]{%
+  enhanced,
+  nobeforeafter,
+  left=0pt,right=0pt,top=\hauteurtitre,bottom=0pt,
+  text fill,
+  width=\largeurcarte,
+  height=\hauteurcarte,
+  arc=5pt,
+  colback=white,
+  underlay={%
+    \ifboolKV[Cards]{BackgroundAr}{%
+    \begin{tcbclipinterior}
+      \node[anchor=center,opacity=1]
+      at (interior.center) {%
+        \includegraphics[%
+        height=\tcb@height,
+        width=\tcb@width,
+        ]{\useKV[Cards]{ImageAr}}};
+    \end{tcbclipinterior},
+  }{}
+  },
+  overlay unbroken and first={%
+    \coordinate[yshift=-0.5\hauteurtitre] (A) at (frame.north);
+    \node[rounded corners, draw=black, rectangle,minimum height=1cm,text width=\largeurcarte-6mm,fill=TrameCouleur] (T1) at
+    (A){\begin{minipage}{\largeurcarte-6mm}
+        \begin{center}
+          #1
+        \end{center}
+      \end{minipage}};
+    %\node[yshift=-1em] (B) at (A){};
+    %\ifboolKV[Cards]{Titre}{\node[fill=white] at (B) {\useKV[Cards]{NomTitre}};}{},
+  }
+}
+\makeatother
+
+\newlength{\largeurcards}
+\newlength{\hauteurcards}
+\newlength{\largeurcarte}
+\newlength{\hauteurcarte}
+\newlength{\hauteurtitre}
+\newlength{\largeurtitre}
+
+\newlength{\margeh}
+\newlength{\margev}
+
+\NewEnviron{Trame}{%
+  \begin{tikzpicture}[remember picture,overlay]
+    % quadrillages horizontal et vertical
+    \coordinate[yshift=-\margev] (A) at (current page.north west);
+    \coordinate[yshift=-\margev] (B) at (current page.north east);
+    \coordinate[yshift=-\hauteurcards] (A1) at (A);
+    \coordinate[yshift=-\hauteurcards] (B1) at (B);
+    \coordinate[yshift=-\hauteurcards] (A2) at (A1);
+    \coordinate[yshift=-\hauteurcards] (B2) at (B1);
+    \coordinate[yshift=-\hauteurcards] (A3) at (A2);
+    \coordinate[yshift=-\hauteurcards] (B3) at (B2);
+    \coordinate[yshift=-\hauteurcards] (A4) at (A3);
+    \coordinate[yshift=-\hauteurcards] (B4) at (B3);
+    \coordinate[xshift=\margeh] (C) at (current page.north west);
+    \coordinate[xshift=\margeh] (D) at (current page.south west);
+    \coordinate[xshift=\largeurcards] (C1) at (C);
+    \coordinate[xshift=\largeurcards] (D1) at (D);
+    \coordinate[xshift=\largeurcards] (C2) at (C1);
+    \coordinate[xshift=\largeurcards] (D2) at (D1);
+    \coordinate[xshift=\largeurcards] (C3) at (C2);
+    \coordinate[xshift=\largeurcards] (D3) at (D2);
+    \draw (A) -- (B);
+    \draw (A1) -- (B1);
+    \draw (A2) -- (B2);
+    \draw (A3) -- (B3);
+    \draw (A4) -- (B4);
+    \draw (C)--(D);
+    \draw (C1)--(D1);
+    \draw (C2)--(D2);
+    \draw (C3)--(D3);
+    % point pour placer les cartes
+    \coordinate[xshift=\margeh+0.5\largeurcards,yshift=-0.5\hauteurcards] (Carte1) at (A);
+    \coordinate[xshift=\largeurcards,yshift=0mm] (Carte2) at (Carte1);
+    \coordinate[xshift=2\largeurcards,yshift=0mm] (Carte3) at (Carte1);
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte4) at (Carte1);
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte5) at (Carte2);
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte6) at (Carte3);
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte7) at (Carte4);
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte8) at (Carte5);
+    \coordinate[xshift=0mm,yshift=-\hauteurcards] (Carte9) at (Carte6);
+    \BODY
+  \end{tikzpicture}
+}
+
+\setKVdefault[Cards]{Largeur=59,Hauteur=89,HauteurTheme=15,Marge=4,Landscape=false,Couleur=Cornsilk,Theme=Théorème\\de
+  Pythagore,ThemeSol=Solution,Trame=false,Titre=false,NomTitre=Jeu 1,Loop,BackgroundAv=false,BackgroundAr=false,ImageAv=4813762.jpg,ImageAr=4813762.jpg}
+
+\newcommand\Cartes[2][]{%
+  \useKVdefault[Cards]%
+  \setKV[Cards]{#1}%
+  \setsepchar[*]{§*/}%
+  \readlist*\ListeCards{#2}%
+  \ifboolKV[Cards]{Landscape}{%
+    \setlength{\hauteurcarte}{\fpeval{\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}}mm}%
+    \setlength{\largeurcarte}{\fpeval{\useKV[Cards]{Hauteur}-\useKV[Cards]{Marge}}mm}%
+    \setlength{\largeurcards}{95mm}%
+    \setlength{\hauteurcards}{65mm}%
+    \setlength{\margeh}{(297mm-3\largeurcards)/2}%
+    \setlength{\margev}{(210mm-3\hauteurcards)/2}%
+  }{
+    \setlength{\hauteurcarte}{\fpeval{\useKV[Cards]{Hauteur}-\useKV[Cards]{Marge}}mm}%
+    \setlength{\largeurcarte}{\fpeval{\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}}mm}%
+    \setlength{\largeurcards}{65mm}
+    \setlength{\hauteurcards}{95mm}
+    \setlength{\margeh}{(210mm-3\largeurcards)/2}
+    \setlength{\margev}{(297mm-3\hauteurcards)/2}
+  }
+  \setlength{\hauteurtitre}{\fpeval{\useKV[Cards]{HauteurTheme}}mm}%
+  \setlength{\largeurtitre}{\fpeval{(\useKV[Cards]{Largeur}-\useKV[Cards]{Marge}-9)/2}mm}%
+  \colorlet{TexteCouleur}{black}
+  \colorlet{TrameCouleur}{\useKV[Cards]{Couleur}}
+  \ifboolKV[Cards]{Loop}{%
+    \ifboolKV[Cards]{Trame}{%
+      \clearpage%
+      \thispagestyle{empty}%
+      \begin{Trame}
+        \multido{\i=1+1}{9}{%
+          \node at (Carte\i) {%
+            \begin{Mybox}{\ListeCards[\i,1]}{\useKV[Cards]{Theme}}{\ListeCards[\i,2]}%
+              \ListeCards[\i,3]%
+            \end{Mybox}%
+          };%
+        }%
+      \end{Trame}%
+      \clearpage%
+    }{%
+      \begin{Mybox}{\ListeCards[1,1]}{\useKV[Cards]{Theme}}{\ListeCards[1,2]}%
+        \ListeCards[1,3]%
+      \end{Mybox}%
+    }%
+  }{%
+    \ifboolKV[Cards]{Trame}{%
+      \clearpage%
+      \thispagestyle{empty}%
+      \begin{Trame}
+        \multido{\i=1+1}{9}{%
+          \node[] at (Carte\i) {%
+            \begin{MyboxSimpleAv}{\useKV[Cards]{Theme}}%
+              \ListeCards[\i,1]%
+            \end{MyboxSimpleAv}%
+          };%
+        }%
+      \end{Trame}%
+      \clearpage%
+      \thispagestyle{empty}%
+      \begin{Trame}
+        \multido{\i=1+1}{3}{%
+          \node at (Carte\i) {%
+            \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}%
+              \ListeCards[\fpeval{4-\i},2]%
+            \end{MyboxSimpleAr}%
+          };%
+        }%
+        \multido{\i=4+1}{3}{%
+          \node at (Carte\i) {%
+            \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}%
+              \ListeCards[\fpeval{10-\i},2]%
+            \end{MyboxSimpleAr}%
+          };%
+        }%
+        \multido{\i=7+1}{3}{%
+          \node at (Carte\i) {%
+            \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}%
+              \ListeCards[\fpeval{16-\i},2]%
+            \end{MyboxSimpleAr}%
+          };%
+        }%
+      \end{Trame}%
+      \clearpage%
+    }{%
+      \begin{MyboxSimpleAv}{\useKV[Cards]{Theme}}%
+        \ListeCards[1,1]%
+      \end{MyboxSimpleAv}
+      \begin{MyboxSimpleAr}{\useKV[Cards]{ThemeSol}}%
+        \ListeCards[1,2]%
+      \end{MyboxSimpleAr}
+    }%
+  }%
+}
+
+\newcommand\SolutionCarte[2]{%
+  \begin{center}
+    \bfseries#1
+  \end{center}
+  
+  #2
+}
+
+%%%
+% Tableur
+%%%
+\setKVdefault[Tableur]{Colonnes=4,Largeur=3,Formule={},Cellule=A1,Ligne=0,Colonne=0,PasL=1,PasC=1}
+
+%Basé sur un code de Christian Télléchéa.
+\makeatletter
+\newcount\cntlin
+\newcount\cntcol
+
+\newtoks\t@b
+\long\def\ifremain@lines#1\\#2\@nil{%
+	\csname @\ifx\@empty#2\@empty second\else first\fi oftwo\endcsname}
+\long\def\subst@eol#1\\#2\@nil{\addtot@b{#1\\\hline}%
+  	\ifremain@lines#2\\\@nil{\addtot@b&\subst@eol#2\@nil}{\addtot@b{#2\CodeAfter\xintifboolexpr{\useKV[Tableur]{Ligne}=0 || \useKV[Tableur]{Colonne}=0}{}{\tikz\draw[line width=2pt](row-\fpeval{\useKV[Tableur]{Ligne}+1}-|col-\fpeval{\useKV[Tableur]{Colonne}+1}) rectangle (row-\fpeval{\useKV[Tableur]{Ligne}+1+\useKV[Tableur]{PasL}}-|col-\fpeval{\useKV[Tableur]{Colonne}+1+\useKV[Tableur]{PasC}});}\end{NiceTabular}}}}
+\long\def\collectcp@body#1\end{\subst@eol#1\@nil\end}
+
+\newcommand\addtot@b[1]{\t@b\expandafter{\the\t@b#1}}
+\newcommand\edftot@b[1]{\edef\temp@{#1}\expandafter\addtot@b\expandafter{\temp@}}
+
+\newlength\LongInter
+\newlength\TotalInter
+
+\newenvironment{Tableur}[1][]{%
+  \useKVdefault[Tableur]%
+  \setKV[Tableur]{#1}%
+  \ttfamily%
+  \setlength{\LongInter}{\fpeval{(\useKV[Tableur]{Colonnes}-1)*\useKV[Tableur]{Largeur}-4}em+\fpeval{\useKV[Tableur]{Colonnes}*2-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}-3}\arrayrulewidth}
+  \newcolumntype X{>{\centering\arraybackslash}p{\useKV[Tableur]{Largeur}em}}%
+  \begin{tabular}{|p{\useKV[Tableur]{Largeur}em}|p{1em}|p{5em}|p{\LongInter}|}
+    \cline{1-2}\cline{4-4}%
+    \useKV[Tableur]{Cellule}&\centering\arraybackslash\scriptsize$\blacktriangledown$&$f_x$\hfill$\sum$~\scriptsize$\blacktriangledown$\hfill$=$&\useKV[Tableur]{Formule}\hfill\scriptsize$\blacktriangledown$\\
+    \cline{1-2}\cline{4-4}%
+  \end{tabular}
+  
+  \cntlin\z@
+  \t@b{%
+    \begin{NiceTabular}{%
+        |>{%
+          \columncolor{gray!15}
+      \global\cntcol\z@\global\advance\cntlin\@ne
+      \centering\arraybackslash
+      \ifnum\cntlin>\@ne\number\numexpr\cntlin-1\relax\fi}
+      p{2em}|*{\useKV[Tableur]{Colonnes}}{X|}}%
+      \hline
+      \rowcolor{gray!15}}%
+     \loop
+     \ifnum\cntcol<\useKV[Tableur]{Colonnes}
+     \advance\cntcol\@ne
+     \addtot@b{&}%
+     \edftot@b{{\noexpand\@Alph\the\cntcol}}%
+     \repeat
+     \addtot@b{\\\hline&}%
+    \collectcp@body}{\the\t@b}
+\makeatother
+
+%%%
+% Domino
+%%%
+\newtcolorbox{MyDominoMini}[1][]{%
+  enhanced,
+  nobeforeafter,
+  left skip=0pt,
+  right skip=0pt,
+  left=0pt,right=0pt,top=0pt,bottom=0pt,
+  width=\textwidth/\ColonneDomino,
+  height=\textheight/\LigneDomino,
+  segmentation style={solid, line width=1.5pt},
+  colback=\CouleurDomino,
+  center upper,
+  valign upper=center,
+  center lower,
+  valign lower=center,
+  arc=2pt,
+  #1
+}
+
+\newtcolorbox{MyDominoLogo}[1][]{%
+  enhanced,
+  nobeforeafter,
+  left skip=0pt,
+  right skip=0pt,
+  left=0pt,right=0pt,top=0pt,bottom=0pt,
+  width=\textwidth/\ColonneDomino,
+  height=\textheight/\LigneDomino,
+  valign=center,
+  halign=center,
+  arc=2pt,
+  colback=white,
+  #1
+}
+
+\NewEnviron{TrameDomino}{%
+  \setlength{\margev}{1cm}
+  \setlength{\margeh}{1cm}
+  \begin{tikzpicture}[remember picture,overlay]
+    % quadrillages horizontal et vertical
+    \coordinate[yshift=-\margev] (A0) at (current page.north west);
+    \coordinate[yshift=-\margev] (B0) at (current page.north east);
+    \foreach \i in {1,...,\useKV[Domino]{Lignes}}{%
+      \coordinate[yshift=-\i*\textheight/\LigneDomino] (A\i) at (A0);
+      \coordinate[yshift=-\i*\textheight/\LigneDomino] (B\i) at (B0);
+    }
+    \coordinate[xshift=\margeh] (C0) at (current page.north west);
+    \coordinate[xshift=\margeh] (D0) at (current page.south west);
+    \foreach \i in {1,...,\useKV[Domino]{Colonnes}}{
+      \coordinate[xshift=\i*\textwidth/\ColonneDomino] (C\i) at (C0);
+      \coordinate[xshift=\i*\textwidth/\ColonneDomino] (D\i) at (D0);
+    }
+    \foreach \i in {0,...,\LigneDomino}{%
+      \draw (A\i) -- (B\i);
+    }
+    \foreach \i in {0,...,\ColonneDomino}{%
+      \draw (C\i) -- (D\i);
+    }
+    \draw[blue, line width=3pt] (A0)--(B0);
+    \draw[blue, line width=3pt] (A\LigneDomino)--(B\LigneDomino);
+    \draw[blue, line width=3pt] (C0)--(D0);
+    \draw[blue, line width=3pt] (C\ColonneDomino)--(D\ColonneDomino);
+    % point pour placer les cartes
+    \foreach \i in {0,...,\fpeval{\ColonneDomino-1}}{%
+      \foreach \j in {0,...,\fpeval{\LigneDomino-1}}{%
+        \coordinate[xshift=\margeh+(0.5\textwidth/\ColonneDomino)+\i*\textwidth/\ColonneDomino,yshift=-0.5\textheight/\LigneDomino-\j*\textheight/\LigneDomino]
+        (Domino\fpeval{\i+\ColonneDomino*\j+1}) at (A0);
+      }
+    }
+    \BODY
+  \end{tikzpicture}
+}
+
+\setKVdefault[Domino]{Couleur=white,Trame,Ratio=0.5,Lignes=7,Colonnes=5,Superieur=false,Logo=false,Image=tiger.pdf}
+
+\newcommand\Dominos[2][]{%
+  \useKVdefault[Domino]%
+  \setKV[Domino]{#1}%
+  \setsepchar[*]{§*/}%
+  \readlist*\ListeDominos{#2}%
+  \xdef\CouleurDomino{\useKV[Domino]{Couleur}}%
+  \xdef\ratiodomino{\useKV[Domino]{Ratio}}%
+  \xdef\LigneDomino{\useKV[Domino]{Lignes}}%
+  \xdef\ColonneDomino{\useKV[Domino]{Colonnes}}%
+  \ifboolKV[Domino]{Trame}{%
+    \clearpage
+    \begin{TrameDomino}
+      \foreach\i in {1,...,\fpeval{\LigneDomino*\ColonneDomino}}{%
+        \node[] at (Domino\i){%
+          \ifboolKV[Domino]{Superieur}{%
+            \begin{MyDominoMini}[space=\ratiodomino]%
+              \ListeDominos[\i,1]\tcblower\ListeDominos[\i,2]%
+            \end{MyDominoMini}%
+          }{%
+            \begin{MyDominoMini}[sidebyside,sidebyside gap=4mm,righthand ratio=\ratiodomino]%
+              \ListeDominos[\i,1]\tcblower\ListeDominos[\i,2]%          
+            \end{MyDominoMini}%
+          }%
+        };
+      }%
+    \end{TrameDomino}%
+    \ifboolKV[Domino]{Logo}{%
+      \clearpage
+      \begin{TrameDomino}
+        \foreach\i in {1,...,\fpeval{\LigneDomino*\ColonneDomino}}{%
+          \node at (Domino\i){%
+            \begin{MyDominoLogo}%
+              \includegraphics[height=\tcbtextheight]{\useKV[Domino]{Image}}
+            \end{MyDominoLogo}%
+          };
+        }%
+      \end{TrameDomino}%
+    }{}%
+  }{%
+    \ifboolKV[Domino]{Superieur}{%
+      \begin{MyDominoMini}[space=\ratiodomino]%
+        \ListeDominos[1,1]\tcblower\ListeDominos[1,2]%
+      \end{MyDominoMini}%
+    }{%
+      \begin{MyDominoMini}[sidebyside,sidebyside gap=4mm,righthand ratio=\ratiodomino]%
+        \ListeDominos[1,1]\tcblower%
+        \ListeDominos[1,2]%          
+      \end{MyDominoMini}%
+    }%
+  }%
 }%
\ No newline at end of file
-- 
cgit v1.2.3

