Formatage d'un nombre en texte qui ne marche pas !
7 réponses
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".
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".
.
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".
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" <nomail@yet.com> a écrit dans le message de news:
uSgDFsDOEHA.3016@tk2msftngp13.phx.gbl...
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".
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".
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:=""
En effet, l'apostrophe guarantie que le contenu de la cellule sera considéré comme du texte et non comme un nombre.
Michel
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" <anonymous@discussions.microsoft.com> escreveu na mensagem
news:c2d101c43844$af331a70$a301280a@phx.gbl...
Salut,
Suggestion :
Au lieu de :
Columns("A:A").Replace What:="NNN", Replacement:=""
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:=""
En effet, l'apostrophe guarantie que le contenu de la cellule sera considéré comme du texte et non comme un nombre.
Michel
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
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" <rdezan@noos.fr> escreveu na mensagem
news:uJE5zcEOEHA.1644@TK2MSFTNGP09.phx.gbl...
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
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
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".
Thanks a lot Herdet !
Pourrais tu m'expliquer ton code car je ne vois pas comment ca fonctionne
???
"Herdet" <rdezan@noos.fr> escreveu na mensagem
news:uJE5zcEOEHA.1644@TK2MSFTNGP09.phx.gbl...
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" <nomail@yet.com> a écrit dans le message de news:
uSgDFsDOEHA.3016@tk2msftngp13.phx.gbl...
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
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".
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".
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" <nomail@yet.com> a écrit dans le message de news:
OGAyp0EOEHA.2972@TK2MSFTNGP10.phx.gbl...
Thanks a lot Herdet !
Pourrais tu m'expliquer ton code car je ne vois pas comment ca fonctionne
???
"Herdet" <rdezan@noos.fr> escreveu na mensagem
news:uJE5zcEOEHA.1644@TK2MSFTNGP09.phx.gbl...
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" <nomail@yet.com> a écrit dans le message de news:
uSgDFsDOEHA.3016@tk2msftngp13.phx.gbl...
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
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".
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
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" <rdezan@noos.fr> escreveu na mensagem
news:uXlXlVNOEHA.204@TK2MSFTNGP10.phx.gbl...
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))
.....
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)) .....