Séparer chaine de caractere par des espaces
Résolu
greg_in_motion
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je rencontre un problème dans mon boulot. En effet, je travail sur liste de référence à plusieurs caractères dans une même colonnes. Il y a environ 6000 lignes.
J'aimerai séparer par des espaces les références, par exemple : 62301S57212000 =>
62301 S572 12000
Avez vous une idée ?
Merci beaucoup d'avance.
Je rencontre un problème dans mon boulot. En effet, je travail sur liste de référence à plusieurs caractères dans une même colonnes. Il y a environ 6000 lignes.
J'aimerai séparer par des espaces les références, par exemple : 62301S57212000 =>
62301 S572 12000
Avez vous une idée ?
Merci beaucoup d'avance.
A voir également:
- Excel séparer chaîne de caractère espace
- Espace insécable - Guide
- Caractère ascii - Guide
- Espace de stockage gmail plein - Guide
- Caractère spéciaux - Guide
- Liste déroulante excel - Guide
13 réponses
Bonjour
Je t'apportais une solution, mais un modérateur- balladur13- a jugé que mon coup de gueule était "hors de propos"...
Dans ces conditions, j'abandonne définitivement le suivi, vois avec ce modérateur qui devrait résoudre facilement le problème puisque le flou - que tu as reconnu être- ne semblait pas lui poser un problème pour résoudre le tien... Ce sera d'ailleurs la première fois que je le verrai solutionner un problème Excel.
Sincèrement désolé
Michel
Je t'apportais une solution, mais un modérateur- balladur13- a jugé que mon coup de gueule était "hors de propos"...
Dans ces conditions, j'abandonne définitivement le suivi, vois avec ce modérateur qui devrait résoudre facilement le problème puisque le flou - que tu as reconnu être- ne semblait pas lui poser un problème pour résoudre le tien... Ce sera d'ailleurs la première fois que je le verrai solutionner un problème Excel.
Sincèrement désolé
Michel
Bonjour,
est ce toujours du m^me type:
5 chiffres -espace -lettre"S" plus 3 chiffres -espace- 5 chiffres ?
est ce toujours du m^me type:
5 chiffres -espace -lettre"S" plus 3 chiffres -espace- 5 chiffres ?
Non, il y a des fois des références avec :
62301 Z01 S572 12000
Ca doit compliquer un peu le truc je suppose... :(
62301 Z01 S572 12000
Ca doit compliquer un peu le truc je suppose... :(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
re,
valable si dernier bloc = 5 chiffres... si autre possibilité je rectifierai
valable si dernier bloc = 5 chiffres... si autre possibilité je rectifierai
Const col As String * 1 = "A" 'colonne des references Const lig As Byte = 1 'ligne de départ des reférences Sub modifier_ref() Dim valeur As String derlig = Cells(Cells.Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating For cptr = 1 To derlig Cells(cptr, col) = espacer(Cells(cptr, col)) Next End Sub Function espacer(texto As String) As String Dim reg As Object Dim extraction As Object 'recherche les lettres dans la cellule Set reg = CreateObject("vbscript.regexp") reg.Global = True reg.Pattern = "(\D)" Set extraction = reg.Execute(texto) For Each digit In extraction lettres = lettres & (digit.Value) Next digit 'met les espaces Start = 1 For cptr = 1 To Len(lettres) lettre = Mid(lettres, cptr, 1) pos = Application.Search(lettre, texto) espacer = espacer & " " & Mid(texto, Start, pos - Start) Start = pos Next espacer = LTrim(espacer & " " & Mid(texto, pos, Len(texto) - 5 - pos) & " " & Right(texto, 5)) End Function
Ca me fait, "erreur de compilation"... Désolé, je ne suis pas très doué sur VBA...
Merci en tout cas.
Merci en tout cas.
Re,
comme j'étais pressé.... :-(
macro corrigée, excuses moi (la fonction est OK)
ci joint maquette
https://www.cjoint.com/?AEyq0UFxwvA
comme j'étais pressé.... :-(
macro corrigée, excuses moi (la fonction est OK)
Sub modifier_ref() derlig = Cells(Cells.Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False For cptr = lig To derlig Cells(cptr, col) = espacer(Cells(cptr, col)) Next End Sub
ci joint maquette
https://www.cjoint.com/?AEyq0UFxwvA
Merci beaucoup pour la maquette.
Cependant, ca pose problème...
Dans ma liste, j'ai des références :
12345Z12S12345678
12345S12345678
Il me faudrait des espaces comme ça :
12345 Z12 S123 45678
12345 S123 45678
C'est faisable ?
Merci d'avance et désolé d'être pénible... :(
Cependant, ca pose problème...
Dans ma liste, j'ai des références :
12345Z12S12345678
12345S12345678
Il me faudrait des espaces comme ça :
12345 Z12 S123 45678
12345 S123 45678
C'est faisable ?
Merci d'avance et désolé d'être pénible... :(
j'vas finir par devenir chèvre avec les histoires de +1 ou -1...
Function espacer(texto As String) As String Dim reg As Object Dim extraction As Object Set reg = CreateObject("vbscript.regexp") reg.Global = True reg.Pattern = "(\D)" Set extraction = reg.Execute(texto) For Each digit In extraction lettres = lettres & (digit.Value) Next digit Start = 1 For cptr = 1 To Len(lettres) lettre = Mid(lettres, cptr, 1) pos = Application.Search(lettre, texto) espacer = espacer & " " & Mid(texto, Start, pos - Start) Start = pos Next espacer = espacer & " " & Mid(texto, pos, Len(texto) - 4 - pos) & " " & Right(texto, 5) End Function
Oui, mais là je ne peux rien pour toi
et pourtant lien N° 5, je précisais
valable si dernier bloc = 5 chiffres
Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup « non vous n'avez pas compris mon problème (rarement, je n'ai pas bien expliqué) il faut en plus que, etc.... »
bref j'ai perdu mon temps avec Toi :-(((
Ciao
et pourtant lien N° 5, je précisais
valable si dernier bloc = 5 chiffres
Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup « non vous n'avez pas compris mon problème (rarement, je n'ai pas bien expliqué) il faut en plus que, etc.... »
bref j'ai perdu mon temps avec Toi :-(((
Ciao
Bonjour,
Juste au passage, principe :
.-premier bloc jusqu'à la première lettre (non comprise)
.-deuxième bloc la première lettre plus les chiffres suivant jusqu'à la première lettre (non comprise)
.- si une deuxième lettre on a un troisième bloc comme sous deuxième
.- pour terminer le dernier bloc est formé des 5 derniers chiffres
62301S57212000 -? 62301 S572 12000
12345Z1245S12345678 ? 12345 Z1245 S123 45678
12345S12345678 ? 1345 S123 45678
Est-ce bien comme cela ?
Juste au passage, principe :
.-premier bloc jusqu'à la première lettre (non comprise)
.-deuxième bloc la première lettre plus les chiffres suivant jusqu'à la première lettre (non comprise)
.- si une deuxième lettre on a un troisième bloc comme sous deuxième
.- pour terminer le dernier bloc est formé des 5 derniers chiffres
62301S57212000 -? 62301 S572 12000
12345Z1245S12345678 ? 12345 Z1245 S123 45678
12345S12345678 ? 1345 S123 45678
Est-ce bien comme cela ?
C'est presque ça :-)
Pour le premier bloc, il est toujours constitué de 5 chiffres.
Le deuxième bloc est facultatif et commence toujours par Z et est toujours suivi par 2 chiffres :
12345 Z12
Le troisième bloc commence toujours par S et est suivi toujours par 3 chiffres :
12345 Z12 S123
Le dernier bloc peut contenir entre 3 et 7 chiffres.
12345 Z12 S123 123...
Pour le premier bloc, il est toujours constitué de 5 chiffres.
Le deuxième bloc est facultatif et commence toujours par Z et est toujours suivi par 2 chiffres :
12345 Z12
Le troisième bloc commence toujours par S et est suivi toujours par 3 chiffres :
12345 Z12 S123
Le dernier bloc peut contenir entre 3 et 7 chiffres.
12345 Z12 S123 123...
Pourquoi ne pas l'avoir dit au début ? 5 chiffres,les lettres Z+2c hiffres et S+3chiffres, bloc Z aléatoire
En info, avec tout langage m^me VBA, il faut être extrêmement précis et clair: dans ce cas, cela aurait évité de programmer et reprogrammer des usines à gaz (qui te couteraient cher si c'était fait à titre onéreux)
Penses y la prochaine fois que tu fais appel à un forum
sans rancune
Michel
En info, avec tout langage m^me VBA, il faut être extrêmement précis et clair: dans ce cas, cela aurait évité de programmer et reprogrammer des usines à gaz (qui te couteraient cher si c'était fait à titre onéreux)
Penses y la prochaine fois que tu fais appel à un forum
sans rancune
Michel
le pb m'ayant branché et sans refaire la macro
Const col As String * 1 = "A" 'colonne des ref Const lig As Byte = 5 'ligne de départ des ref Sub modifier_ref() derlig = Cells(Cells.Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False For cptr = lig To derlig Cells(cptr, col) = espacer(Cells(cptr, col)) Next End Sub Function espacer(texto As String) As String Dim reg As Object Dim extraction As Object Set reg = CreateObject("vbscript.regexp") reg.Global = True reg.Pattern = "(\D)" Set extraction = reg.Execute(texto) For Each digit In extraction lettres = lettres & (digit.Value) Next digit Start = 1 For cptr = 1 To Len(lettres) lettre = Mid(lettres, cptr, 1) pos = Application.Search(lettre, texto) debut = debut & " " & Mid(texto, Start, pos - Start) nbre = nbre + 1 Start = pos Next debut = debut & " " & Mid(texto, pos, 4) espacer = debut & " " & Right(texto, Len(texto) + nbre + 1 - Len(debut))
Super ! Ca marche nikel !!! Merci beaucoup ! Et encore désolé pour mon manque de précision....
Svp, j'aurai une dernière question :
Maintenant que les références sont "claires", est-il possible d'utiliser l'inverse de la fonction concatener afin d'avoir le 1er bloc, dans une 1ère colonne, le deuxieme bloc (Z01) dans une deuxieme colonne, la 3ème bloc (S574) dans une troisième colonne etc... ??? Afin de pouvoir faire une liste déroulante pour chaque bloc ?
Svp, j'aurai une dernière question :
Maintenant que les références sont "claires", est-il possible d'utiliser l'inverse de la fonction concatener afin d'avoir le 1er bloc, dans une 1ère colonne, le deuxieme bloc (Z01) dans une deuxieme colonne, la 3ème bloc (S574) dans une troisième colonne etc... ??? Afin de pouvoir faire une liste déroulante pour chaque bloc ?
J'aurai une autre question svp.
Je voudrai ajouter un espace dans le dernier bloc, après le cinquième caractère du dernier bloc, cela est-il possible ? Via une formule ?
Je voudrai ajouter un espace dans le dernier bloc, après le cinquième caractère du dernier bloc, cela est-il possible ? Via une formule ?
Salut michel
peut être très bon,(merci mais c'est trop!) mais je renonce, là, il y a trop de cas pour faire quelque chose de raisonnable sur >7000 lignes!
Je regrette qu'excel ne donne pas de formule pour compter le nombre de caractères spécifiques dans une texte (ici le nombre de blanc) car ensuite avec substitue, ce serait un jeu d'enfant.
Ce n'est pas la première fois que je souhaiterais ce genre de formule
. Si tu as quelque chose sur le sujet, ,je suis preneur.
Pépé a bien tenté, mais est ce bien une bonne solution que de traiter sur 10 colonnes environ?
Pour ma part, je ne crois pas.
Bien cordialement
ps: les cerises ne sont pas mures chez moi
peut être très bon,(merci mais c'est trop!) mais je renonce, là, il y a trop de cas pour faire quelque chose de raisonnable sur >7000 lignes!
Je regrette qu'excel ne donne pas de formule pour compter le nombre de caractères spécifiques dans une texte (ici le nombre de blanc) car ensuite avec substitue, ce serait un jeu d'enfant.
Ce n'est pas la première fois que je souhaiterais ce genre de formule
. Si tu as quelque chose sur le sujet, ,je suis preneur.
Pépé a bien tenté, mais est ce bien une bonne solution que de traiter sur 10 colonnes environ?
Pour ma part, je ne crois pas.
Bien cordialement
ps: les cerises ne sont pas mures chez moi
les cerises ne sont pas mures chez moi
Voilà les conséquences d'avoir quitté le Vaucluse pour aller au nord de Montélimar, c.à.d. quasiment en Scandinavie... :-)
petite fonction personnalisée pour compter les espaces
Function compter_les_blancs(texto As Range) As Byte
If texto = "" Then Exit Function
tempo = Split(texto)
compter_les_blancs = UBound(tempo)
End Function
Voilà les conséquences d'avoir quitté le Vaucluse pour aller au nord de Montélimar, c.à.d. quasiment en Scandinavie... :-)
petite fonction personnalisée pour compter les espaces
Function compter_les_blancs(texto As Range) As Byte
If texto = "" Then Exit Function
tempo = Split(texto)
compter_les_blancs = UBound(tempo)
End Function
Voila une excellente réponse Michel, mais pour ma part:
_ j'ai au moins échappé aux derniers orages dans le Vaucluse
_ et plus grave, j'ai bien noté ta fonction personnalisée mais j'ose à peine demander comment on s'en sert?
Je le saurais, ça pourrait me servir assez souvent, mais là, je suis sec. ... et tant mieux si ça te fait rire :-)
Crdlmnt
_ j'ai au moins échappé aux derniers orages dans le Vaucluse
_ et plus grave, j'ai bien noté ta fonction personnalisée mais j'ose à peine demander comment on s'en sert?
Je le saurais, ça pourrait me servir assez souvent, mais là, je suis sec. ... et tant mieux si ça te fait rire :-)
Crdlmnt
tu l'installes dans un module (ca tu sais faire)
quand tu veux utiliser ce petit bijou :oD ( fait en vitesse donc...)
dans formules-insérer une fonction-fonction personnalisée
l'idéal serait de la transformer en macro complémentaire .XLA mais est ce que ca vaut le coup d'avoir cà dans les menus....ou de créer un classeur perso de macro, j'en doute
quand tu veux utiliser ce petit bijou :oD ( fait en vitesse donc...)
dans formules-insérer une fonction-fonction personnalisée
l'idéal serait de la transformer en macro complémentaire .XLA mais est ce que ca vaut le coup d'avoir cà dans les menus....ou de créer un classeur perso de macro, j'en doute
Bonjour,
Vous mettez un exemple concret de ce que vous désirez et mettre le fichier sur https://www.cjoint.com/ et poster le lien.
Vous mettez un exemple concret de ce que vous désirez et mettre le fichier sur https://www.cjoint.com/ et poster le lien.