OVH Cloud OVH Cloud

Chaines de caractères avec des espaces

15 réponses
Avatar
Jacques RAGNI
Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de
chiffres. Ces codes sont constitués par des chaines de 4 chiffres séparées
par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc. Certains sont très
longs.
Mon problème c'est que certains d'entre eux sont pollués par des espaces
surnuméraires: au lieu d'un espace entre 2 séquences de 4 chiffres, il y en
a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589 0012 5681
Impossible de déterminer une règle de survenue, certains ont une anomalie,
d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s'est
faite à partir de valeurs intégrant les zéros "devant" pour garder la
séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*# *") ce
qui me permet de les colorer, mais je n'ai pas d'idée pour essayer de les
corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...

10 réponses

1 2
Avatar
michdenis
Bonjour,

Essaie quelque chose dans le genre :
Tu adaptes le nom de la feuille, plage de cellules.
Tu peux ajouter des #### autant que tu désires
selon la chaîne de caractères la plus longue que tu as

'--------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A10")
.Replace " ", ""
.NumberFormat = "####"" ""####"" ""####"" ""####"" ""####"" ""####"
End With
End With
End Sub
'--------------------------------



"Jacques RAGNI" a écrit dans le message de groupe de discussion :

Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de
chiffres. Ces codes sont constitués par des chaines de 4 chiffres séparées
par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc. Certains sont très
longs.
Mon problème c'est que certains d'entre eux sont pollués par des espaces
surnuméraires: au lieu d'un espace entre 2 séquences de 4 chiffres, il y en
a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589 0012 5681
Impossible de déterminer une règle de survenue, certains ont une anomalie,
d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s'est
faite à partir de valeurs intégrant les zéros "devant" pour garder la
séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*# *") ce
qui me permet de les colorer, mais je n'ai pas d'idée pour essayer de les
corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...
Avatar
LE TROLL
Bonjour,

Le solution est simple, tout dépend de tes connaissances :

Faire une copie de sauvegarde du fichier d'origine O (copyFichierO.txt)
Tu ouvres le fichier d'origine en lecture texte O
Tu ouvres un nouveau fichier de destinations texte en écriture D
dim i as long
dim j as long
dim ligne as string
dim ligneBis as long

Do while EOF(fichier) <> true
if EOF(fichier) = True then exit Do
ligneBis=""
j = 0
for i = 1 to len(ligne)
select case mid(Trim(ligne)), i, 1)
case <> " " : j = 0
case else : j = j + 1
end select
if j < 2 then : ligneBis = ligneBis & mid(ligne, i, 1)
next i
écrit fichoer D = ligneBis
loop
rename D en O
Kill O

Il y a d'autre méthodes, comme changer tout ce qui est plus long que " "
en " " par ligne, etc...
Toutefois il faudrait aussi penser à voir ce qui cause ce problème et le
supprimer :o)
In fine, si ce sont des séries de 4 chiffres, il n'y a aucune utilité à
conserver le séparateur, ben oui, sauf pour le plaisir des yeux...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Jacques RAGNI" a écrit dans le message de
news:
Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de
chiffres. Ces codes sont constitués par des chaines de 4 chiffres séparées
par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc. Certains sont
très longs.
Mon problème c'est que certains d'entre eux sont pollués par des espaces
surnuméraires: au lieu d'un espace entre 2 séquences de 4 chiffres, il y
en a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589 0012 5681
Impossible de déterminer une règle de survenue, certains ont une anomalie,
d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s'est
faite à partir de valeurs intégrant les zéros "devant" pour garder la
séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*# *") ce
qui me permet de les colorer, mais je n'ai pas d'idée pour essayer de les
corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...

Avatar
manbas
Bonjour michdenis
Merci pour ta réponse.
La solution n'est pas optimale à cause de la longueur des chaines de 4
chiffres. Rien que pour compter le nombre de séquences de 4 chiffres de la
plus grande... et laquelle est la plus grande sur plusieurs centaines de
lignes...

"michdenis" a écrit dans le message de news:

Bonjour,

Essaie quelque chose dans le genre :
Tu adaptes le nom de la feuille, plage de cellules.
Tu peux ajouter des #### autant que tu désires
selon la chaîne de caractères la plus longue que tu as

'--------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A10")
.Replace " ", ""
.NumberFormat = "####"" ""####"" ""####"" ""####"" ""####"" ""####"
End With
End With
End Sub
'--------------------------------



