Monsieur Excel
Pour tout savoir faire sur Excel !

08 janvier 2013

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 Blogger Jack Spyker, sur 4:36 AM  

Enregistrer un commentaire

<< Accueil