Séparateur de décimale

Salut,

Histoire d'armoniser le fonctionnement de mes macros qui peuvent être amenées à tourner sur des PC masterisés en français ou en anglais, j'ai mis un

With Application
    .UseSystemSeparators = False
    .DecimalSeparator = "."
End With

au lancement de la macro pour être sûr du séparateur de décimal qui va être utilisé.

Et pourtant chaque fois qu'il y a un chiffre décimal c'est la virgule qui ressort.

J'aurais oublié quelque chose ?

Manu

Bonjour,

ce n'est pas si simple...

C'est le séparateur Application.International(xlDecimalSeparator) qu'on voit dans les décimaux sur feuille.

Par contre la fenêtre Execution de VBE,VBA et la fenêtre Espions utiliseront toujours le séparateur système quelque soit la position de Application.UseSystemSeparators ce qui met de la confusion.
Je peux très bien lire 2,5 dans une variable Double ou Variant/Double ou la fenêtre d'exécution alors que le séparateur en cours est le point, et vice-versa.

De plus attention, Val() utilise toujours le . en séparateur décimal qq soient les paramétrages.
Format() et Round() utilisent toujours Application.International(xlDecimalSeparator) !!! Quelque soit Application.UseSystemSeparators

eric

Merci de la réponse. Des fois on se demande ce qui est passé par la tête des développeurs qui ont conçu vba...

Du coup est ce qu'il est possible de faire remonter le séparateur système ? Je stocke des séries de nombres décimaux dans une seule cellule, séparés par des points virgule. Quand je les extraits je dois pouvoir remplacer le séparateur qui a été stocké (point ou virgule) dans la cellule par le séparateur de décimal qui est utilisé par vba.

Si c'est pas possible de remonter le séparateur système, je verrais pour chaque fois forcer un séparateur pour le stockage dans Excel et tester à l'extraction si la valeur est numérique pour au besoin remplacer le séparateur par l'autre. Mais ça alourdirait quand même pas mal le process. Le point positif c'est que le cas se présentera que pour quelques cas bien identifiés, j'aurai pas besoin de prévoir la possibilité pour toutes les valeurs numériques du projet.

Par contre je suis surpris par la remarque sur le Val, il me semblait que justement il ne gérait pas les décimales. J'ai dû utiliser CDbl pour convertir mes chaines de caractère en nombres décimaux, le Val ne conservait que la partie entière.

Manu

Je pense qu'ils se sont surtout attachés à la partie visuelle sur feuille.
Même leur doc est fausse à ce sujet...

Pour moi, le plus simple pour avoir le séparateur en cours quels que soient les paramètres régionaux et/ou excel est : DecimalSeparator = Mid$(2.1, 2, 1)
(et =STXT(1/2;2;1) sur feuille)
Mais il faut penser à tenir compte du fait que certaines instructions VBA n'en tiennent pas compte.
La liste citée au-dessus n'est peut-être pas exhaustive

je suis surpris par la remarque sur le Val, il me semblait que justement il ne gérait pas les décimales.

si, mais il fait partie des exceptions VBA justement. Il veut absolument le . en séparateur, quels que soient les réglages.
[A1].value = Val("2.5") t'affiche bien 2.5 (ou 2,5) dans tous les cas de figure.
eric

Ok merci de l'info. Je regarde ça.

Manu

Rechercher des sujets similaires à "separateur decimale"