"Jacques RAGNI" a écrit dans le message de groupe de
discussion :

Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de
chiffres. Ces codes sont constitués par des chaines de 4 chiffres séparées
par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc. Certains sont
très
longs.
Mon problème c'est que certains d'entre eux sont pollués par des espaces
surnuméraires: au lieu d'un espace entre 2 séquences de 4 chiffres, il y
en
a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589 0012 5681
Impossible de déterminer une règle de survenue, certains ont une anomalie,
d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s'est
faite à partir de valeurs intégrant les zéros "devant" pour garder la
séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*# *") ce
qui me permet de les colorer, mais je n'ai pas d'idée pour essayer de les
corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...

Avatar
manbas
Bonjour letroll
Merci pour ta réponse. Comme tu l'as dis "ça dépends de mes compétences" et
là tu surfes sur des vagues un peu hautes pour moi!
1) J'ai crée deux fichiers textes, un appellé O et l'autre appellé D (tous
deux des copies .txt)
2) J'ai mis ton code dans un module XL
3) 3 lignes sont "en rouge" et m'empêchent de tester (je ne comprends pas
tout le code)
select case Mid(Trim(ligne)), i, 1)
et
écrit fichier D = ligneBis
et
rename D en O (dois je comprendre que je fais manuellement? mais alors
pourquoi Kill O ensuite?)


"LE TROLL" <le a écrit dans le message de news:
ub5cz%
Bonjour,

Le solution est simple, tout dépend de tes connaissances :

Faire une copie de sauvegarde du fichier d'origine O (copyFichierO.txt)
Tu ouvres le fichier d'origine en lecture texte O
Tu ouvres un nouveau fichier de destinations texte en écriture D
dim i as long
dim j as long
dim ligne as string
dim ligneBis as long

Do while EOF(fichier) <> true
if EOF(fichier) = True then exit Do
ligneBis=""
j = 0
for i = 1 to len(ligne)
select case mid(Trim(ligne)), i, 1)
case <> " " : j = 0
case else : j = j + 1
end select
if j < 2 then : ligneBis = ligneBis & mid(ligne, i, 1)
next i
écrit fichoer D = ligneBis
loop
rename D en O
Kill O

Il y a d'autre méthodes, comme changer tout ce qui est plus long que "
" en " " par ligne, etc...
Toutefois il faudrait aussi penser à voir ce qui cause ce problème et le
supprimer :o)
In fine, si ce sont des séries de 4 chiffres, il n'y a aucune utilité à
conserver le séparateur, ben oui, sauf pour le plaisir des yeux...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Jacques RAGNI" a écrit dans le message de
news:
Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de
chiffres. Ces codes sont constitués par des chaines de 4 chiffres
séparées par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc.
Certains sont très longs.
Mon problème c'est que certains d'entre eux sont pollués par des espaces
surnuméraires: au lieu d'un espace entre 2 séquences de 4 chiffres, il y
en a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589 0012 5681
Impossible de déterminer une règle de survenue, certains ont une
anomalie, d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s'est
faite à partir de valeurs intégrant les zéros "devant" pour garder la
séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*# *")
ce qui me permet de les colorer, mais je n'ai pas d'idée pour essayer de
les corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...




Avatar
JC Duce
Bonjour,

Tu peux aussi faire par le menu de Remplacement : Edition / Rechercher,
sélectionne Remplacer.

Dans le champ du haut tu tapes 2 espaces et dans celui du bas un seul. Ca
devrait te ramener tout ce qui comporte plus d'un espace à un seul ...

Toujours travailler sur une copie bien sûr.


"Jacques RAGNI" wrote:

Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de
chiffres. Ces codes sont constitués par des chaines de 4 chiffres séparées
par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc. Certains sont très
longs.
Mon problème c'est que certains d'entre eux sont pollués par des espaces
surnuméraires: au lieu d'un espace entre 2 séquences de 4 chiffres, il y en
a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589 0012 5681
Impossible de déterminer une règle de survenue, certains ont une anomalie,
d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s'est
faite à partir de valeurs intégrant les zéros "devant" pour garder la
séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*# *") ce
qui me permet de les colorer, mais je n'ai pas d'idée pour essayer de les
corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...


.

Avatar
LE TROLL
Bonjour mambas,

En réponse :

Ce n'est pas réellement un code qui fonctionne que je t'ai passé, mais
un principe de ce qu'il fallait faire.
Désolé, encore une fois je ne sais pas du tout ce que tu sais faire par
rapport à ce que tu demandes.

Je pourrais tout t'expliquer, mais ça va te servir sans doute une seule
fois, donc tu vas l'oublier, et le temps passé à l'expliquer va dépasser le
temps qu'il faut pour écrire le code en VB6, alors, comme ce n'est pas un
fichier secret, pour moi ça ne veut rien dire, ce que je te propose est de
m'envoyer ton fichier boiteux en copie par mail à mon adresse :
montmartre75018 arobase free point fr

