`\multicolumn` est une commande LaTeX utilisée pour fusionner des colonnes
(plusieurs cases sur une même ligne). `\multicolumn` doit apparaitre comme le
premier élément dans l'ensemble des cases concernées, plus précisément elle doit
apparaitre immédiatement après `\\` ou `&`.
Dans l'ECM de la question, il n'y a rien avant `\multicolumn` avec `\tcell`,
alors que `\tcellbis` commence par une teste pour détecter la valeur de l'argument optionnel.
Voici une petit explication. Commençons par deux exemples :
**ECM** qui fonction
\documentclass{article}
\newcommand*{\tcell}[2]{%
\empty% <-----------------------------
\multicolumn{#1}{|c|}{\bfseries #2}}
\begin{document}
\begin{tabular}{|c|c|}
\hline
\tcell{1}{Titre1}&\tcell{1}{Titre2} \\
\hline
1 & 2 \\
\hline
3 & 4 \\
\hline
\end{tabular}
\end{document}
**ECM** qui ne fonction pas
\documentclass{article}
\newcommand*{\tcell}[2]{%
\relax% <-----------------------------
\multicolumn{#1}{|c|}{\bfseries #2}}
\begin{document}
\begin{tabular}{|c|c|}
\hline
\tcell{1}{Titre1}&\tcell{1}{Titre2} \\
\hline
1 & 2 \\
\hline
3 & 4 \\
\hline
\end{tabular}
\end{document}
**Pourquoi ?** `\empty` est une commande LaTeX qui se développe en rien
(donc il n' y a rien avant `\multicolumn`) alors que `\relax` est une commande (primitive)
non développable qui dit à TeX de ne rien faire. Avec `\relax` non développable
`\multicolumn` n'est pas la première chose dans la cellule.
**Addendum :**
<font color="red">! Misplaced \\omit.</font> est une erreur générée par TeX
le programme lui même, elle signifie que la commande `\omit` (la primitive à laquelle
`\multicolumn` fait appel) est mal placée.
**Solution**
Pour résoudre le problème il faut passer par LaTeX3 (extension [xparse](https://www.ctan.org/pkg/xparse))
utiliser les commandes de l'extension [xparse](https://www.ctan.org/pkg/xparse).
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[a4paper]{geometry}
\usepackage{babel}
\usepackage{xparse}
\newcommand{\tcellfont}{\bfseries}
\newcommand*{\tcell}[2]{\multicolumn{#1}{|c|}{\tcellfont #2}}
\NewExpandableDocumentCommand{\tcellbis}{O{1}m}{\multicolumn{#1}{|c|}{\tcellfont #2}}
\begin{document}
La première commande avec deux arguments fonctionne bien
\begin{table}[h]
\centering
\begin{tabular}{|c|c|}
\hline
\tcell{1}{Titre1}&\tcell{1}{Titre2} \\
\hline
1 & 2 \\
\hline
3 & 4 \\
\hline
\end{tabular}
\caption{essai1}
\end{table}
\begin{table}[h]
\centering
\begin{tabular}{|c|c|}
\hline
\tcellbis{Titre1}&\tcellbis{Titre2} \\
\hline
1 & 2 \\
\hline
3 & 4 \\
\hline
\end{tabular}
\caption{essai2}
\end{table}
\end{document}