[Catégorie modifiée VB6 --> VBA] Format décimal [Résolu]

Messages postés
46
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
13 septembre 2010
- - Dernière réponse : YEBOKOLO
Messages postés
46
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
13 septembre 2010
- 13 sept. 2010 à 13:23
Bonjour à toutes et à tous,

Je reçois, de l'intranet de la société, un fichier au format Excel, les chiffres sont dans un format particulier :
- les chiffres ronds par exemple 15 ou 20 sont écrits tel quel
- les chiffres avec décimales sont écrits 18.1 (avec un point et non une virgule)
ne me demandez pas pourquoi, le fichier est écrit non pas en php mais avec un logiciel qui s'appelle 4D ?quelque chose ?

Bref, pour traiter mon fichier et en tirer des reportings, je fais :

Sub Select_et_remplace()

Range("C9:AF350").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

Range("C9:AF350").Select
Selection.NumberFormat = "0.00"

??????

Or, si je remplace bien le point par la virgule, rien à faire pour le format 0,00. Cela ne me gêne pas pour utiliser des formules de toutes sortes même matricielles ; mais à la lecture, ceux à qui les reportings sont destinés rallent (il y a des en? de mouches).

Mais plus grave en récupérant les chiffres qui m?intéressent dans un tableau pour générer un graphique, c'est impossible ; pour générer ce graphique je dois recopier à la mano dans un tableau identique les chiffres pour y arriver.

Est-ce que problème dit quelque chose à quelqu'un ou bien est-ce que je déconne quelque part ?

Dans l'attente d'une réponse (mais de grâce ne me dites pas que je déconne) et avec mes remerciements,

Cordialement.
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
58
3
Merci
Salut

Mets toi dans la tête que le VB de Excel est du VBA, pas du VB6.

Le format d'affichage des données est subordonné aux choix de l'utilisateur dans les paramètres de régionalisation.
Sous Excel, Application.DecimalSeparator te fournira le séparateur utilisé.
Par contre, tout ce qui touche aux données elles-mêmes sont toujours au format US, c'est à dire avec un point en guise de séparateur.
Il ne faut donc pas chercher à imposé un format "0,00" avec le séparateur local, mais toujours utiliser le séparateur 'international', le point.

Il faut bien dissocier la donnée brute et la donnée telle qu'elle est affichée.
Lorsque tu importes tes données avec le point, Excel ne les convertit pas automatiquement, il te faudra donc toujours faire ta conversion, si possible plus générique :
Selection.Replace What:=".", Replacement:=Application.DecimalSeparator, ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 133 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
46
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
13 septembre 2010
0
Merci
Bonjour,

Je te remercie.
Mais ma tête est dure, d'autant plus dure qu'elle est déjà bien vieillle.
Jusqu'à il y a peu de temps, Excel n'était pour moi qu'une façon commode de faire des tableaux avec des totaux, des moyennes et à la rigueur une rechercheV.
Tu vois donc la distance qu'il me reste encore à parcourir.
C'est donc tout à fait pour cela que j'apprécie d'avoir des réponses et que je t'en remercie.
Cordialement.
Yebokolo.
Commenter la réponse de YEBOKOLO
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8
0
Merci
Salut,

il y a une methode plus simple et indépendante de la config régionale :


ActiveCell.Value = Val(ActiveCell.Value)


Comme dans ton cas le point n'est pas reconnu comme le séparateur décimal, excel interprète ton nombre en chaîne.
Pour résoudre le problème il suffit de convertir la chaîne en nombre. C'est ce que fait la fonction Val()

A+
Commenter la réponse de bigfish_le vrai
Messages postés
46
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
13 septembre 2010
0
Merci
Salut,

Je te remercie, j'ai trouvé hier soir tard une solution:

With Range([c9], [C350].End(xlUp))
.TextToColumns Destination:=.Cells(1, 1), DecimalSeparator:="."
.NumberFormat = "0.00"
End With

que j'ai appliqué à chaque collone de C à AF

Bien sur je pourrais encore améliorer en faisant une boucle pour ne pas avoir à répéter 30 fois le code, mais je le ferai plus tard, l'essentiel est que cela fonctionne, alléger le code viendra plus tard.

Encore merci.

Cordialement.
Yebokolo
Commenter la réponse de YEBOKOLO