Pb avec le séparateur décimal des paramètres régionaux

Utilisateur anonyme - 5 janv. 2002 à 17:23
Mutos Messages postés 103 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 14 mai 2010 - 27 déc. 2005 à 10:56
Ayant crée un exe faisant aditions et soustraction et mettant dans un fichier mémoire le résultat.
Pourquoi lorsque j'installe le programme sur un autre PC ayant le séparateur décimal des paramètres régionaux différent du mien (Soit la , aulieu du . ) le programme au lancement m'affiche "Erreur dexécution 13, Type incompatible" .
Pourquoi, et y a t'il une solution pour palier à ce problème.

Par avance Merci

4 réponses

Wardall Messages postés 40 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 10 décembre 2004
6 janv. 2002 à 17:43
Salut,

Il y a plusieurs solution mais la plus simple semble de valider la saisie de l'usager du genre :

If Not IsNumeric(maVariable) Then
... Ici le code pour formater la variable en nombre
End If

P.S. Pour formater la variable je te conseille la commande "Replace"
0
cs_ElFrances Messages postés 2 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 18 juin 2002
8 janv. 2002 à 15:30
Salut,

Je suppose que la réponse que l'on t'a fourni te convient, mais voici ma façon de faire. C'est une méthode de parresseux, mais elle fonctionne pas mal.

Le but est de connaitre le séparateur décimal. Pour ca, fait une petite gestion d'erreur sur CDbl() (fonction qui converti n'importe quel type numeric en un reel double). CDbl() prend en compte les parametres régionaux pour convertir. Alors si tu est dans une configuration avec séparateur 'point' il accepte à la fois le 'point' et la 'virgule' (du fait des standards microsoft). Par contre, et c'est la que c'est interressant, il declenche une erreur si tu est en mode separateur 'virgule' lorsque tu executes CDbl(1.1)... Tu reccuperres l'erreur et le tours est joué.

En bref et en code :

Private sub Toto()

on error goto AlorsVirgule

x = CDbl(1.1)
x = CDbl(1,1)

MsgBox "Le separateur est le point !"
exit sub

AlorsVirgule:
MsgBox "Le separateur est la virgule !"

End Sub

Voila, une fois que tu sais quel est ton séparateur, il te suffit d'utiliser Replace(...) pour remplacer le point ou la virgule suivant le cas échéant.

Esperant t'avoir apporté une réponse claire, n'hésite pas à me contacter : jb_el_frances@hotmail.com

JB El Frances.
0
Mutos Messages postés 103 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 14 mai 2010
27 déc. 2005 à 05:35
Bonjour à tous,


Après avoir vu plusieurs sujets sur ce problème, de 2002 (celui-ci) à 2004, il faut bien me résoudre à réaliser que personne n'a trouvé de solution. Je travaille sur VB.Net et je pensais à modifier la culture de l'application pour la rendre indépendante de celle de la machine, mais çà a l'air un peu plus sioux que ce que je croyais...


@+

Benoît 'Mutos' ROBIN
0
Mutos Messages postés 103 Date d'inscription mercredi 30 avril 2003 Statut Membre Dernière intervention 14 mai 2010
27 déc. 2005 à 10:56
Bonjour à tous,


Voilà la clé en VB.Net (en VB6 il y a peut-être une API mais je ne la connais pas), pour lui faire ignorer les paramètres régionaux :

Imports System.Globalization
Imports System.Threading
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")

A faire en début de programme (Main ou Load de la première forme). Ici on lui force la culture américaine avec le "." et tous les autres paramètres, mais on peut aussi faire plus subtil en créant une variable CultureInfo et en la modifiant à loisir !


@+

Benoît 'Mutos' ROBIN
0
Rejoignez-nous