%%%
% PyraVoca
%%%
\newlength{\PfCPyraVocaHauteur}

\setKVdefault[PyraVoca]{Solution=false,Largeur=15pt}

\NewDocumentCommand\PyraVoca{o m}{%
  \useKVdefault[PyraVoca]%
  \setKV[PyraVoca]{#1}%
  \setsepchar[*]{,*/}\ignoreemptyitems%
  \readlist*\PfCListePyraVoca{#2}%
  \reademptyitems%
  \StrLen{\PfCListePyraVoca[1,2]}[\Toto]%
  \xdef\PfCFooNombreCases{\Toto}%
  \xintFor* ##1 in{\xintSeq{2}{\PfCListePyraVocalen}}\do{%
    \StrLen{\PfCListePyraVoca[##1,2]}[\Toto]%
    \xdef\PfCFooNombreCases{\PfCFooNombreCases,\Toto}%
  }%
  \xdef\PfCNombreMaxCases{\fpeval{max(\PfCFooNombreCases)}}%
  \setlength{\PfCPyraVocaHauteur}{\useKV[PyraVoca]{Largeur}+\tabcolsep}%
  \begin{NiceTabular}{l*{\PfCNombreMaxCases}{m{\useKV[PyraVoca]{Largeur}}}}%
    \xintFor* ##1 in{\xintSeq{1}{\PfCListePyraVocalen}}\do{%
      \StrLen{\PfCListePyraVoca[##1,2]}[\Toto]%
      \rule{0pt}{\PfCPyraVocaHauteur}\Block[draw,v-center,fill=\xintifboolexpr{\listlen\PfCListePyraVoca[##1]==3}{\PfCListePyraVoca[##1,3]}{white}]{1-1}{\PfCListePyraVoca[##1,1]}\xintFor* ##2 in{\xintSeq{1}{\Toto}}\do{&\Block[draw,v-center,fill=\xintifboolexpr{\listlen\PfCListePyraVoca[##1]==3}{\PfCListePyraVoca[##1,3]}{white}]{}{\ifboolKV[PyraVoca]{Solution}{\StrChar{\PfCListePyraVoca[##1,2]}{##2}}{}}}\\
    }%
  \end{NiceTabular}%
}%