Je pensais que xstring `xstring` pouvais le faire, vu la quantité de choses que peut faire cette extension.
Ayant compris (@touhami l'a confirmé) que cela n’était pas possible avec *xstring*, `xstring`, je suis passé par `\@ifnextchar`
\documentclass{article}
\makeatletter
\def\sitube#1{\@sitube#1\@nil}
\def\@sitube{%
\@ifnextchar|{\tube}{\notube}}
\def\tube#1#2\@nil{\textbf{#2}}
\def\notube#1\@nil{\emph{#1}}
\makeatother
\begin{document}
\sitube{|toto}
\sitube{toto}
\end{document}
J'ai pu ainsi résoudre mon problème.