Microsoft 365 Ajouter un "+" après chaque 03 caractère

saggigo

XLDnaute Occasionnel
Bonjour à tous,
Je sais, je sais, ma demande est bizarre, mais pour les besoin d'une plateforme non modifiable, je souhaite ajouter après chaque 03 caractères le caractère "+"
J'ai un tableau avec plusieurs ligne contenant des chaines de caractère collées, je souhaite ajouter après chaque 03 caractère un +:

C61D06D18M01M02M03M10M15M32M36M37M41M42M43M55M57M64N00N06N13P03P28P30P61P67P88S02S16

Ca va me donner:

C61+D06+D18+M01+M02+M03+M10+M15+M32+M36+M37+M41+M42+M43+M55+M57+M64+N00+N06+N13+P03+P28+P30+P61+P67+P88+S02+S16
et dans la ligne suivante:
B02H10M11Q02, j'aurais:
B02+H10+M11+Q02

Donc faudra que la formule détecte aussi le nombre de caractère qu'il y a dans une cellule.

Voila, Merci beaucoup d'avance et Mercie encore :)
 
Solution
Bonsoir à toutes & à tous,
bonsoir @saggigo
Avec XL2021 ou XL365
La cellule B2 contenant la chaîne à traiter, la formule :
VB:
=GAUCHE(SUBSTITUE(TABLEAU.EN.TEXTE(STXT(B2;SEQUENCE(NBCAR(B2)/3;;1;3);3)&"+";0);"; ";"");NBCAR(B2)/3*4-1)
renvoie la chaîne résultante.
B2C61D06D18M01M02M03M10M15M32M36M37M41M42M43M55M57M64N00N06N13P03P28P30P61P67P88S02S16
B3C61+D06+D18+M01+M02+M03+M10+M15+M32+M36+M37+M41+M42+M43+M55+M57+M64+N00+N06+N13+P03+P28+P30+P61+P67+P88+S02+S16

Voir le fichier joint
EDIT : Je suis arrivé un peu en retard sans avoir régénéré le fil, j'adore la solution de @Simply (il faut quand même que les triplets soient formés, comme dans l'exemple d'une lettre...

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous,
bonjour @saggigo , @sousou ,@Simply , @R@chid ,@mapomme ,@job75 ,@patricktoulon
(Je n'oublie personne ?)

Un peu piquer au vif par le résultat de ma proposition dans l'étude de @mapomme 🤔 J'ai poussé plus loin la réflexion ...

En tenant compte de la solution de @R@chid (qui permet de remplacer un GAUCHE(SUBSTITUE(TABLEAU.EN.TEXTE(... par un JOINDRE.TEXTE("+";; quand même bien plus concis !)
Voilà une formule qui respecte tous les cas listés par @mapomme :
Chaine à traiter en A1, Formule :
Enrichi (BBcode):
=SI(A1="";"";JOINDRE.TEXTE("+";VRAI;STXT(A1;SEQUENCE(NBCAR(A1)/3+(MOD(NBCAR(A1);3)>0)*3;;;3);3)))
ou pour placer les paramètres en tête de formule avec la fonction LET :
Enrichi (BBcode):
=LET(
Txt;A1;
Pas;3;
Sép;"+";
SI(Txt="";"";JOINDRE.TEXTE(Sép;VRAI;STXT(Txt;SEQUENCE(NBCAR(Txt)/Pas+(MOD(NBCAR(Txt);Pas)>0)*Pas;;;Pas);Pas))))

Voir le fichier joint
 

Pièces jointes

  • saggigo-Déconcaténer-comparaison.xlsm
    25.3 KB · Affichages: 4
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re
Oui @patricktoulon , on peut y mettre des calculs répétés dans la formule :
j'aurai pu écrire :
=LET(
Txt;A1;
NbC;NBCAR(Txt);
Pas;3;
Sép;"+";
SI(Txt="";"";JOINDRE.TEXTE(Sép;VRAI;STXT(Txt;SEQUENCE(NbC/Pas+(MOD(NbC;Pas)>0)*Pas;;;Pas);Pas))))
...
EDIT : Si tu ne veux pas payer une rente à MS, tu peux te procurer Office2021 pour pas trop cher
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine