Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Formatage d'un nombre en texte qui ne marche pas !

7 réponses
Avatar
tictok
Bonsoir,
j'ai une colonne contenant des chaines de caracteres du type "NNN000123".
Par Visual Basic, je formate cette colonne de general en texte.
Puis, avec un Columns("A:A").Replace What:="NNN", Replacement:="", je
supprime ces trois lettres.
Grace au formatage fait avant, je devrais obtenir "000123". Sauf que
j'obtiens "123" !
Pourquoi les 0 ne sont t'ils pas gardes ?

Je suis sous Win2000 avec Excel2003.
Merci pour vos reponses.

N.B. : en supprimant a la main les trois lettres apres le formatage, j'ai
bien "000123".

7 réponses

Avatar
Michel
Salut,

Suggestion :

Au lieu de :
Columns("A:A").Replace What:="NNN", Replacement:=""

Utilisez :
Columns("A:A").Replace What:="NNN", Replacement:="'"

En effet, l'apostrophe guarantie que le contenu de la
cellule sera considéré comme du texte et non comme un
nombre.

Michel
-----Message d'origine-----
Bonsoir,
j'ai une colonne contenant des chaines de caracteres du
type "NNN000123".

Par Visual Basic, je formate cette colonne de general en
texte.

Puis, avec un Columns("A:A").Replace What:="NNN",
Replacement:="", je

supprime ces trois lettres.
Grace au formatage fait avant, je devrais
obtenir "000123". Sauf que

j'obtiens "123" !
Pourquoi les 0 ne sont t'ils pas gardes ?

Je suis sous Win2000 avec Excel2003.
Merci pour vos reponses.

N.B. : en supprimant a la main les trois lettres apres le
formatage, j'ai

bien "000123".






.



Avatar
Herdet
Bonsoir Tictok,
Une autre solution que celle de Michel mais qui ne fait pas apparaitre
l'apostrophe
Sub remplacer()
For Each a In Range("A:A")
If Left(a.Value, 3) = "NNN" Then
a.NumberFormat = "@"
a.Value = Format(Right(a.Value, Len(a.Value) - 3), "000000")
End If
Next
End Sub
Cordialement
Robert Dezan


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

Bonsoir,
j'ai une colonne contenant des chaines de caracteres du type "NNN000123".
Par Visual Basic, je formate cette colonne de general en texte.
Puis, avec un Columns("A:A").Replace What:="NNN", Replacement:="", je
supprime ces trois lettres.
Grace au formatage fait avant, je devrais obtenir "000123". Sauf que
j'obtiens "123" !
Pourquoi les 0 ne sont t'ils pas gardes ?

Je suis sous Win2000 avec Excel2003.
Merci pour vos reponses.

N.B. : en supprimant a la main les trois lettres apres le formatage, j'ai
bien "000123".








Avatar
tictok
Merci de l'astuce.
Je vais avoir trois questions maintenant ;).

Sur mon fichier de travail, j'ai plusieurs procedures dont celle permettant
de supprimer les lettres.
J'ai donc cree un fichier test.xls pour tester cette procedure, et voir ce
qui n'allait pas.
Avec ton astuce, j'ai bien le bon formatage. C'est cool !
Premiere question : apres cette manipulation, je vais faire une comparaison
de ces cellules avec les cellules d'un autre fichier. L'apostrophe ne va
t'il pas poser un probleme dans la comparaison ?

Second probleme lié.
Sur mon veritable fichier de travail, j'ai un probleme similaire.
Les 0 de toutes les cellules sont bien gardes sauf ceux de la premiere
cellule aui devient 2 au lieu de 00002 ! Donc, seule la premiere cellule
pose probleme !
Avec ton astuce, le probleme est resolu de nouveau !
Seconde question : pourquoi seule la premiere cellule posait probleme ?

Troisieme probleme : ameliorer cette suppression.
Je voudrais changer mon code de suppression pour qu'il ne le fasse que de la
cellule A1 a la cellule Ax (je connais la valeur de x) et non pas toute la
colonne.
Car je pense que j'eviterais un calcul inutile.

Encore merco Michel pour ton aide !


"Michel" escreveu na mensagem
news:c2d101c43844$af331a70$
Salut,

Suggestion :

Au lieu de :
Columns("A:A").Replace What:="NNN", Replacement:=""

Utilisez :
Columns("A:A").Replace What:="NNN", Replacement:="'"

En effet, l'apostrophe guarantie que le contenu de la
cellule sera considéré comme du texte et non comme un
nombre.

Michel
Avatar
tictok
Bonsoir Herdet et merci de ta reponse.
Vu mon niveau de connaissance de VB quasi inexistant, je ne sais pas si ta
proposition pourrait convenir.
J'ai precise mon probleme dans ma reponse a Michel, peut etre pourra tu
remodeler ta reponse a mon probleme :).
Je suis "effraye" par changer completement mon code ;) .

"Herdet" escreveu na mensagem
news:
Bonsoir Tictok,
Une autre solution que celle de Michel mais qui ne fait pas apparaitre
l'apostrophe
Sub remplacer()
For Each a In Range("A:A")
If Left(a.Value, 3) = "NNN" Then
a.NumberFormat = "@"
a.Value = Format(Right(a.Value, Len(a.Value) - 3), "000000")
End If
Next
End Sub
Cordialement
Robert Dezan


Avatar
tictok
Thanks a lot Herdet !
Pourrais tu m'expliquer ton code car je ne vois pas comment ca fonctionne
???


