Séparer chaine de caractere par des espaces
Résolu/Fermé
greg_in_motion
-
24 mai 2011 à 10:31
michel_m Messages postés 16596 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 6 juin 2023 - 7 juin 2011 à 10:44
michel_m Messages postés 16596 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 6 juin 2023 - 7 juin 2011 à 10:44
A voir également:
- Excel séparer chaîne de caractère espace
- Liste déroulante excel - Guide
- Formule excel - Guide
- Espace insécable word - Guide
- Caractère ascii - Guide
- Séparer pdf - Guide
13 réponses
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
Modifié par michel_m le 1/06/2011 à 16:28
Modifié par michel_m le 1/06/2011 à 16:28
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
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
24 mai 2011 à 10:43
24 mai 2011 à 10:43
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... :(
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
24 mai 2011 à 10:49
24 mai 2011 à 10:49
oui ca complique hachement mais
les séparations internes (ZO1 S572) commencent elles toujours par une lettre et la dernière (12000 par un chiffre) ?
Comme c'est complexe, sois précis, merci d'avance :-)
les séparations internes (ZO1 S572) commencent elles toujours par une lettre et la dernière (12000 par un chiffre) ?
Comme c'est complexe, sois précis, merci d'avance :-)
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
24 mai 2011 à 10:56
24 mai 2011 à 10:56
OK c'est parti, 6000 lignes on passera peut-^tret par du VBA
sois patient !
sois patient !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
24 mai 2011 à 14:21
24 mai 2011 à 14:21
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.
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
24 mai 2011 à 16:53
24 mai 2011 à 16:53
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... :(
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
25 mai 2011 à 15:26
25 mai 2011 à 15:26
bonjour,
ce n'est pas ce que j'ai fait ? le nombre de "blocs-lettre" est indifférent....
je viens d'essayer en enlevant des blocs-lettre par ci par là et c'est OK
a moins que je n'ai pas vu un piège ???
ce n'est pas ce que j'ai fait ? le nombre de "blocs-lettre" est indifférent....
je viens d'essayer en enlevant des blocs-lettre par ci par là et c'est OK
a moins que je n'ai pas vu un piège ???
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
25 mai 2011 à 15:38
25 mai 2011 à 15:38
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
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
Modifié par michel_m le 25/05/2011 à 18:03
Modifié par michel_m le 25/05/2011 à 18:03
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
Le Pingou
Messages postés
11777
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
27 septembre 2023
1 371
25 mai 2011 à 22:38
25 mai 2011 à 22:38
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...
Le Pingou
Messages postés
11777
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
27 septembre 2023
1 371
26 mai 2011 à 14:21
26 mai 2011 à 14:21
Bonjour greg_in_motion,
Merci pour l'information.
Je m'arrêterai là car la solution est entre vos mains par l'intermédiaire de michel
_m.
Salutations.
Le Pingou
Merci pour l'information.
Je m'arrêterai là car la solution est entre vos mains par l'intermédiaire de michel
_m.
Salutations.
Le Pingou
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
Modifié par michel_m le 26/05/2011 à 12:54
Modifié par michel_m le 26/05/2011 à 12:54
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
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
Modifié par michel_m le 26/05/2011 à 12:55
Modifié par michel_m le 26/05/2011 à 12:55
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 ?
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
27 mai 2011 à 11:51
27 mai 2011 à 11:51
bonjour,
oui mais pas a vant lundi!....
si il n'y a pas de 2°bloc Zxx que fait on ?
oui mais pas a vant lundi!....
si il n'y a pas de 2°bloc Zxx que fait on ?
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 ?
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
6 juin 2011 à 16:30
6 juin 2011 à 16:30
bonjour
bin Vaucluse, très bon formuliste est en train d'essayer de t'aider ?
bin Vaucluse, très bon formuliste est en train d'essayer de t'aider ?
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 360
Modifié par Vaucluse le 6/06/2011 à 18:00
Modifié par Vaucluse le 6/06/2011 à 18:00
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
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
6 juin 2011 à 18:17
6 juin 2011 à 18:17
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
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 360
6 juin 2011 à 18:24
6 juin 2011 à 18:24
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
michel_m
Messages postés
16596
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
6 juin 2023
3 303
Modifié par michel_m le 6/06/2011 à 18:31
Modifié par michel_m le 6/06/2011 à 18:31
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
Le Pingou
Messages postés
11777
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
27 septembre 2023
1 371
6 juin 2011 à 16:14
6 juin 2011 à 16:14
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.