J'ai réussi à faire quasiment ce que j'avais en tête, seule petite contrainte : étaler le contenu de D2 dans un tableau.
Et on utilise 2 noms (1 pour le tableau et 1 pour une formule de MFC qui n'est pas acceptée si on la met directement dans la barre de formule de MFC), ce qui donne ;
On peut donc mettre à jour D2 (pas de limite au nombre de caractères) et le contenu de la colonne A sans devoir changer la formule.
En G2 on met ;
=SIERREUR(STXT(";"&$D$2&";";TROUVE("#";SUBSTITUE(";"&$D$2&";";";";"#";LIGNE(1:1)))+1;TROUVE("#";SUBSTITUE(";"&$D$2&";";";";"#";LIGNE(2:2)))-TROUVE("#";SUBSTITUE(";"&$D$2&";";";";"#";LIGNE(1:1)))-1);"")
On peut toujours mettre ce tableau sur une autre feuille.
Comme formule de MFC (nommée MFC_1, voir le Gestionnaire de noms) on a ;
=SOMMEPROD(NB.SI(DetaD2;STXT(Feuil1!$A1;LIGNE(INDIRECT("1:"&NBCAR(Feuil1!$A1)));1)))
Je me suis rendu compte qu'avec NB.SI on pouvait mettre une matrice comme critère mais pas comme plage.
Ce qui fait que DetaD2 est le nom de la plage (tableau en G) et la formule commençant par STXT est le critère créant une matrice allant chercher les caractères de chaque cellule en colonne A.
Pour appliquer la MFC on sélectionne les cellules de la colonne A et comme règle de MFC on met simplement ;
=MFC_1