Aide arrondi et chiffres apres la virgule DOUBLE

Signaler
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007
-
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007
-
Salut à tous, je me suis mis a chipoter une peu sur le VBA depuis peu, et la suis sur un os... J'ai un petit problème : je n'arrive pas pas à récupurer un nombre avec virgule à l'issue de ma multiplication. L'arrondi se fait automatiquement à l'unité suppérieur.


Voici mon code


Private Sub Quantité_Change()
   Prix_final.Visible = True
   Quantite_final.Visible = True
   Produit_Final.Visible = True
   Label22.Visible = True
   Label23.Visible = True
   Total_final.Visible = True

   Quantite_final.Value = Quantité.Value   
   Prix_final.Value = Val(Quantité.Value) * Val(Prix.Value)
End Sub

La valeur qui s'affiche donc dans Prixl_final.value est toujours un entier alors que je le voudrais avec 2 chiffres après la virgule. J'ai essayé plein de choses différentes, ce y compris le passage par des variables définies par Dim Prix as Double, mais j'ai toujours un entier qui vient me ...

Je vous remercie d'avance de votre aidre, surtout que je suis pressé étant ici dans le cadre d'un stage se finissant dans 3 jours.

Merci,
TROLL

20 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
23
Qu'est exactement prix_final ?
Un contrôle ? autre chose (et quoi) ?
Mêmes questions pour Quantite_final et pour Prix ...
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
102
Normal, Val te donne la valeur entière du nombre (il me semble !), remplace val par CDbl plutôt :
Prix_final.Value = CDbl(Quantité.Value) * CDbl(Prix.Value)
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
25
essaye CDbl() au lieu de Val()
encore une histoire de point et de virgule ...

Daniel
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
25
non Val() donne toujours un Double
mais il faut un point obligatoirement

Daniel
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
Salut,


Et avec l'instruction format ? :

Prix_final.Value = Format$((Quantité.Value * Prix.Value),"### ###.###")
ou
Prix_final.Value = Format$((Quantité.Value * Prix.Value),"Standard")

Par contre je ne sais pas si ces instruction fonctionnent sour VBA ??
A+
Exploreur
Messages postés
53
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
11 juin 2010
1
Salut,


Val renvois un nombre réel si la valeur entre parenthèses contient un
point. Si le chiffre entre parenthèses est avec une virgule, il renvois
un entier.

Je te conseille donc :

Prix_final.Value = Val(replace(Quantité.Value,",",".")) * Val(replace(Prix.Value,",","."))


Cette solution te renvois tout le temps un réel avec les chiffres après la virgule.


Si tu ne veux afficher que 2 chiffres après la virgule, utilises Format$


Prix_final.Value = Format$(Val(replace(Quantité.Value,",",".")) * Val(replace(Prix.Value,",",".")),"0.00")


A+


DD05
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
25
Val() renvoit toujours un Double:
    MsgBox TypeName(Val(1))
dans ce Double il peut y avoir un entier bien sûr !
autant rien mettre (conversion implicite  --> Double)
    Prix_final.Value = Quantité.Value * Prix.Value

Daniel
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011

Salut, 
c'était écrit:
 Prix_final.Value = Val(Quantité.Value) * Val(Prix.Value)

Si Prix_final s'agit d'un contrôle ScollBar ou autre, il contiendra toujours un nombre entier dans sa propriété .Value , donc sans virgule

J'ai déduit qu'il s'agit d'un contrôle puisque t'as mis:
Total_final.Visible = True

Une des solutions serait aussi:

Dim PFinal as Double

PFinal = Val(Quantité.Value) * Val(Prix.Value)
Prix_final.Value =PFinal
Label22 = Format(PFinal, "### ###.##")
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
23
ouais...
trollfever, lui, n'est plus là ...
J'ai posé, dès ma 1ère réponse, quelques questions.... elle sont loin d'être "gratuites"...
Leurs réponses permettraient sans aucun doute de cesser de faire des suppositions diverses.
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007

Salut et merci du temps que vous m'avez consacré. désolé de ne pas avoir répondu plus tot mais je n'ai pas de connexion à la maison...

Voila, j'ai partiellement résolu mon problème: les multiplication des 2 TXTBOX avec virgules fonctionne mais la somme (case Total_final) semble ne pas prendre en compte la virgule (dois je déclarer la var total autrement ou déclarer Total_final.value autrement?)

