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
Ange Ounis
Juste en passant, sans aller plus loin dans le code proposé,
les lignes en rouge proviennent d'un copier/coller qui coupe une instruction qui
devrait se trouver sur une seule ligne. Essaye :

Set MaZone = Union(Range("D1:D" & Range("D65536").End(xlUp).Row), _
Range("AA1:AA" & Range("AA65536").End(xlUp).Row))

----------
Ange Ounis
----------

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







Avatar
Garette
Bonsoir,

Oui, autant pour moi, il faut faire comme le dit Ange Ounis... il faut
couper la ligne par un underscore.
Tu confirmes que quand tu fais le "Edition remplacer etct ..." à la main,
sans macro, la conversion est OK ?

Merci de me dire si la macro fonctionne car j'ai vraiement reproduit sur XL
2000 et 2002 un pb équivalent au tiens.
Et résolu par ces macros ;-)
Avatar
benmat
Bonjour Garette et Ange Ounis,

J'ai essayé d'appliquer la macro comme indiqué par Ange et j'ai bien cru que
la solution avait enfin été trouvée....OUF... malheureusement, cela ne
fonctionne pas correctement :

* Pour les montants qui au départ n'ont ni point , ni séparateur de milliers
: rien ne change après avoir fait tourner la macro. Pas de décimales après
la virgule, pas de séparateur de milliers. Pas de rouge pour les nombres
négatifs.

* Par contre, pour les cellules dont le montant apparaît dès le départ avec
2 chiffres après un point, tout est correct.

Je confirme à Garette que lorsque je fais manuellement à l'ouverture du
fichier, Edition remplacer . par , et ensuite format cellule nombre avec 2
décimales, le séparateur de milliers et le rouge pour les nombres négatifs...
Tout fonctionne.

Merci à vous deux pour votre aide.
Bonne journée.



Bonsoir,

Oui, autant pour moi, il faut faire comme le dit Ange Ounis... il faut
couper la ligne par un underscore.
Tu confirmes que quand tu fais le "Edition remplacer etct ..." à la main,
sans macro, la conversion est OK ?

Merci de me dire si la macro fonctionne car j'ai vraiement reproduit sur XL
2000 et 2002 un pb équivalent au tiens.
Et résolu par ces macros ;-)






Avatar
Garette
Bonjour,

On n'est pas loin du but ...
Est-ce que tu pourrais éventuellement mettre un échantillon de ton fichier
qui pose probleme (apres ouverture sous Excel et avant execution de la
macro) sur http://cjoint.com/ ? Ce serait plus facile pour tester les
solutions.

Dans une cellule sans séparateur décimal, et qui donc n'est pas modifié par
la macro :
- Dans la barre de formule, y a t il un apostrophe ou des guillemets ?
- Dans Format/Cellule/nombre, quel est le format ? Standard ? Texte ? ou
autre ?

En ouvrant le fichier CSV avec le blocnote, il ressemble à quoi ?

Le fait de faire, à la main, Edition Remplacer "." par "," a une incidence
sur les valeurs qui ne possèdent pas de séparateur ??
Avatar
benmat
Effectivement, on ne doit pas être loin du but.
Tu trouveras un échantillon de mon fichier sur http://cjoint.com/
Le nom du fichier est TEST_factures.xls

Voici les réponses à tes questions :
- Dans la barre de formule, y a t il un apostrophe ou des guillemets ? NON
- Dans Format/Cellule/nombre, quel est le format ? Standard ? Texte ? ou
autre ? FORMAT Cellule STANDARD
Le fait de faire, à la main, Edition Remplacer "." par "," a une incidence

sur les valeurs qui ne possèdent pas de séparateur ?? NON, aucune incidence


Merci encore de "plancher" sur mon problème.



Bonjour,

On n'est pas loin du but ...
Est-ce que tu pourrais éventuellement mettre un échantillon de ton fichier
qui pose probleme (apres ouverture sous Excel et avant execution de la
macro) sur http://cjoint.com/ ? Ce serait plus facile pour tester les
solutions.

