C'est bien *ifthenelse* qui coince. Je n'utilise pas cette extension et je n'ai pas envie d'aller voir dans le code ce qui se passe. En remplaçant par un `\newif` de plainTeX la commande `\bareme` fonctionne.
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[tikz]{bclogo}
\newif\ifAB
\ABtrue
%\ABfalse
\newcommand{\bareme}[1]{%
\ifAB%
#1\ignorespaces%
\else%
\ignorespaces%
\fi}
\begin{document}
\part{Questions de cours}
Mon texte \bareme{toto } suite du texte
\begin{bclogo}[epBord=2,logo=\bcquestion,ombre=true,couleur=blue!10]{Question 1 Complétez la phrase \bareme{titi }
}
Texte du cadre \bareme{tata }
\end{bclogo}
\end{document}
J'ai **EDIT :** Suite aux commentaire du PO, je prospose une solution qui permet de pas tout compris au niveau devoir mettre d'espace dans le nom d'une macro (ce qui ne me parait pas être l'idéal). `\@bsphack` et `\@esphack` sont des « blancs », mais si c'est macros définies par LaTeX pour la gestion des espaces horizontales, je recommanderais l'extension *xspace*.gérer les espaces.
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[tikz]{bclogo}
\usepackage{xspace}
\newif\ifAB
\ABtrue
%\ABfalse
\makeatletter
\def\bareme#1{\@bsphack%
\ifAB%
#1\xspace%
\fi\@esphack%
}
\makeatother
\begin{document}
Texte du cadre et du texte\par
Texte du cadre \bareme{tata} et du texte \par
Texte du cadre \bareme{tata}et du texte \par
\end{document}