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

Résolu
YEBOKOLO Messages postés 46 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 13 septembre 2010 - 12 sept. 2010 à 13:25
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.

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 sept. 2010 à 13:46
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)
3
YEBOKOLO Messages postés 46 Date d'inscription jeudi 10 mars 2005 Statut Membre Dernière intervention 13 septembre 2010
12 sept. 2010 à 14:44
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.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
13 sept. 2010 à 10:08
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+
0
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
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
0
Rejoignez-nous