Formule pour trier les lettres d'un mot

Tibo

XLDnaute Barbatruc
Bonjour à tous,

Je suis à la recherche d'une formule pour trier les lettres d'un mot.

J'ai adopté et adapté une formule de notre Déesse Monique (ainsi que l'a récemment baptisée Chris) basée sur LIGNE(INDIRECT(1&':'&....

Cette formule semble donner des résultats plutôt intéressants, mais je n'arrive pas à conclure.

J'obtiens une liste matricielle des lettres triées, mais je n'arrive pas à la transformer en 'vraie' chaîne.

Voir exemple joint.

J'ai l'impression que la solution n'est pas très loin, mais je suis encore assez loin de maîtriser les formules matricielles.

Merci d'avance pour la solution.
[file name=_tri_lettres_mot.zip size=2477]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/_tri_lettres_mot.zip[/file]
 

Pièces jointes

  • _tri_lettres_mot.zip
    2.4 KB · Affichages: 76

Gael

XLDnaute Barbatruc
Bonjour Tibo, bonjour à tous,

Merci tout d'abord d'avoir fait cet essai.

Quand j'ai copié la formule, je ne sais pas pourquoi mais un espace s'est glissé entre le 2ème NBCAR et (23) ce qui cause l'erreur.

La formule est bien sûr à saisir sous forme matricielle et il faut enlever les accolades manuelles.

Je t'envoie un fichier exemple ou les 2 formules marchent.

@+

Gael

PS: ATTENTION, ton 500ème arrive.... [file name=Lettres_inverses.zip size=1746]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Lettres_inverses.zip[/file]
 

Pièces jointes

  • Lettres_inverses.zip
    1.7 KB · Affichages: 60

Tibo

XLDnaute Barbatruc
Merci Gael,

Effectivement, ça simplifie beaucoup de choses.

A condition de prendre un peu de temps pour maîtriser ces nouvelles fonctions.


Il reste un petit point (qui ne concerne pas ta formule) que j'avais exposé dans un post un peu plus haut.

Pourquoi je parviens à exploiter la chaîne matricielle générée par ma formule dans le cadre d'une formule nommée et que je n'y parviens pas en direct dans Excel ?

Est-ce un mystère Excel ?

@+
 

Gael

XLDnaute Barbatruc
Bonsoir Tibo, bonsoir à tous,

Suite à ta dernière question, je me suis repenché sur ton exemple mais chez moi, cela ne pose pas de problème, dans le fichier joint, j'ai les matrices résultatntes identiques par la formule ou le nom Zmot.

Pour la simplification de la formule, tu peux bien sûr utiliser MCONCAT de Morefun. Je réponds en même temps sur la maîtrise des nouvelles fonctions en précisant que sur chaque fonction, il y a une aide très bien faite (en choisissant aide sur la fonction sélectionnée) avec lorsque c'est possible, la formule correspondante avec les fonctions standards XL.

Sinon, la seule solution que j'ai trouvée pour simplifier est de nommer les formules de 4 à 15 caractères.

izm4: =INDEX(zmot;1)&INDEX(zmot;2)&INDEX(zmot;3)&INDEX(zmot;4)
izm5: =izm4&INDEX(zmot;5)
izm6: =izm5&INDEX(zmot;6)
et ainsi de suite sauf pour les dernières (13,14 et 15) qui partent de izm10 car je pense que la récursivité est limitée sur XL et cela ne marche plus en faisant:
izm13: =izm12&INDEX(zmot;13)

Pour appeler ces formules, j'ai utilisé CHOISIR:

=CHOISIR(NBCAR(mot);'izm1';'izm2';'izm3';izm4;izm5;izm6;izm7;izm8;izm9;izm10;izm11;izm12;izm13;izm14;izm15)

Qui lance la fonction selon le nombre de caractères.

J'ai essayé avec Indirect mais ça ne marche pas.

Dis-moi ce que tu en penses.

@+

Gael
[file name=_tri_lettres_motv3.zip size=2947]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/_tri_lettres_motv3.zip[/file]


J'ai oublié de préciser que j'ai supprimé dans les formules nommées le test d'erreur qui devient inutile puisque l'on appelle le nombre exact de lettres.

Gael

Message édité par: Gael, à: 18/08/2005 23:16
 

Pièces jointes

  • _tri_lettres_motv3.zip
    2.9 KB · Affichages: 62

Tibo

XLDnaute Barbatruc
Salut Gael, le Forum,

Je viens de voir ta réponse.

Tu recopies la formule matricielle x fois vers le bas, ce qui te donne effectivement la décomposition.

Ma démarche était également de réussir ce tri avec le minimum de formules. Dans mon exemple, j'ai une formule nommée et une formule classique.


Ma question était plutôt pourquoi j'arrive à exploiter avec la fonction INDEX la chaîne matricielle donnée par cette formule :

=CAR(PETITE.VALEUR(CODE(STXT(mot;LIGNE(INDIRECT(1&':'&NBCAR(mot)));1));LIGNE(INDIRECT(1&':'&NBCAR(mot)))))

seulement lorsque la formule est nommée.

Exemple :

=INDEX(zmot;5) fonctionne

tandis que :

=INDEX(B7;5) ne fonctionne pas (en formule simple ou en formule matricielle) : j'obtiens #REF! à chaque fois.

Mais l'essentiel est d'avoir plusieurs réponses qui fonctionnent bien.

Bonne journée à tous


P.S. :

Info météo Maubeuge : pluie :(
 
G

Gael

Guest
Bonjour Tibo, Le Forum,

Pour moi, en B7, tu ne récupère que la première donnée de la matrice, donc une seule lettre alors qu'en exécutant Zmot, la formule construit la matrice entière en mémoire.

Si tu fais INDEX(B7;1), ça marche mais à partir de 2, on obtient #REF.

Si tu utilises le résultat complet de la formule dans une matrice, ça marche aussi: INDEX(E9:E18;5) donne un résultat correct.

Ce n'est peut-être pas très clair, mais en fait dans les 2 cas (Formule ou Zmot) les matrices sont constituées en mémoire et utilisables mais en B7 tu finalises le calcul en ne gardant qu'un résultat partiel (1 valeur de la matrice) alors qu'avec Zmot, tu fais une recherche sur la matrice complète en mémoire.

Par contre si en B7, tu mets =INDEX(CAR.....);5), le résultat sera correct car tu vas utiliser la matrice en mémoire et mettre en B7 le résultat soit la 5ème lettre.

Maintenant que je me relis, ça me paraît un peu fouillis et pas très précis, mais je pense que c'est à peu près ça.

Tu m'as permis de tester aussi la limite des imbrications de formules que je ne connaissais pas. J'ai parlé à tort de récursivité dans mon post précédent, il s'agit bien de procédures imbriquées, la récursivité étant utilisée lorsqu'une procédure s'appelle elle-même ce qui n'est pas le cas ici.

Je retourne sur le forum pour voir si tu as bien envoyé ton 500ème, le mien ne va plus tarder maintenant.

@+

Gael
 

Statistiques des forums

Discussions
312 321
Messages
2 087 264
Membres
103 500
dernier inscrit
Suk Ram