J'exporte des données à partir d'un fichier.csv et j'ai des colonnes de
chiffres à mettre en forme :
- avec un format nombre à 2 décimales, le séparateur de milliers
Et je dois aussi remplacer le . (point) (qui apparaît à l'ouverture du
fichier pour certains chiffres) par une , (virgule).
Le pb que je soulève est le suivant :
- la première colonne se met bien en forme avec la macro ci-dessous
- la seconde colonne me remplace bien le . par une , mais le format nombre
ne s'applique pas (pas de séparateur de milliers, pas de couleur rouge pour
les nombres négatifs).
Quelqu'un a-t-il une solution à me proposer ?
MERCI D'AVANCE.
Il existe plusieurs méthodes pour définir les zones à traiter. En s'inspirant de la méthode déjà choisie, voici un exemple :
Sub SeparateurCSV3() 'Voir Note 1 NbLignes = Range("A65536").End(xlUp).Row 'Voir Note 2 Set MaZone = Union(Range("D1:D" & NbLignes), Range("AA1:AA" & NbLignes))
For Each X In MaZone If InStr(1, X.Value, ".") <> 0 Then X.Value = Str(Replace(X.Value, ".", ",")) End If X.NumberFormat = "# ##0.00;[Red]-# ##0.00" Next End Sub
Note 1 : Y donne le nombre de lignes à traiter. Normalement chaque colonne contient le meme nb de lignes. Ici on prend la colonne A comme référence. (Astuce : le mieux c'est de définir ici la colonne où on est sur qu'il y a des données sans trou)
Note 2 : La ligne Set MaZone = Union(Range("D1:D" & Y), Range("AA1:AA" & Y)) permet de définir 2 zones à traiter. S'il n'y a qu'une zone, on tape seulement : Set MaZone = Range("D1:D" & Y), S'il y a 3 zones, on aura par exemple, pour la colonne K : Set MaZone = Union(Range("D1:D" & Y), Range("K1:K" & Y), Range("AA1:AA" & Y)) etc ... "Union" fait l'union des différentes zones "Range" le tout séparé par une vigule.
Note 3 : Dernier ce cas de figure, il n'est pas necessaire de traiter les lignes d'entete s'il y en a et la colonne la plus "haute" n'est pas forcément la A. Considérons que Z est la colonne la plus "haute" dans ce cas là le code serait :
Sub SeparateurCSV4() NbLignes = Range("Z65536").End(xlUp).Row Set MaZone = Union(Range("D2:D" & NbLignes), Range("AA2:AA" & NbLignes))
For Each X In MaZone If InStr(1, X.Value, ".") <> 0 Then X.Value = Str(Replace(X.Value, ".", ",")) End If X.NumberFormat = "# ##0.00;[Red]-# ##0.00" Next End Sub
Bon décodage ...
Bonsoir,
Il existe plusieurs méthodes pour définir les zones à traiter.
En s'inspirant de la méthode déjà choisie, voici un exemple :
Sub SeparateurCSV3()
'Voir Note 1
NbLignes = Range("A65536").End(xlUp).Row
'Voir Note 2
Set MaZone = Union(Range("D1:D" & NbLignes), Range("AA1:AA" & NbLignes))
For Each X In MaZone
If InStr(1, X.Value, ".") <> 0 Then
X.Value = Str(Replace(X.Value, ".", ","))
End If
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub
Note 1 :
Y donne le nombre de lignes à traiter. Normalement chaque colonne contient
le meme nb de lignes. Ici on prend la colonne A comme référence.
(Astuce : le mieux c'est de définir ici la colonne où on est sur qu'il y a
des données sans trou)
Note 2 :
La ligne Set MaZone = Union(Range("D1:D" & Y), Range("AA1:AA" & Y)) permet
de définir 2 zones à traiter.
S'il n'y a qu'une zone, on tape seulement : Set MaZone = Range("D1:D" & Y),
S'il y a 3 zones, on aura par exemple, pour la colonne K : Set MaZone =
Union(Range("D1:D" & Y), Range("K1:K" & Y), Range("AA1:AA" & Y))
etc ...
"Union" fait l'union des différentes zones "Range" le tout séparé par une
vigule.
Note 3 :
Dernier ce cas de figure, il n'est pas necessaire de traiter les lignes
d'entete s'il y en a et la colonne la plus "haute" n'est pas forcément la A.
Considérons que Z est la colonne la plus "haute" dans ce cas là le code
serait :
Sub SeparateurCSV4()
NbLignes = Range("Z65536").End(xlUp).Row
Set MaZone = Union(Range("D2:D" & NbLignes), Range("AA2:AA" & NbLignes))
For Each X In MaZone
If InStr(1, X.Value, ".") <> 0 Then
X.Value = Str(Replace(X.Value, ".", ","))
End If
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub
Il existe plusieurs méthodes pour définir les zones à traiter. En s'inspirant de la méthode déjà choisie, voici un exemple :
Sub SeparateurCSV3() 'Voir Note 1 NbLignes = Range("A65536").End(xlUp).Row 'Voir Note 2 Set MaZone = Union(Range("D1:D" & NbLignes), Range("AA1:AA" & NbLignes))
For Each X In MaZone If InStr(1, X.Value, ".") <> 0 Then X.Value = Str(Replace(X.Value, ".", ",")) End If X.NumberFormat = "# ##0.00;[Red]-# ##0.00" Next End Sub
Note 1 : Y donne le nombre de lignes à traiter. Normalement chaque colonne contient le meme nb de lignes. Ici on prend la colonne A comme référence. (Astuce : le mieux c'est de définir ici la colonne où on est sur qu'il y a des données sans trou)
Note 2 : La ligne Set MaZone = Union(Range("D1:D" & Y), Range("AA1:AA" & Y)) permet de définir 2 zones à traiter. S'il n'y a qu'une zone, on tape seulement : Set MaZone = Range("D1:D" & Y), S'il y a 3 zones, on aura par exemple, pour la colonne K : Set MaZone = Union(Range("D1:D" & Y), Range("K1:K" & Y), Range("AA1:AA" & Y)) etc ... "Union" fait l'union des différentes zones "Range" le tout séparé par une vigule.
Note 3 : Dernier ce cas de figure, il n'est pas necessaire de traiter les lignes d'entete s'il y en a et la colonne la plus "haute" n'est pas forcément la A. Considérons que Z est la colonne la plus "haute" dans ce cas là le code serait :
Sub SeparateurCSV4() NbLignes = Range("Z65536").End(xlUp).Row Set MaZone = Union(Range("D2:D" & NbLignes), Range("AA2:AA" & NbLignes))
For Each X In MaZone If InStr(1, X.Value, ".") <> 0 Then X.Value = Str(Replace(X.Value, ".", ",")) End If X.NumberFormat = "# ##0.00;[Red]-# ##0.00" Next End Sub
Bon décodage ...
benmat
Bonjour Garette,
Je te remercie une fois de plus pour ton aide précieuse. Je garde précieusement ces conseils en archive.
BON WEEK-END
Bonsoir,
Il existe plusieurs méthodes pour définir les zones à traiter. En s'inspirant de la méthode déjà choisie, voici un exemple :
Sub SeparateurCSV3() 'Voir Note 1 NbLignes = Range("A65536").End(xlUp).Row 'Voir Note 2 Set MaZone = Union(Range("D1:D" & NbLignes), Range("AA1:AA" & NbLignes))
For Each X In MaZone If InStr(1, X.Value, ".") <> 0 Then X.Value = Str(Replace(X.Value, ".", ",")) End If X.NumberFormat = "# ##0.00;[Red]-# ##0.00" Next End Sub
Note 1 : Y donne le nombre de lignes à traiter. Normalement chaque colonne contient le meme nb de lignes. Ici on prend la colonne A comme référence. (Astuce : le mieux c'est de définir ici la colonne où on est sur qu'il y a des données sans trou)
Note 2 : La ligne Set MaZone = Union(Range("D1:D" & Y), Range("AA1:AA" & Y)) permet de définir 2 zones à traiter. S'il n'y a qu'une zone, on tape seulement : Set MaZone = Range("D1:D" & Y), S'il y a 3 zones, on aura par exemple, pour la colonne K : Set MaZone = Union(Range("D1:D" & Y), Range("K1:K" & Y), Range("AA1:AA" & Y)) etc ... "Union" fait l'union des différentes zones "Range" le tout séparé par une vigule.
Note 3 : Dernier ce cas de figure, il n'est pas necessaire de traiter les lignes d'entete s'il y en a et la colonne la plus "haute" n'est pas forcément la A. Considérons que Z est la colonne la plus "haute" dans ce cas là le code serait :
Sub SeparateurCSV4() NbLignes = Range("Z65536").End(xlUp).Row Set MaZone = Union(Range("D2:D" & NbLignes), Range("AA2:AA" & NbLignes))
For Each X In MaZone If InStr(1, X.Value, ".") <> 0 Then X.Value = Str(Replace(X.Value, ".", ",")) End If X.NumberFormat = "# ##0.00;[Red]-# ##0.00" Next End Sub
Bon décodage ...
Bonjour Garette,
Je te remercie une fois de plus pour ton aide précieuse.
Je garde précieusement ces conseils en archive.
BON WEEK-END
Bonsoir,
Il existe plusieurs méthodes pour définir les zones à traiter.
En s'inspirant de la méthode déjà choisie, voici un exemple :
Sub SeparateurCSV3()
'Voir Note 1
NbLignes = Range("A65536").End(xlUp).Row
'Voir Note 2
Set MaZone = Union(Range("D1:D" & NbLignes), Range("AA1:AA" & NbLignes))
For Each X In MaZone
If InStr(1, X.Value, ".") <> 0 Then
X.Value = Str(Replace(X.Value, ".", ","))
End If
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub
Note 1 :
Y donne le nombre de lignes à traiter. Normalement chaque colonne contient
le meme nb de lignes. Ici on prend la colonne A comme référence.
(Astuce : le mieux c'est de définir ici la colonne où on est sur qu'il y a
des données sans trou)
Note 2 :
La ligne Set MaZone = Union(Range("D1:D" & Y), Range("AA1:AA" & Y)) permet
de définir 2 zones à traiter.
S'il n'y a qu'une zone, on tape seulement : Set MaZone = Range("D1:D" & Y),
S'il y a 3 zones, on aura par exemple, pour la colonne K : Set MaZone =
Union(Range("D1:D" & Y), Range("K1:K" & Y), Range("AA1:AA" & Y))
etc ...
"Union" fait l'union des différentes zones "Range" le tout séparé par une
vigule.
Note 3 :
Dernier ce cas de figure, il n'est pas necessaire de traiter les lignes
d'entete s'il y en a et la colonne la plus "haute" n'est pas forcément la A.
Considérons que Z est la colonne la plus "haute" dans ce cas là le code
serait :
Sub SeparateurCSV4()
NbLignes = Range("Z65536").End(xlUp).Row
Set MaZone = Union(Range("D2:D" & NbLignes), Range("AA2:AA" & NbLignes))
For Each X In MaZone
If InStr(1, X.Value, ".") <> 0 Then
X.Value = Str(Replace(X.Value, ".", ","))
End If
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub
Je te remercie une fois de plus pour ton aide précieuse. Je garde précieusement ces conseils en archive.
BON WEEK-END
Bonsoir,
Il existe plusieurs méthodes pour définir les zones à traiter. En s'inspirant de la méthode déjà choisie, voici un exemple :
Sub SeparateurCSV3() 'Voir Note 1 NbLignes = Range("A65536").End(xlUp).Row 'Voir Note 2 Set MaZone = Union(Range("D1:D" & NbLignes), Range("AA1:AA" & NbLignes))
For Each X In MaZone If InStr(1, X.Value, ".") <> 0 Then X.Value = Str(Replace(X.Value, ".", ",")) End If X.NumberFormat = "# ##0.00;[Red]-# ##0.00" Next End Sub
Note 1 : Y donne le nombre de lignes à traiter. Normalement chaque colonne contient le meme nb de lignes. Ici on prend la colonne A comme référence. (Astuce : le mieux c'est de définir ici la colonne où on est sur qu'il y a des données sans trou)
Note 2 : La ligne Set MaZone = Union(Range("D1:D" & Y), Range("AA1:AA" & Y)) permet de définir 2 zones à traiter. S'il n'y a qu'une zone, on tape seulement : Set MaZone = Range("D1:D" & Y), S'il y a 3 zones, on aura par exemple, pour la colonne K : Set MaZone = Union(Range("D1:D" & Y), Range("K1:K" & Y), Range("AA1:AA" & Y)) etc ... "Union" fait l'union des différentes zones "Range" le tout séparé par une vigule.
Note 3 : Dernier ce cas de figure, il n'est pas necessaire de traiter les lignes d'entete s'il y en a et la colonne la plus "haute" n'est pas forcément la A. Considérons que Z est la colonne la plus "haute" dans ce cas là le code serait :
Sub SeparateurCSV4() NbLignes = Range("Z65536").End(xlUp).Row Set MaZone = Union(Range("D2:D" & NbLignes), Range("AA2:AA" & NbLignes))
For Each X In MaZone If InStr(1, X.Value, ".") <> 0 Then X.Value = Str(Replace(X.Value, ".", ",")) End If X.NumberFormat = "# ##0.00;[Red]-# ##0.00" Next End Sub