"." ou "," avec VBA & Userform

jeromegmc

XLDnaute Occasionnel
Salut à tous,

J'ai un fichier xls. avec un user form, lorsque j'écris dans un textbox le chiffre 6.5, ce chiffre s'écrit avec un point (normal car dans mes options régionales je suis paramétré en '.' et pas en ',').

Cependant quand je ferme et je réouvre mon userform, il va rerchercher ce 6.5 dans une cellule, grace à un sub UserForm_Initialize, mais mon 6.5 devient un 6,5 (le '.' se transforme en ',') et c'est dérangeant: les calculs ne tournent plus (résultats avec #VALEUR!).

J'ai trouvé la solution suivante: Dans options régionales changer le '.' en ','

Mais cette solution est dérangeante car ce n'est pas le paramètre par défaut des PC dans la société.

Quelqu'un à une solution?
 

jeromegmc

XLDnaute Occasionnel
Re:\".\" ou \",\" avec VBA & Userform

Resalut,

Pascal76 ta solution ne marche pas, j'ai utilisé la fonction cdbl lors de l'écriture du textbox vers la cellule et puis dans l'autre sens (au moment de l'init) mais je récupère toujours mon chiffre avec une virgule.

D'autres solutions?

Voici un fichier joint, faite le test

A+

[file name=point_ou_virgule.zip size=10099]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/point_ou_virgule.zip[/file]

Message édité par: jeromegmc, à: 12/09/2005 16:39
 

Pièces jointes

  • point_ou_virgule.zip
    9.9 KB · Affichages: 51

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

Excuse moi mais j'ai fait des tests en ajoutant la commande CDbl sur le fichier joint en modifiant mes paramètres régionaux et c'est toujours considérés comme du nombre

Alors je ne vois pas ce qui ne marche pas [file name=pointouvirgule.zip size=9224]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/pointouvirgule.zip[/file]
 

Pièces jointes

  • pointouvirgule.zip
    9 KB · Affichages: 54

jeromegmc

XLDnaute Occasionnel
Salut,


Petite question: Es-tu paramètré en '.' ou en ',' dans tes paramètres régionaux?

Car en fait tous les PC de ma boite sont paramètrés en '.' et quand je réouvre le userform, le chiffre reviens avec une virgule. (même avec ton fichier en utilisant Cdbl)

A+
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Pascal, Jerome, GiMoinOnze (lol), le Forum

Je vais partir pour le bureau, je regarderai ça car je suis en version 100% US là bas.

Entre temps si tu es sous Office XP (2002 ou 2003) il y a aussi en plus des paramètres de Windows, des paramétres locaux à Excel pour différents formats internationaux (Menu/Outils/Option), il faudrait peut être voir par là...

Bonne Journée
[ol]@+Thierry[/ol] (J - 11)
 

Ti_

Nous a quitté
Repose en paix
Re:\".\" ou \",\" avec VBA & Userform

Bon, comme le sujet est récurrent, voilà la solution que j'utilise pour ne pas avoir à me préoccuper de ces paramètres de virgules ou de points quand il s'agit de saisir des valeurs numériques dans un textbox :
Tout d'abord, la fonction miracle à garder pour toutes les saisies et que vous pouvez coller dans un module.

Function Valeur#(ByVal StrVal$)
Valeur = Val(Replace(StrVal, ',', '.'))
End Function

Ensuite,( pour faire simple), on peut appeler cette fonction au moment de placer la valeur dans la feuile par exemple, avec une instruction du genre :

Range('A4').Value = Valeur(TextBox1.Text)

Et voilà, plus de problème et l'utilisateur peut bien mettre une virgule ou un point, comme il le sent, ça ne changera rien à l'arrivée.