Dans une cellule sans séparateur décimal, et qui donc n'est pas modifié par
la macro :
- Dans la barre de formule, y a t il un apostrophe ou des guillemets ?
- Dans Format/Cellule/nombre, quel est le format ? Standard ? Texte ? ou
autre ?

En ouvrant le fichier CSV avec le blocnote, il ressemble à quoi ?

Le fait de faire, à la main, Edition Remplacer "." par "," a une incidence
sur les valeurs qui ne possèdent pas de séparateur ??





Avatar
benmat
Voici l'adresse exacte où se trouve mon fichier

http://cjoint.com/confirm.php?cjoint=lhqA7SD2vy


Bonjour,

On n'est pas loin du but ...
Est-ce que tu pourrais éventuellement mettre un échantillon de ton fichier
qui pose probleme (apres ouverture sous Excel et avant execution de la
macro) sur http://cjoint.com/ ? Ce serait plus facile pour tester les
solutions.

Dans une cellule sans séparateur décimal, et qui donc n'est pas modifié par
la macro :
- Dans la barre de formule, y a t il un apostrophe ou des guillemets ?
- Dans Format/Cellule/nombre, quel est le format ? Standard ? Texte ? ou
autre ?

En ouvrant le fichier CSV avec le blocnote, il ressemble à quoi ?

Le fait de faire, à la main, Edition Remplacer "." par "," a une incidence
sur les valeurs qui ne possèdent pas de séparateur ??





Avatar
Garette
Bonsoir,

Il me dit qu'il y a un mot de passe sur le fichier ...
Avatar
benmat
Bonjour,

Je suis désolée mais je ne sais pas ce qui s'est passé car de mon côté,
j'ouvre ce fichier sur mon poste de travail sans aucun mot de passe. Je pense
qu'il y a peut-être un pb d'accès sur ce site à partir de mon poste de
travail. Si tu rencontres à nouveau cette difficulté, je referai une
tentative à partir de mon poste de travail "domicile".
Voici le lien : http://cjoint.com/data/lihXnN1cAu.htm

Encore merci.
Bonne journée.




Bonsoir,

Il me dit qu'il y a un mot de passe sur le fichier ...





Avatar
Garette
Bonsoir,

Dans ton fichier, je vois les données sans séparateur décimal reconnu comme
du numérique, donc normalement c'est bon.
Le format nom n'est pas appliqué car je l'avais mis dans le test If
(seulement pour les nb décimaux)
SeparateurCSV2() corrige le tir, ça doit fonctionner dans tous les cas :

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, ".", ","))
End If
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub

-------------------------------------------------------
Si il y avait encore un pb (seulement si), essaye celle-ci :

Sub SeparateurCSV3()
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, ".", ","))
End If
X.Value = X.Value
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub
Avatar
benmat
bonjour,

Je viens de tester les 2 macros et tout fonctionne à merveille.
J'ai encore une petite question : en fonction des requêtes que je fais, il
peut y avoir 3, voire 4 colonnes ou plus qui se présentent de la même façon.
Comment puis-je procéder pour étendre la macro.
Je suis désolée, ma question peut te sembler "basique" mais je ne suis pas
du tout experte comme tu as pu le constater.

Je te remercie pour tout le temps que as consacré à mon pb.

Bonne journée.




Bonsoir,

Dans ton fichier, je vois les données sans séparateur décimal reconnu comme
du numérique, donc normalement c'est bon.
Le format nom n'est pas appliqué car je l'avais mis dans le test If
(seulement pour les nb décimaux)
SeparateurCSV2() corrige le tir, ça doit fonctionner dans tous les cas :

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, ".", ","))
End If
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub

-------------------------------------------------------
Si il y avait encore un pb (seulement si), essaye celle-ci :

Sub SeparateurCSV3()
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, ".", ","))
End If
X.Value = X.Value
X.NumberFormat = "# ##0.00;[Red]-# ##0.00"
Next
End Sub





1 2 3