Ton fichier texte ne contient que des séries de 4 chiffres séparées par
un nombre aléatoire de blancs, et ce que tu veux, c'est bien qu'il n'y ait
qu'une séparation d'un seul espace (ascii 32) entre tes séries de 4
chiffres, ceci sur chaque ligne du fichier texte, excepté je présume en
dernière position de chaque ligne où il ne doit pas y avoir de blanc en fin
(d'où le Trim(), est-ce bien ça ?

Je te fais ça dans l'après-midi et je te renvois un exe testé en vb6
qui, dans un répertoire, mis en présence d'un fichier O.txt, te pondra un
fichier D.txt, ainsi que le code, de la sorte tu pourras l'appeler de ton
code (Shell), si ça se reproduit, car il faudrait normalement que tu sache
quoi faire pour que ça ne se reproduise pas, il doit y avoir une erreur
quelque part.

A te lire, cordialement.
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"manbas" a écrit dans le message de
news:
Bonjour letroll
Merci pour ta réponse. Comme tu l'as dis "ça dépends de mes compétences"
et là tu surfes sur des vagues un peu hautes pour moi!
1) J'ai crée deux fichiers textes, un appellé O et l'autre appellé D (tous
deux des copies .txt)
2) J'ai mis ton code dans un module XL
3) 3 lignes sont "en rouge" et m'empêchent de tester (je ne comprends pas
tout le code)
select case Mid(Trim(ligne)), i, 1)
et
écrit fichier D = ligneBis
et
rename D en O (dois je comprendre que je fais manuellement? mais alors
pourquoi Kill O ensuite?)


"LE TROLL" <le a écrit dans le message de news:
ub5cz%
Bonjour,

Le solution est simple, tout dépend de tes connaissances :

Faire une copie de sauvegarde du fichier d'origine O (copyFichierO.txt)
Tu ouvres le fichier d'origine en lecture texte O
Tu ouvres un nouveau fichier de destinations texte en écriture D
dim i as long
dim j as long
dim ligne as string
dim ligneBis as long

Do while EOF(fichier) <> true
if EOF(fichier) = True then exit Do
ligneBis=""
j = 0
for i = 1 to len(ligne)
select case mid(Trim(ligne)), i, 1)
case <> " " : j = 0
case else : j = j + 1
end select
if j < 2 then : ligneBis = ligneBis & mid(ligne, i, 1)
next i
écrit fichoer D = ligneBis
loop
rename D en O
Kill O

Il y a d'autre méthodes, comme changer tout ce qui est plus long que "
" en " " par ligne, etc...
Toutefois il faudrait aussi penser à voir ce qui cause ce problème et le
supprimer :o)
In fine, si ce sont des séries de 4 chiffres, il n'y a aucune utilité à
conserver le séparateur, ben oui, sauf pour le plaisir des yeux...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Jacques RAGNI" a écrit dans le message de
news:
Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de
chiffres. Ces codes sont constitués par des chaines de 4 chiffres
séparées par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc.
Certains sont très longs.
Mon problème c'est que certains d'entre eux sont pollués par des espaces
surnuméraires: au lieu d'un espace entre 2 séquences de 4 chiffres, il y
en a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589 0012 5681
Impossible de déterminer une règle de survenue, certains ont une
anomalie, d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s'est
faite à partir de valeurs intégrant les zéros "devant" pour garder la
séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*# *")
ce qui me permet de les colorer, mais je n'ai pas d'idée pour essayer de
les corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...








Avatar
Jex
Bonjour Jacques,

le code suivant permet de remplacer 2 espaces par un seul jusqu'à ce
que tous les espaces soient en un seul exemplaire.

ActiveSheet.Range("B:B") doit être adapté aux cellules voulues, par
exemple par ActiveSheet.Cells pour toute la feuille.
ScreenUpdating = False permet de ne pas réafficher la feuille et
accélère donc le traitement si le nombre de données à traiter est
important.

Dans un module, tu peux placer ceci :

-------------------------------------
Public Sub UnEspace()
Dim blnRep As Boolean
Dim rng As Range
Dim rngF As Range

Application.ScreenUpdating = False
Set rng = ActiveSheet.Range("B:B")

Do
blnRep = rng.Replace(" ", " ")
Set rngF = rng.Find(" ")
If rngF Is Nothing Then
Exit Do
End If
Loop

Application.ScreenUpdating = True
End Sub
-------------------------------------

En espérant que cela correspond à ton attente,
Jex (un autre Jacques...)