Je vous join une partie du code et une représentation de mon problème. Merci de votre aide!

CODE

Private Sub Quantité_Change()
Prix_final.Visible = True
Quantite_final.Visible = True
Produit_Final.Visible = True
Label22.Visible = True
Label23.Visible = True
Dim total As Double
Total_final.Visible = True
Quantite_final.Value = Quantité.Value
Prix_final.Value = Val(Quantité.Value) * Val(Prix.Value)If Prix_final2.Visible False Then total Val(Prix_final.Value)If Prix_final2.Visible True And Prix_final3.Visible False Then total = Val(Prix_final.Value) + Val(Prix_final2.Value)If Prix_final2.Visible True And Prix_final3.Visible True Then total = Val(Prix_final.Value) + Val(Prix_final2.Value) + Val(Prix_final3.Value)
Total_final.Value = total
End Sub

Image
http://img179.imageshack.us/img179/1580/essaifa1.jpg
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
À essayer:

Total_final.Value = Format(total, "standard")
ou si tu veux un signe monétaire

Total_final.Value = Format(total, "currency")

MPi
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007

Mérci, cela me note bien un valeur avec deux Zéros apres la virgule mais toujours deux 00, c'est a dire qu'il ne me prend pas en compte les valeurs apres la virgule du reste
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
23
En ouvrant bien les yeux on peut voir, sur ton dessin, des virgules dans les textboxes de prix_final.

et on lit au dessus :

total = Val(Prix_final.Value) + Val(Prix_final2.Value) + Val(Prix_final3.Value)

Alors, ma foi, tout ce qui vient après la virgile n'est pas compté...
car, par exemple :

 Private Sub Command1_Click()
 MsgBox Val("21,
2")
End Sub

t'affichera  21 et pas 21,2
par contre :

Private Sub Command1_Click()
 MsgBox Val("21.
2")
End Sub

t'affichera bien 21,2
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011

Je ne compreends toujours pas qu'est ce que Total_final

Une variable, un contrôle ?
En tout cas ce n'est pas un Textbox puisqu'il ne contient pas la propriété Value
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007

Si c'est bien une textbox regarde l'avant dernière ligne

Merci de votre soutien, je vous laisse pour ce soir car dans 5h je dois me lever :-)
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011

Bizarre, sur mon VB6 ça me met une grande erreur si je mets:
Prix_final.Value pour un textbox

Peut être que t'as une autre version de vb, la propriété value ne peut pas s'appliquer ni en mode exécution ni en mode ide
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
25
moi je vois des points dans Prix, Quantité, ...  et ensuite des virgules
faut rester compatible, or Format() ne renvoit pas forcément le point mais le signe décimal qui dépend de la configuration, de même que la conversion implicite.

tu te compliques bien la vie, il faut passer par Round() pour ne garder que 2 chiffres après la virgule,
ensuite passer par Str$() qui renverra bien le point mais aussi un espace devant qu'il faudra supprimer par Ltrim():
      Prix_final.Value = LTrim(Str$(Round(Val(Quantité.Value) * Val(Prix.Value), 2)))

alors qu'en gardant la configuration telle qu'elle est, c'est beaucoup plus simple:
     Prix_final.Value = Format$(CDbl(Quantité.Value) * CBbl(Prix.Value), "standard")

Daniel
Messages postés
178
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011

t'as raison, la fonction Str renvoie le point , et la fonction Cstr renvoie la virgule (ceci si les paramètres linguistiques l'exigent comme séparateur décimal, ce que est le cas en France)

mais je reviens à ma grand doûte:
 Prix_final.Value ne peut pas être un textbox !!! Est-ce que quelqun peut assigner la propriété Value sur un tel contrôle ? 
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
25
si .Value au lieu de .Text donc ça impose qu'il est en VBA

c'est ce que j'ai supposé depuis le début ???

ça implique aussi qu'il a pas la fonction Replace,
donc raison de plus de travailler avec la configuration en l'état

Daniel
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007

Gagné!

Je suis effectivement en VBA, j'ai solutionné le problem avec un peu de bidouille et beaucoup de CDBL merci de votre aide à tous!