OVH Cloud OVH Cloud

pb de MACRO

22 réponses
Avatar
benmat
Bonjour,

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.


Columns("D:D").Select
Selection.NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 "
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Columns("AA:AA").Select
Selection.NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 "
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

10 réponses

1 2 3
Avatar
Garette
Bonjour,

Est-ce qu'il ne reste pas des espaces dans la cellule ?
Avatar
benmat
Bonjour,
Il ne reste apparemment pas d'espaces dans la cellule.
La macro s'applique bien pour un certain nombre de cellules, qui
apparaissent bien avec un séparateur de milliers et les montants négatifs en
rouge.
Par contre, pour d'autres cellules, les chiffres restent alignés sur le côté
gauche de la cellule (sans aucune séparation, sans application de la couleur
rouge pour les montants négatifs). A l'affichage, un petit triangle vert
apparaît dans le coin supérieur gauche de la cellule pour celles qui n'ont
pas été mises en forme correctement.

Merci d'avance pour une aide quelconque.



Bonjour,

Est-ce qu'il ne reste pas des espaces dans la cellule ?





Avatar
Garette
Bonsoir,

Peux tu donner une exemple de ce que contient une cellule qui ne fonctionne
pas ?
En lisant ce qui est affiché dans la barre de formule.

Sur cette meme cellule, quel est le format nombre (en verifiant par le menu
Format/Cellule) ?

Sur cette meme cellule toujours, y a t il une apostrophe avant la valeur qui
s'affiche ?

Dans une cellule à coté, peux tu taper =NBCAR(X) ou X est la reference de
la cellule posant probleme.
Le nombre de caractere est-il conforme à ce qu'on voit dans la barre de
formule ?

Que dit le petit triangle vert ? Dit-il "Nombre stocké sous forme de texte"
?
Avatar
benmat
bonjour,

Je te remercie de bien vouloir t'intéresserà mon problème.
Je vais essayer d'être explicite mais ce n'est pas garanti.
Dans l'export .csv que je veux convertir en .xls, tous les montants sont au
départ au format STANDARD ; certains apparaissent avec 2 chiffres après le
point, d'autres n'ont pas de point.

* Pour les montants qui n'ont pas de point : ils sont corrects après avoir
fait tourner la macro. Ils sont bien au format NOMBRE avec 2 décimales après
la virgule, avec le séparateur de milliers et les nombres négatifs en rouge.

* Par contre, pour les cellules dont le montant apparaît dès le départ avec
2 chiffres après un point, le format cellule est bien le nombre avec 2
décimales et le séparateur de milliers et les montants négatifs en rouge.
Mais en réalité, dans le triangle vert, apparaît "le nombre dans cette
cellule est au format texte ou précédé d'une aspostrophe".
Dans la barre de formule, il n'y a pas d'apostrophe.
A titre d'exemple, voici ce qui apparaît dans la barre de formules : 22805.6
et NBCAR de cette cellule = 7

J'ai l'impression que je vais devoir faire tourner ma macro sans ce format
nombre et je ferai ensuite mes modifications en remplaçant également le . par
une ,

MERCI DE TON AIDE EVENTUELLE.



Bonjour,

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.


Columns("D:D").Select
Selection.NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 "
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse
Columns("AA:AA").Select
Selection.NumberFormat = "#,##0.00_ ;[Red]-#,##0.00 "
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:úlse, SearchFormat:úlse, _
ReplaceFormat:úlse



Avatar
Garette
Bonjour,

Je n'arrive pas à reproduire :-(
La donnée dans la cellule a l'air OK.

Le Fichier CSV s'ouvre sans probleme (en ventilant les données dans les
cellules) ?
Au niveau systeme, le separateur des millier est l'espace et le séparateur
decimal est la virgule ?
Quelle est la version d'Excel ?
Le 22805.6 est il à G ou à D dans la cellule ?

Que se passe t il si :
- tu ouvres le fichier à la main (sans macro)
- que tu fais le remplacement . par , à la main
- que tu appliques le format nombre à la main
Avatar
benmat
La version que j'utilise est Excel 2003.
Les chiffres qui posent pb dès le départ (pas de séparateur de milliers et
. au lieu de la ,) sont alignés dès l'ouverture du fichier.CSV à gauche dans
la colonne.
Mon fichier .CSV s'ouvre sans problème et si j'applique (sans macro) le
format nombre aux colonnes souhaitées et qu'ensuite je remplace le . par la ,
je n'ai aucun souci.
Mon but était d'éviter de refaire la manip manuellement car il s'agit de
plusieurs exports que je fais pratiquement quotidiennement mais je crois que
je vais devoir procéder ainsi.

