XL 2013 Excel VBA : 3 décimales

Golfolies

XLDnaute Nouveau
Bonjour à tous,
Je rencontre la difficulté suivante avec mon prix. Le prix doit avoir 3 décimales, ex : 1.111
1) Avec mon code vba, lorsque je saisis 1.111 par exemple dans le formulaire, ma BDD m'indique bien 1,111 €. Tout va bien
2) Lorsque je saisis un 0 en troisième position ou en seconde position, ex : 1.101 ou 1.100, l'indication dans la BDD est exacte également : 1.101 € ou 1.100 €.
3) Par contre, en mettant dans le formulaire un 0 en dixième (ex : 1.011) le renvoie dans ma base est incompréhensible. Un chiffre provenant de je ne sais d'où... et celui-ci est aligné à gauche.
4) idem si je mets en nombre entier comme par exemple 2. Même résultat que ci-dessus.

Merci pour vos aides bien précieuses.
Olivier
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Olivier,

bienvenue sur le site XLD ! :)

dans un formulaire, une TextBox est du texte ; le nombre 1.011 que tu as saisi est donc du texte ; c'est pour ça qu'il est aligné à gauche dans ta base de données ; tu dois convertir le nombre texte en vrai nombre numérique ! par exemple : [A1] = Val(TextBox1) ; mais attention : ça marche avec le séparateur décimal point « . », et ça plante avec une virgule « , » ! aussi, utilise plutôt :

[A1] = Val(Replace$(TextBox1, ",", "."))

ainsi, pour taper le séparateur décimal, l'utilisateur pourra utiliser au choix le point (du pavé numérique) ou la virgule (de la touche « ? ») ; note que si l'utilisateur tape du texte par mégarde, ça ne plantera pas car Val("abc") = 0 (➯ valeur zéro).

remarque : [A1] est la notation abrégée de Range("A1")
soan
 
Dernière édition:

Golfolies

XLDnaute Nouveau
Bonjour Soan,
Merci pour ta réponse.
Je vais tester.
Dans mes questions, il y avait également celle ou le 1er zéro après la virgule renvoyait un chiffre inventé par....
Ta proposition de code solutionne également cette situation ?
Merci,
Golfolies
 

soan

XLDnaute Barbatruc
Inactif
@Golfolies

voici un petit complément : c'est bien possible aussi que le chiffre « inventé » est dû à une précision numérique simple au lieu d'une précision numérique double ; par exemple, pour déclarer une variable numérique Nbr :​

utiliser Dim Nbr As Double au lieu de Dim Nbr As Single ou en notation abrégée :

utiliser Dim Nbr# au lieu de Dim Nbr! ; tu as aussi : Dim Nbr As Currency ou Dim Nbr@

Currency = Monétaire ; regarde l'Aide VBA pour plus d'infos sur ce format numérique.

NB : avec Excel, la précision numérique maximale est de 15 décimales.


soan
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Olivier,

tu as écrit : « J'ai procédé à la modification que tu m'as indiquée. Ça fonctionne. »

parfait ! 👍 :)



tu as écrit : « Merci pour ton aide et les explications très claires. Bravo. »

merci pour ton appréciation ! 😊



tu as écrit : « Sois certaine, que d'autres questions vont arrivées.... :) »

je le corrige en : « Sois certain que d'autres questions vont arriver.... :) »

car si tu regardes mon profil, tu verras que je suis un Homme. ;)



« J'avais trouvé une fonction CCur pour éventuellement corriger l'erreur.
Quelles différences y a-t-il entre les deux ? »


la différence, c'est que pour Dim Nbr As Currency ou Dim Nbr@ la variable Nbr est considérée comme devant être traitée comme un nombre ayant une précision monétaire, alors que pour CCur(), c'est une fonction de conversion d'un type autre que Currency en Currency.​

soan
 
Dernière édition:

Golfolies

XLDnaute Nouveau
Top.
le "e" de certain n'a pas été volontaire, du coup "cher Monsieur" milles excuses 😂

Je n'ai pas mis de Dim dans mon code pour spécifier la variable.
J'ai procédé uniquement à la modification "Val..." et ça fonctionne.
Du coup, faut-il avant d'utiliser les Zones Textes ou Cbo ou autres, définir ces variables juste après Sub ?
Des questions, à coup sûr pour toi, de débutant dans le codage, mais je le suis comme indiqué dans ma présentation.

Golfolies
 

soan

XLDnaute Barbatruc
Inactif
tu as écrit : « faut-il avant d'utiliser les Zones Textes ou Cbo ou autres, définir ces variables »

oh la ! attention : les zones de texte (TextBox) et les ComboBox ne sont PAS des variables VBA ! ce sont des contrôles de formulaire ! donc il ne faut pas les définir avec Dim comme si c'était des variables : ces contrôles existent par le seul fait de les avoir placés sur un UserForm ; pour ne pas alourdir mon explication, je passe sur le fait qu'on peut mettre certains contrôles directement sur la feuille de calcul (pas dans un UserForm) ; mais même là, y'aurait pas besoin de les définir en tant que variables VBA.​

soan
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 117
dernier inscrit
augustin.morille