On 6 avr, 20:50, "Jacques RAGNI" wrote:
Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de
chiffres. Ces codes sont constitués par des chaines de 4 chiffres sép arées
par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc. Certains sont tr ès
longs.
Mon problème c'est que certains d'entre eux sont pollués par des espa ces
surnuméraires: au lieu d'un espace entre 2 séquences de 4 chiffres, i l y en
a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589    0012 5681
Impossible de déterminer une règle de survenue, certains ont une anom alie,
d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s' est
faite à partir de valeurs intégrant les zéros "devant" pour garder la
séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*#  *") ce
qui me permet de les colorer, mais je n'ai pas d'idée pour essayer de l es
corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...
Avatar
michdenis
Tu pourrais utiliser une macro comme celle-ci en adaptant
le nom de la feuille, la plage de cellules occupées et remplacer
25 par le nombre maximum d'espaces que tu peux retrouver
entre 2 séries de chiffres. Comme l'exécution de cette procédure
est très rapide, au lieu de 25, tu peux mettre 50 si tu le désires...

'---------------------------------------
Sub test()
Dim X As Integer

Application.EnableEvents = False
Application.ScreenUpdating = False
With Worksheets("Feuil1")
With .Range("A1:g5")
Do While X <= 25
.Replace " ", " "
X = X + 1
Loop
End With
End With
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub
'---------------------------------------



"manbas" a écrit dans le message de groupe de discussion :

Bonjour michdenis
Merci pour ta réponse.
La solution n'est pas optimale à cause de la longueur des chaines de 4
chiffres. Rien que pour compter le nombre de séquences de 4 chiffres de la
plus grande... et laquelle est la plus grande sur plusieurs centaines de
lignes...

"michdenis" a écrit dans le message de news:

Bonjour,

Essaie quelque chose dans le genre :
Tu adaptes le nom de la feuille, plage de cellules.
Tu peux ajouter des #### autant que tu désires
selon la chaîne de caractères la plus longue que tu as

'--------------------------------
Sub test()
With Worksheets("Feuil1")
With .Range("A1:A10")
.Replace " ", ""
.NumberFormat = "####"" ""####"" ""####"" ""####"" ""####"" ""####"
End With
End With
End Sub
'--------------------------------



"Jacques RAGNI" a écrit dans le message de groupe de
discussion :

Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de
chiffres. Ces codes sont constitués par des chaines de 4 chiffres séparées
par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc. Certains sont
très
longs.
Mon problème c'est que certains d'entre eux sont pollués par des espaces
surnuméraires: au lieu d'un espace entre 2 séquences de 4 chiffres, il y
en
a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589 0012 5681
Impossible de déterminer une règle de survenue, certains ont une anomalie,
d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s'est
faite à partir de valeurs intégrant les zéros "devant" pour garder la
séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*# *") ce
qui me permet de les colorer, mais je n'ai pas d'idée pour essayer de les
corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...

Avatar
Tatanka
Salut Jacques,

Une autre suggestion :

Sub Quatre_Espace_Quatre()
Dim c As Range
For Each c In Selection
c.Value = Trim(Application.Substitute(c.Value, Chr(160), ""))
Next c
End Sub

Serge


"Jacques RAGNI" a écrit dans le message de news:
Bonjour à tous
Mon fichier comporte des centaines de lignes qui reçoivent des codes de chiffres. Ces codes sont constitués par des chaines de 4
chiffres séparées par 1 espace. Par exemple: 0125 7458 6589 0012 5681 etc. Certains sont très longs.
Mon problème c'est que certains d'entre eux sont pollués par des espaces surnuméraires: au lieu d'un espace entre 2 séquences de 4
chiffres, il y en a 2, 3, 4, ou plus.
Exemple: 0125 7458 6589 0012 5681
Impossible de déterminer une règle de survenue, certains ont une anomalie, d'autres en ont plusieurs.
Ces chaines de caractères sont au format "texte" car leur création s'est faite à partir de valeurs intégrant les zéros "devant"
pour garder la séquence de 4 chiffres.
Je sais repérer ces chaines anormales en vba (activecell.value="*# *") ce qui me permet de les colorer, mais je n'ai pas d'idée
pour essayer de les corriger.
Avez-vous une solution pour m'aider SVP?
En vous remerciant mille fois par avance...

Avatar
Tatanka
Sub Quatre_Espace_Quatre()
Dim c As Range
For Each c In Selection
c.Value = Trim(Application.Substitute(c.Value, Chr(160), ""))
Next c
End Sub



Toutes mes excuses, cette macro ne tient pas la route.

Serge
1 2