Aller au contenu principal

L.Fractionner.Texte pour Excel 365 et 2021

Petite fonction du jour : comment séparer en ligne et en colonnes.
Sur Excel 365 Insider, ca se fait en une seule formule (fractionner.texte), mais en attendant, voici ce qui devrait faire l'affaire pour 365 (et 2021, je pense) :
Attention, il faut exactement le bon nombre de séparateur dans les données initiales (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 Lambda (pour plus d'informations sur la création de Lambda, c'est par ici), par exemple 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))))

9 commentaires

  1. bonjour,

    j'ai voulu m'inspirer de votre fonction ( sur office 2021 ) ...
    ma modification "fonctionne" sauf que le resultat
    s'affiche seulement sur une colonne ( cela ne decale pas sur d'autre colonne )
    et si la donnee dans la cellule a separer est NULLE ( cellule vierge ),
    les donnees ne sont pas décalées dans la bonne ligne ...

    bref j'ai toutes les données separées en resultat sur une seule et meme colonne, le resultat ne s'affiche pas sur la ligne voulu ...

    pourrait-on passer en parametre une cellule au lieu d'une plage ?

    =LET(plage;U2:U3133;DelimiteurL;"#";DelimiteurC;",";resultat1;FILTRE.XML(""&SUBSTITUE(JOINDRE.TEXTE(DelimiteurL;;plage);DelimiteurL;"")&"";"//a");
    INDEX(TRANSPOSE(FILTRE.XML(""&SUBSTITUE(JOINDRE.TEXTE(DelimiteurC;;resultat1);DelimiteurC;"")&"";"//a"));SEQUENCE(LIGNES(resultat1);NBCAR(INDEX(resultat1;1;1))-NBCAR(SUBSTITUE(INDEX(resultat1;1;1);DelimiteurC;))+1)))

  2. Pas le temps de tester aujourd'hui, mais vérifiez si le problème n'est pas lié au séparateur qui est un #.

  3. Ca fonctionne bien avec le #. Pourriez vous faire un exemple simple qui ne fonctionne pas ?
    Ma formule :
    =LET(
    plage;A1:A2;
    DelimiteurL;".";
    DelimiteurC;"#";
    resultat1;FILTRE.XML(""&SUBSTITUE(JOINDRE.TEXTE(DelimiteurL;;plage);DelimiteurL;"")&"";"//a");
    INDEX(TRANSPOSE(
    FILTRE.XML(""&SUBSTITUE(JOINDRE.TEXTE(DelimiteurC;;resultat1);DelimiteurC;"")&"";"//a")
    );
    SEQUENCE(LIGNES(resultat1);
    NBCAR(INDEX(resultat1;1;1))-NBCAR(
    SUBSTITUE(INDEX(resultat1;1;1);DelimiteurC;)
    )+1)))

  4. ah !
    j'avais mis ce separateur "#" pour le pas utiliser votre separateur "."
    car je veux separer des adresse mail qui comporte un "." evidament ....
    je vais essayer de remplacer # par ;

  5. je peut vous envoyer le fichier excel xlsx sous office 2021
    si vous voulez ... ce serait mon meilleur exemple !

    maintenant, il n'y a pas d'urgence pour moi ...
    vous regarderez ( ou pas ) quand vous pourrez

    d'avance merci

  6. Oui, si vous voulez. Cela m'intéresse et peut faire émerger de nouvelles idées.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.