Un retournement alternatif
Une autre formule pour le
retournement d’un nombre (cf. article précédent) a été proposée par un autre de
mes amis, Zoran Stanojević. Cette formule est plus complexe que celle de
Roberto modifiée par mes soins, mais elle illustre une autre façon de résoudre
le problème, même si – sur le fond – les concepts de base sont les mêmes.
Voici la formule magique,
elle aussi validée matriciellement :
=somme((stxt(A1;ligne(indirect("1:"&nbcar(A1)));1)&"0e"&ligne(indirect("1:"&nbcar(A1))))%)
Le bloc ligne(indirect("1:"&nbcar(A1)))
est évalué ici en {1;2;3;4;5;6;7;8;9;10}.
Le bloc stxt(A1;ligne(indirect("1:"&nbcar(A1)));1)
vaut alors {"5";"1";"4";"6";"6";"3";"6";"7";"0";"8"}
Avec &"0e"en plus, on
obtient : {"50e";"10e";"40e";"60e";"60e";"30e";"60e";"70e";"00e";"80e"}
Le bloc ligne(indirect("1:"&nbcar(A1)))
vaut {1;2;3;4;5;6;7;8;9;10}.
A la fin, le « % »
permet de tout diviser par 100 puisque l’on avait multiplié par 10 au départ
en ajoutant un « 0 » avant le « e », et qu’un autre facteur
10 était arrivé grâce à l’exponentiation. Et voilà ! Le tour est joué…
Une fois de plus, nous
constatons que les formules matricielles servent à jouer dans la feuille de
calcul le même rôle que les boucles dans les macros.
Une macro-fonction pour réaliser le retournement…
En fait, ce que nous avons
fait à l’aide de nos géniales formules matricielles pouvait être réalisé à
l’aide d’une macro-fonction dont le code est constitué d’une ligne unique,
comme nous pouvons le voir dans la copie d’écran. La formule de B7 est alors
tout simplement =retourne(A1).
Remarque – La fonction
StrReverse du VBA est à la base du verlan :)
On obtient dans ce cas un
résultat sous forme de texte, comme avec la formule de Roberto. Si l’on avait
voulu obtenir le même résultat que le mien ou celui de Zoran, il faudrait une
macro-fonction un peu plus longue…
1 Commentaire(s):
Bonjour, ma formule est moins élégante mais plus à ma portée. Je me contente de concatener le nombre en prenant d'abord le caractère en dernière position, recupéré avec LEN(A1)puis en avant dernière position avec LEN(A1)-1. J'ai fait ça 15 fois, qui limite aussi le retournement à des nombres de 15 positions. le IFERROR remplace la valeur par "rien" pour les nombres de longueur inférieur. Désolé mais mon Excel est en anglais:
=VALUE(IFERROR(MID(A1;LEN(A1);1);"")&IFERROR(MID(A1;LEN(A1)-1;1);"")&IFERROR(MID(A1;LEN(A1)-2;1);"")&IFERROR(MID(A1;LEN(A1)-3;1);"")&IFERROR(MID(A1;LEN(A1)-4;1);"")&IFERROR(MID(A1;LEN(A1)-5;1);"")&IFERROR(MID(A1;LEN(A1)-6;1);"")&IFERROR(MID(A1;LEN(A1)-7;1);"")&IFERROR(MID(A1;LEN(A1)-8;1);"")&IFERROR(MID(A1;LEN(A1)-9;1);"")&IFERROR(MID(A1;LEN(A1)-10;1);"")&IFERROR(MID(A1;LEN(A1)-11;1);"")&IFERROR(MID(A1;LEN(A1)-12;1);"")&IFERROR(MID(A1;LEN(A1)-13;1);"")&IFERROR(MID(A1;LEN(A1)-14;1);"")&IFERROR(MID(A1;LEN(A1)-15;1);"")).
Cordialement.
By
Jack Spyker, sur 4:36 AM
Enregistrer un commentaire
<< Accueil