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
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 et de 2 chiffres) !
 

Pièces jointes

  • Ajouter un plus après chaque 03 caractère.xlsx
    10.8 KB · Affichages: 4
Dernière édition:

saggigo

XLDnaute Occasionnel
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 et de 2 chiffres) !
Parfait, Merci beaucoup. c'est génial
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous :),

Juste pour le fun, j'ai essayé de comparer les différentes formules (3) et fonctions personnalisées (2) avec différents textes sources.
Il fallait choisir une référence => j'ai pris ma propre fonction personnalisée 😜 (tant qu'à faire).
Chaque auteur devra vérifier sa formule ou fonction pour voir si je n'ai pas commis d'erreur en les utilisant. Les cellules roses sont celles avec un résultat différent de celui de ma pomme.

nota : évidemment toutes les solutions fonctionnent pour le seul exemple fourni par @saggigo .
 

saggigo

XLDnaute Occasionnel
Bonjour à tous :),

Juste pour le fun, j'ai essayé de comparer les différentes formules (3) et fonctions personnalisées (2) avec différents textes sources.
Il fallait choisir une référence => j'ai pris ma propre fonction personnalisée 😜 (tant qu'à faire).
Chaque auteur devra vérifier sa formule ou fonction pour voir si je n'ai pas commis d'erreur en les utilisant. Les cellules roses sont celles avec un résultat différent de celui de ma pomme.

nota : évidemment toutes les solutions fonctionnent pour le seul exemple fourni par @saggigo .
Merci beaucoup Mapomme, je vais la tester, je n'ai pas vérifié en detail celle que j'ai utilisé plus haut ( j'ai plus de 25000 lignes) mais elle avait l'air de fonctionner. Je vais donc tester la tienne ☺️
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @saggigo :) ,
Je vais donc tester la tienne
oui mais :
  • je ne suis une référence
  • toutes les formules ou fonctions personnalisées fonctionnent pour ton exemple
L'important c'est d'arriver au résultat que toi tu désires. L'avantage d'une formule est qu'elle est utilisable sur toutes les plateformes y.c. pour les organisations qui "bloquent" le VBA pour raison de sécurité.
En ce moment, on est dans une situation bâtarde : Krosoft veut imposer son O365 à marche forcée (les abonnements c'est bien car ce sont des revenus récurrents, prévisibles et souvent durables). Les fonctions spécifiques à O365 sont puissantes👍 mais ne sont pas rétro-compatibles et le parc d'excel comprend encore beaucoup d'autres versions antérieures à O365 :(.
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour le forum,

Il faudrait comparer les durées des calculs (en rendant les formules volatiles).

Etant sur Excel 2019 Je n'ai pu comparer que sousou et mapomme.

Sur le seul exemple du post #1 :

- sousou 0,25 millième de seconde

- mapomme 0,25 millième de seconde.

Edit : revu les durées avec de nouveaux essais.

A+
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour
je veux faire joujou moi aussi
le genre de petite fonction perso qui tient en une seule ligne
VB:
Function Sequence_Texte2007(t$, separator$, Optional Nieme As Long = 1)
Sequence_Texte2007 = Format(t, Application.Rept("@@@" & separator, Len(t) / Nieme))
End Function

=Sequence_Texte2007(A1,"+",3)
 

saggigo

XLDnaute Occasionnel
Bonjour @saggigo :) ,

oui mais :
  • je ne suis une référence
  • toutes les formules ou fonctions personnalisées fonctionnent pour ton exemple
L'important c'est d'arriver au résultat que toi tu désires. L'avantage d'une formule est qu'elle est utilisable sur toutes les plateformes y.c. pour les organisations qui "bloquent" le VBA pour raison de sécurité.
En ce moment, on est dans une situation bâtarde : Krosoft veut imposer son O365 à marche forcée (les abonnements c'est bien car ce sont des revenus récurrents, prévisibles et souvent durables). Les fonctions spécifiques à O365 sont puissantes👍 mais ne sont pas rétro-compatibles et le parc d'excel comprend encore beaucoup d'autres versions d'O365 :(.
Salut mapomme,
J'ai testé ta formule et il y a un message d'erreur (voir image) sur la partie: [@txt]
 

Pièces jointes

  • 2023-03-04 11_45_27-PREPARE_PMI UPLOAD.xlsm - Excel.png
    2023-03-04 11_45_27-PREPARE_PMI UPLOAD.xlsm - Excel.png
    7.3 KB · Affichages: 10

saggigo

XLDnaute Occasionnel
bonjour
je veux faire joujou moi aussi
le genre de petite fonction perso qui tient en une seule ligne
VB:
Function Sequence_Texte2007(t$, separator$, Optional Nieme As Long = 1)
Sequence_Texte2007 = Format(t, Application.Rept("@@@" & separator, Len(t) / Nieme))
End Function

=Sequence_Texte2007(A1,"+",3)
Bonjour Patricktoulon,
J'ai testé la fonction et j'ai un message d'erreur qui me demande si c'est une formule... desolé
 

patricktoulon

XLDnaute Barbatruc
??????????????????????:oops:
🤔
demo.gif
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @saggigo,

J'ai testé ta formule et il y a un message d'erreur (voir image) sur la partie: [@txt]

L'exemple que j'ai fourni utilise un tableau structuré. Il a bien fallu "inventer" puisqu'aucun fichier exemple n'avait été fourni ;).

Je suppose que vous travaillez sur des plages ordinaires. Dans ce cas, si le texte est en A1, la formule est :
=insertion(A1;3;"+")

Voir la feuille "Plage" du fichier joint.

Bonjour @patricktoulon :) ,

Bien, Monsieur Patrick Toulon est prié de venir dans le bac à sable pour aller jouer avec ses petits camarades quand on y est tous et pas des heures plus tard. Je sais que le petit patrick s'est arrêté auprès du marchand de calendrier qui vend aussi des pommes (Apple en anglais, non ?) : le gourmand 🗓️
Maintenant je suis obligé d'interrompre l'érection de mon magnifique pâté de sable pour mettre à jour mon fichier avec sa nouvelle fonction. ;)
 

Pièces jointes

  • saggigo-Déconcaténer-comparaison v1a.xlsm
    26.2 KB · Affichages: 6
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel