%!TEX lualatex

\documentclass[a4paper,french]{article}
\usepackage[table,svgnames]{xcolor}
\usepackage{listofitems}
\usepackage{simplekv}
\usepackage{xinttools}
\usepackage{xfp}
\usepackage{tabularray}
%===============================mise en forme
\usepackage[margin=1.5cm]{geometry}
\setlength{\parindent}{0em}
\usepackage{codehigh}

%=========================tableau compétences
\defKV[tblcomp]{%
	liste=\def\COMPETliste{#1},%
	largeurs=\def\COMPETlargeurs{#1},%
	eval=\def\COMPETtitre{#1},%
	poltitre=\def\COMPETlegende{#1},%
	polcomp=\def\COMPETcomp{#1},%
	lignesep=\def\COMPETsep{#1}
}

\setKVdefault[tblcomp]{%
	liste={Compétence A § Compétence B § Compétence C § Compétence D § Compétence E},%
	largeurs={8.5cm § 0.5cm § 1.5cm},%comp + niv + note
	eval=DS01,%
	poltitre=\small\sffamily\bfseries,%
	polcomp=\small\sffamily,%
	lignesep=2pt,%
	centre=false
}

%pour créer le body du tableau (j'ai encore un peu de mal avec ça...)
\long\def\CPaddto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}

\newcommand\tblrcomp[1][]{%
	\useKVdefault[tblcomp]
	\setKV[tblcomp]{#1}% on paramètres les nouvelles clés et on les simplifie
	\setsepchar{§}
	\readlist*\ListeCompetences\COMPETliste
	\readlist*\ListeLargeurs\COMPETlargeurs
	%création du "body" grâce au compteur de lignes \rownum et boucle xintfor
	\def\CPtabledatacomp{}
	\xintFor* ##1 in {\xintSeq{1}{\ListeCompetenceslen}}\do{%
		\CPaddto\CPtabledatacomp{\ListeCompetences[\the\numexpr\therownum-1\relax] & & & & \\}%
		}
	%le tableau
	\ifboolKV[tblcomp]{centre}{\begin{center}}{}
	\begin{tblr}[expand=\CPtabledatacomp]%
		{%
			hlines,vlines,colspec={Q[l,m,\ListeLargeurs[1]]*{3}{Q[c,m,\ListeLargeurs[2]]}Q[c,m,\ListeLargeurs[3]]},%
			rowsep=\COMPETsep,%
			row{1}={font=\COMPETlegende,bg=lightgray!50},%
			row{2-Y}={font=\COMPETcomp},%
			row{Z}={font=\COMPETlegende,bg=white,fg=blue},%
			cell{2}{Z}={r=\the\numexpr\ListeCompetenceslen+1\relax}{},%
			cell{Z}{1}={c=4}{}
		}
		\COMPETtitre & NA & PA & A & Note \\
		\CPtabledatacomp
		NA : Non acquis  / PA : Partiellement acquis / A : Acquis & & & & \\
	\end{tblr}
	\ifboolKV[tblcomp]{centre}{\end{center}}{}
}

\newcommand\tblrcompbis[1][]{%
	\useKVdefault[tblcomp]
	\setKV[tblcomp]{#1}% on paramètres les nouvelles clés et on les simplifie
	\setsepchar{§}
	\readlist*\ListeCompetences\COMPETliste
	\readlist*\ListeLargeurs\COMPETlargeurs
	%création du "body" grâce au compteur de lignes \rownum et boucle xintfor
	\def\CPtabledatacomp{}
	\xintFor* ##1 in {\xintSeq{1}{\ListeCompetenceslen}}\do{%
		\CPaddto\CPtabledatacomp{\ListeCompetences[\the\numexpr\therownum-1\relax] & & & & \\}%
	}
	%le tableau
	%on trace les bordures := hlines,vlines
	%5 colonnes := 1ère (largeur n°1) + n°2/3/4/5 (largeur n°2)
	%1ère ligne := fond gris clair
	%dernière ligne := écriture bleue + fusion des 5 colonnes
	\ifboolKV[tblcomp]{centre}{\begin{center}}{}
		\begin{tblr}[expand=\CPtabledatacomp]%
			{%
				hlines,vlines,colspec={Q[l,m,\ListeLargeurs[1]]*{4}{Q[c,m,\ListeLargeurs[2]]}},%
				rowsep=\COMPETsep,%
				row{1}={font=\COMPETlegende,bg=lightgray!50},%
				row{2-Y}={font=\COMPETcomp},%
				row{Z}={font=\COMPETlegende,bg=white,fg=blue},%
				cell{Z}{1}={c=5}{}
			}
			\COMPETtitre & N1 & N2 & N3 & N4 \\
			\CPtabledatacomp
			N1 : Niv1 / N2 : Niv2 / N3 : Niv3 / N4 : Niv4 & & & & \\
		\end{tblr}
		\ifboolKV[tblcomp]{centre}{\end{center}}{}
}

\begin{document}

\part*{Tableau de compétences}

\begin{codehigh}[language=latex/latex2]
%rendu par défaut

\tblrcomp
\end{codehigh}

\tblrcomp

\medskip

\begin{codehigh}[language=latex/latex2]
%personnalisation des compétences, du titre et des largeurs

\tblrcomp[%
    eval={Classe - Évaluation 01},%
    liste={Je sais calculer § Je sais rédiger § Je sais représenter},%
    largeurs={6cm § 1cm § 2cm},%
    centre]
\end{codehigh}

\tblrcomp[eval={Classe - Évaluation 01},liste={Je sais calculer § Je sais rédiger § Je sais représenter},largeurs={6cm § 1cm § 2cm},centre]

\medskip

\begin{codehigh}[language=latex/latex2]
%rendu par défaut

\tblrcompbis
\end{codehigh}

\tblrcompbis

\end{document}