Merci tout de même pour le temps que tu as consacré à mon problème.




Bonjour,

Je n'arrive pas à reproduire :-(
La donnée dans la cellule a l'air OK.

Le Fichier CSV s'ouvre sans probleme (en ventilant les données dans les
cellules) ?
Au niveau systeme, le separateur des millier est l'espace et le séparateur
decimal est la virgule ?
Quelle est la version d'Excel ?
Le 22805.6 est il à G ou à D dans la cellule ?

Que se passe t il si :
- tu ouvres le fichier à la main (sans macro)
- que tu fais le remplacement . par , à la main
- que tu appliques le format nombre à la main





Avatar
Garette
Bonsoir,

Dans ton cas de figure je ferai la chose suivante :
- Ouvrir le fichier CSV sous Excel
- Outils/Macro/Nouvelle Macro (pour enregistrer un petit bout de code)
- Edition/Remplacer . par ,
- Format/Cellule/Nombre (en choisissant un des formats standard simple)
- Arreter l'enregistrement de la macro.

Si le résultat est bon, enregistrer la macro créée dans un autre fichier.
Fermer le CSV sans le sauvegarder, le rouvrir et ré-executer la macro.

Si la macro fonctionne, la comparer avec celle qui ne fonctionne pas et/ou
garder celle-ci.

Si la macro ne fonctionne pas, là y a un problème :-(
Avatar
Garette
Bonsoir,

J'ai enfin réussi à reproduire qq chose qui ressemble à ton problème.
Et j'ai peut etre des solutions ;-)

Peux-tu essayer les 2 macros ci-dessous ?
SeparateurCSV2() est peut etre plus fiable.
Au niveau systeme (panneau de configuration), le séparateur des milliers est
l'espace et le separateur de décimale est la virgule.


Sub SeparateurCSV()
Set MaZone = Union(Range("D1:D" & Range("D65536").End(xlUp).Row),
Range("AA1:AA" & Range("AA65536").End(xlUp).Row))
For Each X In MaZone
X.Value = X.Value
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub

Sub SeparateurCSV2()
Set MaZone = Union(Range("D1:D" & Range("D65536").End(xlUp).Row),
Range("AA1:AA" & Range("AA65536").End(xlUp).Row))
For Each X In MaZone
If InStr(1, X.Value, ".") <> 0 Then
X.Value = Str(Replace(X.Value, ".", ","))
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
End If
Next
End Sub
Avatar
benmat
bonjour,

J'avais testé cette manip avant de m'adresser à ce groupe de discussion.
Mais cela ne fonctionne pas.


Bonsoir,

Dans ton cas de figure je ferai la chose suivante :
- Ouvrir le fichier CSV sous Excel
- Outils/Macro/Nouvelle Macro (pour enregistrer un petit bout de code)
- Edition/Remplacer . par ,
- Format/Cellule/Nombre (en choisissant un des formats standard simple)
- Arreter l'enregistrement de la macro.

Si le résultat est bon, enregistrer la macro créée dans un autre fichier.
Fermer le CSV sans le sauvegarder, le rouvrir et ré-executer la macro.

Si la macro fonctionne, la comparer avec celle qui ne fonctionne pas et/ou
garder celle-ci.

Si la macro ne fonctionne pas, là y a un problème :-(





Avatar
benmat
Rebonjour,

J'ai testé tes 2 macros mais cela ne fonctionne pas.
Dans l'une, comme dans l'autre, les 2 première lignes (à partir de Set
Mazone) apparaissent en rouge.
Et pourtant j'ai fait un "copier" "coller" à partir de ton message.

Merci quand même pour ton aide.



Bonsoir,

J'ai enfin réussi à reproduire qq chose qui ressemble à ton problème.
Et j'ai peut etre des solutions ;-)

Peux-tu essayer les 2 macros ci-dessous ?
SeparateurCSV2() est peut etre plus fiable.
Au niveau systeme (panneau de configuration), le séparateur des milliers est
l'espace et le separateur de décimale est la virgule.


Sub SeparateurCSV()
Set MaZone = Union(Range("D1:D" & Range("D65536").End(xlUp).Row),
Range("AA1:AA" & Range("AA65536").End(xlUp).Row))
For Each X In MaZone
X.Value = X.Value
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub

Sub SeparateurCSV2()
Set MaZone = Union(Range("D1:D" & Range("D65536").End(xlUp).Row),
Range("AA1:AA" & Range("AA65536").End(xlUp).Row))
For Each X In MaZone
If InStr(1, X.Value, ".") <> 0 Then
X.Value = Str(Replace(X.Value, ".", ","))
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
End If
Next
End Sub





1 2 3