"Herdet" escreveu na mensagem
news:
Bonsoir Tictok,
Une autre solution que celle de Michel mais qui ne fait pas apparaitre
l'apostrophe
Sub remplacer()
For Each a In Range("A:A")
If Left(a.Value, 3) = "NNN" Then
a.NumberFormat = "@"
a.Value = Format(Right(a.Value, Len(a.Value) - 3), "000000")
End If
Next
End Sub
Cordialement
Robert Dezan


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

Bonsoir,
j'ai une colonne contenant des chaines de caracteres du type
"NNN000123".


Par Visual Basic, je formate cette colonne de general en texte.
Puis, avec un Columns("A:A").Replace What:="NNN", Replacement:="", je
supprime ces trois lettres.
Grace au formatage fait avant, je devrais obtenir "000123". Sauf que
j'obtiens "123" !
Pourquoi les 0 ne sont t'ils pas gardes ?

Je suis sous Win2000 avec Excel2003.
Merci pour vos reponses.

N.B. : en supprimant a la main les trois lettres apres le formatage,
j'ai


bien "000123".












Avatar
Herdet
Bonjour Titock,
Explication de la solution :
Sub remplacer()
' ----- a est une simple référence à la cellule de travail sur laquelle
on peut appliquer
' toutes les propriétés d'un Range (a.value, a.select, a.row,
a.column,....)
' ------ pour toutes les cellules de la colonne A
For Each a In Range("A:A")
' ----- si les 3 caractères de gauche de la valeur de la cellule
(a.value) = "NNN"
If Left(a.Value, 3) = "NNN" Then
' ---- passer le format en Texte
a.NumberFormat = "@"
' ---- écrire la partie de droite moins les 3 premiers
caractères
' ---- forcer le formatage du resultat sur 6 caractères
a.Value = Format(Right(a.Value, Len(a.Value) - 3), "000000")
End If
Next
End Sub
Si tu veux faire une sélection partielle sur A :
1) Soit mettre le range en dur par :
For Each a In Range("A1:A50")
2) soit mettre le range avec emploi d'une variable de ligne
n= 48
For Each a In Range(cells(1,1), cells(n,1))
......
3) soit mettre le range avec emploi de variables
Cette solution est beaucoup plus souple car elle permet de
travailler sur n'importe qu'elle plage définie en lignes et colonnes
L1 = 5, L2 = 58, C1 = 1, C2 = 3
For Each a In Range(cells(L1,C1), cells(L2,C2))
.....

Cordiales salutations
Robert Dezan


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

Thanks a lot Herdet !
Pourrais tu m'expliquer ton code car je ne vois pas comment ca fonctionne
???


"Herdet" escreveu na mensagem
news:
Bonsoir Tictok,
Une autre solution que celle de Michel mais qui ne fait pas apparaitre
l'apostrophe
Sub remplacer()
For Each a In Range("A:A")
If Left(a.Value, 3) = "NNN" Then
a.NumberFormat = "@"
a.Value = Format(Right(a.Value, Len(a.Value) - 3), "000000")
End If
Next
End Sub
Cordialement
Robert Dezan


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

Bonsoir,
j'ai une colonne contenant des chaines de caracteres du type
"NNN000123".


Par Visual Basic, je formate cette colonne de general en texte.
Puis, avec un Columns("A:A").Replace What:="NNN", Replacement:="", je
supprime ces trois lettres.
Grace au formatage fait avant, je devrais obtenir "000123". Sauf que
j'obtiens "123" !
Pourquoi les 0 ne sont t'ils pas gardes ?

Je suis sous Win2000 avec Excel2003.
Merci pour vos reponses.

N.B. : en supprimant a la main les trois lettres apres le formatage,
j'ai


bien "000123".
















Avatar
tictok
Merci Herdet pour ces explications.
Les valeurs n'ont pas toutes une longueur de 9 caracteres (donc 6 apres la
suppression), ils font plus ou moins.
J'ai remarque qu'en enlevant ce formatage, je me retrouve avec 2 au lieu de
000002.
Donc, le probleme est toujours existant. Car le fait de formater sur 6
caracteres est un cas particulier.
Si j'ai une valeur de 8 caracteres, je vais me retrouver avec 6 caracteres
au lieu de 5.
:(


Pour la selection partielle, j'ai fait un
For Each a In Range("A1:A" & Variable)


"Herdet" escreveu na mensagem
news:
Bonjour Titock,
Explication de la solution :
Sub remplacer()
' ----- a est une simple référence à la cellule de travail sur
laquelle

on peut appliquer
' toutes les propriétés d'un Range (a.value, a.select, a.row,
a.column,....)
' ------ pour toutes les cellules de la colonne A
For Each a In Range("A:A")
' ----- si les 3 caractères de gauche de la valeur de la cellule
(a.value) = "NNN"
If Left(a.Value, 3) = "NNN" Then
' ---- passer le format en Texte
a.NumberFormat = "@"
' ---- écrire la partie de droite moins les 3 premiers
caractères
' ---- forcer le formatage du resultat sur 6 caractères
a.Value = Format(Right(a.Value, Len(a.Value) - 3), "000000")
End If
Next
End Sub
Si tu veux faire une sélection partielle sur A :
1) Soit mettre le range en dur par :
For Each a In Range("A1:A50")
2) soit mettre le range avec emploi d'une variable de ligne
n= 48
For Each a In Range(cells(1,1), cells(n,1))
......
3) soit mettre le range avec emploi de variables
Cette solution est beaucoup plus souple car elle permet de
travailler sur n'importe qu'elle plage définie en lignes et colonnes
L1 = 5, L2 = 58, C1 = 1, C2 = 3
For Each a In Range(cells(L1,C1), cells(L2,C2))
.....

Cordiales salutations
Robert Dezan