Salut à tous
J'avais bien trouvé une solution tout en formules nommées (quoique je ne pense pas que ce soit une bonne solution parce que ça ne marche que sur une seule cellule de référence), mais au delà de 12 caractères extraits, je plantais systématiquement Excel qui semblait tourner en boucle. J'ai bien dû user du Ctrl-Alt-Suppr plus de 20 fois, et ça m'a incité à abandonner cette solution.
Edition : en relisant les différents posts, je vois que Jean-Marie avait donné une solution équivalente à la mienne, à base de CHOISIR, mais je confirme que ça plante au delà de 10/12 arguments. Ensuite j'ai modifié ma formule avec une suite de :
SI(Col=1;SubTi0;'') & SI(Col=2;SubTi1;'') & etc... mais ça induit le même plantage qu'avec CHOISIR.
C'est pourquoi André, je te propose cette petite fonction personnalisée qui fera ça somme toute beaucoup plus rapidement qu'une formule nommée (une fois n'est pas coutume !)
Function CarSansDoublon(ByVal Mot$, ByVal Index%) 'Ti
Dim Bcle%
Application.Volatile
For Bcle = 1 To Index - 1
Mot = Replace(Mot, Left$(Mot, 1), '')
Next Bcle
CarSansDoublon = Left$(Mot, 1)
End Function
à copier dans un module.
Ensuite, dans une cellule Excel, on l'appelle ainsi
=carsansdoublon($A$1;COLONNES($A$1:A1))
et tu peux étirer sur autant de colonnes que tu veux...
Evidemment, il est possible de faire ça sans VBA ni formule nommée, mais dans ce cas, personnellement je passerais simplement par une ligne intermédiaire :
en A1 le mot à décomposer
en B1 on met =SUBSTITUE(A1;GAUCHE(A1;1);'')
et on tire sur autant de colonnes que nécessaire.
Puis en A2, on met =GAUCHE(A1;1), qu'on étire sur les colonnes suivantes.
Mon principe étant que, dans Excel, passer par une ligne supplémentaire permet souvent d'accélérer grandement les calculs en s'affranchissant de formules matricielles justement dispendieuses en temps de calcul.
**********
Sinon, pour en revenir à la fonction Eval, on peut aussi l'écrire simplement en VBA, sans avoir à installer toute une macro complémentaire :
Function Eval(formule$)
Eval = Evaluate(formule)
End Function