L.Fractionner.Texte pour Excel 365 et 2021

Petite fonc­tion du jour : com­ment sépar­er en ligne et en colonnes.
Sur Excel 365 Insid­er, ca se fait en une seule for­mule (fractionner.texte), mais en atten­dant, voici ce qui devrait faire l’af­faire pour 365 (et 2021, je pense) :
Atten­tion, il faut exacte­ment le bon nom­bre de sépara­teur dans les don­nées ini­tiales (voir copie d’écran)

=LET(
plage;A1:A3;
DelimiteurL;".";
DelimiteurC;",";
resultat1;FILTRE.XML("<b><a>"&SUBSTITUE(JOINDRE.TEXTE(DelimiteurL;;plage);DelimiteurL;"</a><a>")&"</a></b>";"//a");
INDEX(TRANSPOSE(
FILTRE.XML("<b><a>"&SUBSTITUE(JOINDRE.TEXTE(DelimiteurC;;resultat1);DelimiteurC;"</a><a>")&"</a></b>";"//a")
);
SEQUENCE(LIGNES(resultat1);
NBCAR(INDEX(resultat1;1;1))-NBCAR(
SUBSTITUE(INDEX(resultat1;1;1);DelimiteurC;)
)+1)))

et avec une Lamb­da (pour plus d’in­for­ma­tions sur la créa­tion de Lamb­da, c’est par ici), par exem­ple L.FRACTIONNER.TEXTE :

=LAMBDA(plage;DelimiteurC;DelimiteurL; LET(resultat1;FILTRE.XML("<b><a>"&SUBSTITUE(JOINDRE.TEXTE(DelimiteurL;;plage);DelimiteurL;"</a><a>")&"</a></b>";"//a"); INDEX(TRANSPOSE( FILTRE.XML("<b><a>"&SUBSTITUE(JOINDRE.TEXTE(DelimiteurC;;resultat1);DelimiteurC;"</a><a>")&"</a></b>";"//a") ); SEQUENCE(LIGNES(resultat1); NBCAR(INDEX(resultat1;1;1))-NBCAR( SUBSTITUE(INDEX(resultat1;1;1);DelimiteurC;) )+1))))

Un peu de VBA

En VBA, com­ment invers­er deux textes séparés par un caractère?

Il y a pleins d’autres solu­tions, mais j’aime bien celle-là d’un point de vue pédagogique.

Soit un texte du style R21_TOTO

On veut le trans­former en TOTO_R21 par VBA

On peut donc faire l’opéra­tion suivante

Sub InverserTexte()
    Dim sTexte As String
    sTexte = "R21_TOTO"

    sTexte = Split(sTexte, "_")(1) & "_" & Split(sTexte, "_")(0)

    MsgBox sTexte
End Sub

L’idée est de scinder (split) le texte en un tableau, puis de repren­dre l’élé­ment 1 du tableau et de le con­catén­er avec l’élé­ment 0 du tableau. 

Protéger la cellule après saisie

Voici un développe­ment com­plé­men­taire par rap­port à un post de 2016 🙂

L’idée est d’a­jouter un code qui per­met de ver­rouiller une cel­lule après saisie, mais aus­si d’a­jouter un paramètre qui per­met de dés­ac­tiv­er le ver­rouil­lage pour mod­i­fi­er le classeur. 

Voici le fichier:

Note : j’ai aus­si ajouté (en plus de la vidéo), la dé-pro­tec­tion de la feuille lorsqu’on clique sur le bou­ton de déverrouillage.

Et la vidéo