Evidemment, en situation réelle, je vérifie dès la frappe que le séparateur décimal, dans le textbox, soit toujours une virgule, ou un point (question de cohérence, pour n'afficher que des points, ou des virgules). Mais de toute façon, au final, avant d'injecter ma valeur dans une cellule, je procède comme ci-dessus.

Message édité par: Ti_, à: 13/09/2005 09:45
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Ti, re Pascal, re Jerome, le Forum

Interressante Function Ti. Pour ma part j'ai testé sur un PC 100% en US et je n'ai pas de souci avec le fichier posté par Pascal.


Et sinon à l'époque pour une démo pour notre copain Vériland, qui m'avait posé une colle pour utiliser le '.' du pavé numérique, j'avais déniché ceci :

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Solution de Cedric sur le MPFE
If KeyAscii = 44 Or KeyAscii = 46 Then
KeyAscii = Asc(Application.International(xlDecimalSeparator))
End If
End Sub

C'est pour avoir en temps réel de saisie le bon séparateur. Mais ce peut être un complément de la Function de Ti.


Un dernier point interressant pour faire suite à mon précédent Post, à l'époque d'Excel 4 (ou 5 je suis plus certain) on pouvait paramétrer localement pour Excel les Paramètres Régionaux indépendemment de ceux de Windows... Cette option avait été ensuite abandonnée depuis Excel 95 / 97 / 2000... Et je note maintenant sa ré-aparition sous Excel 2002 et 2003...

A priori, c'est un souci de plus à gérer pour les développeurs... Car ce paramètrage local semble primer sur la saisie en Cellule par rapport aux paramétrages de Windows mais pas sur les ActiveX de UserForm (Of Course)...

Pour moi perso, sur des applis qui tournent en réseau avec du Numérique en saisie par UserForm, afin d'éviter bien des surprises, je passe par une petite routine comme suit :

Option Explicit

Sub MacroDeLancement()
Dim UserChoiseSystemSep As Boolean
   
On Error Resume Next 'Si nous sommes sur une version antérieure
   
With Application
        UserChoiseSystemSep = .UseSystemSeparators
        .UseSystemSeparators =
True
   
End With
On Error GoTo 0

LeOuLesMacros

On Error Resume Next ' Si On est sur une version antérieure
      Application.UseSystemSeparators = UserChoiseSystemSep
End Sub

Bonne Journée

[ol]@+Thierry[/ol] 'D'Day - 11 sans Virgule LOL'
 

Ti_

Nous a quitté
Repose en paix
oui, enfin la fonction Val n'a que faire de ces subtilités internationales (puisqu'elle n'utilise jamais que le point, quel que soit le système utilisé), et je trouve ça très bien ainsi, c'est pourquoi je recommande de ne garder que le point ou la virgule (au choix) ou même les deux, puis de convertir au final la valeur alphanumérique avec ma fonction Valeur avant de l'injecter dans une cellule. Excel recevra alors une vraie valeur numérique qui ne lui posera plus de problème.

Sinon pour récupérer le séparateur décimal en cours sur la machine, voici la fonction perso que j'utilise pour m'affranchir des problèmes de versions d'Excel :

Function DecimalSeparator$() 'Ti
DecimalSeparator = Mid$(2.1, 2, 1)
End Function
 

jeromegmc

XLDnaute Occasionnel
Merci les VBA boys, avec ça je devrais m'en sortir et ne plus rencontrer le problème.

Petite question tout de même: Pourquoi VBA qui est en anglais utilise
comme séparateur de décimal la ',' ce qui n'est pas le système international?

et de plus pourquoi VBA n'est pas lié aux paramètres régionaux?


A+
 

Ti_

Nous a quitté
Repose en paix
non c'est le contraire, Val ne reconnaît que le point et pas la virgule. Pourquoi il ne s'occupe pas des paramètres régionaux ? Ben, parce que les nombres sont toujours écrits dans un programme avec le point comme séparateur, du genre :
Const Pi = 3.14

Et puis il existe tout un tas de fonctions pour retrouver le séparateur décimal local, comme Format, la fonction que j'ai mise au dessus etc.
 

Discussions similaires

Réponses
2
Affichages
661

Statistiques des forums

Discussions
315 096
Messages
2 116 172
Membres
112 676
dernier inscrit
little_b