IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Pierre Fauconnier

Excel 365: Pas de fonction PALINDROME? Pas grave, il y a JOINDRE.TEXTE

Noter ce billet
par , 08/02/2021 à 08h00 (1960 Affichages)
Salut.

Un palin quoi? un palindrome... C'est un mot ou une locution qui se lit de gauche à droite comme de droite à gauche:

Kayak, radar sont des palindromes. Rêver aussi, si on ne tient pas compte de l'accent.
Ésope reste ici et se repose est aussi un palindrome (si l'on supprime les espaces et que l'on ne tient pas compte des accents).

Avant XL365, lorsque l'on souhaitait, pour un besoin quelconque, retourner une chaine de caractères, on était bien embêté car il fallait passer par une fonction personnalisée en VBA, puisque le langage dispose d'une fonction StrReverse pour retourner une chaine de caractères.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Function Palindrome(Texte As String) As String
  Application.Volatile
  Palindrome = StrReverse(Texte)
End Function
Nom : 2021-02-05_101714.png
Affichages : 355
Taille : 3,5 Ko


Cela n'était que moyennement pratique car il fallait transférer la fonction perso dans chaque classeur qui en avait besoin et de plus, ça obligeait la sauvegarde en xlsm (classeur avec macro). Aucune solution formulée n'existait car la fonction CONCATENER n'acceptait pas les matrices, obligeant à énumérer les chaines de caractères à coller les unes aux autres.

XL365 arrive, et avec cette version débarque la fonction JOINDRE.TEXTE. J'en ai déjà parlé dans ce billet (créer une liste d'adresses mail) et dans celui-ci (créer des codes aléatoires). Débarquent en même temps les plages dynamiques (j'en parlerai dans un prochain billet) et la détection automatique du caractère matriciel de la formule.


Concaténation ou "assemblage de chaines de caractères"

Voici trois formules de concaténation pour le même résultat, car en plus de la fonction CONCATENER(), on pourrait utiliser l'opérateur de concaténation &. Perso, je préfère la première, et vous?

Nom : 2021-02-05_200556.png
Affichages : 333
Taille : 72,9 Ko

Nom : 2021-02-05_200640.png
Affichages : 311
Taille : 76,6 Ko

Nom : 2021-02-05_200732.png
Affichages : 342
Taille : 77,0 Ko


On comprend vite que JOINDRE.TEXTE peut travailler sans modification de la formule sur un tableau structuré qui grandirait avec le temps, ce qui était impossible avec CONCATENER ou &

Nom : 2021-02-05_201451.png
Affichages : 346
Taille : 9,6 Ko



Et mon palindrome, alors?

Pour retourner une chaine, on doit prendre le dernier caractère de la chaine, puis on lui colle l'avant-dernier, puis l'antépénultième et ainsi de suite jusqu'au premier caractère. L'idée est donc de tourner en boucle en remontant du dernier au premier caractère... En boucle? => Matricielle! Coller du texte en matricielle? => JOINDRE.TEXTE!! La "difficulté" réside à "dire" à la formule de remonter du dernier caractère au premier. Pour cela, on va utiliser NBCAR() qui renvoie le nombre de caractères d'un texte, ainsi que STXT() qui permet d'extraire une sous-chaine d'un texte.

Ici, on va d'abord voir comment "remonter" la chaine, en s'aidant de LIGNE() qui renvoie le numéro de la ligne d'une cellule. Je pense que le calcul est simple à comprendre. On peut alors assembler les lettres avec JOINDRE.TEXTE.

Nom : 2021-02-05_203633.png
Affichages : 315
Taille : 7,2 Ko


Il suffit alors d'assembler la matricielle pour obtenir la chaine retournée, mais comme on va devoir recomposer la plage avec une variable (la longueur du texte), on utilise INDIRECT: =JOINDRE.TEXTE("";VRAI;STXT(B1;NBCAR(B1)-LIGNE(INDIRECT("a1:a" & NBCAR(B1)))+1;1))

Nom : 2021-02-05_204155.png
Affichages : 314
Taille : 4,0 Ko

On peut alors tester qu'une chaine est égale à la chaine retournée, et donc voir si un mot est un palindrome:

Nom : 2021-02-05_204433.png
Affichages : 377
Taille : 9,3 Ko


Et à quoi ça sert? Ben... A voir comment on construit une formule, matricielle, notamment en utilisant une plage "fictive" avec INDIRECT dont la taille est basée sur le nombre de caractères de la chaine... Mais ça peut avoir un intérêt très pratique! Suite au prochain épisode, car ça peut nous rendre des services, de savoir retourner une chaine, notamment pour extraire le nom d'un fichier de son chemin d'accès complet...

Envoyer le billet « Excel 365: Pas de fonction PALINDROME? Pas grave, il y a JOINDRE.TEXTE » dans le blog Viadeo Envoyer le billet « Excel 365: Pas de fonction PALINDROME? Pas grave, il y a JOINDRE.TEXTE » dans le blog Twitter Envoyer le billet « Excel 365: Pas de fonction PALINDROME? Pas grave, il y a JOINDRE.TEXTE » dans le blog Google Envoyer le billet « Excel 365: Pas de fonction PALINDROME? Pas grave, il y a JOINDRE.TEXTE » dans le blog Facebook Envoyer le billet « Excel 365: Pas de fonction PALINDROME? Pas grave, il y a JOINDRE.TEXTE » dans le blog Digg Envoyer le billet « Excel 365: Pas de fonction PALINDROME? Pas grave, il y a JOINDRE.TEXTE » dans le blog Delicious Envoyer le billet « Excel 365: Pas de fonction PALINDROME? Pas grave, il y a JOINDRE.TEXTE » dans le blog MySpace Envoyer le billet « Excel 365: Pas de fonction PALINDROME? Pas grave, il y a JOINDRE.TEXTE » dans le blog Yahoo

Commentaires