Aide arrondi et chiffres apres la virgule DOUBLE

Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007
- - Dernière réponse : trollfever
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007
- 15 févr. 2007 à 22:55
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
Afficher la suite 

20 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
Qu'est exactement prix_final ?
Un contrôle ? autre chose (et quoi) ?
Mêmes questions pour Quantite_final et pour Prix ...
Commenter la réponse de jmfmarques
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
0
Merci
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)
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
19
0
Merci
essaye CDbl() au lieu de Val()
encore une histoire de point et de virgule ...

Daniel
Commenter la réponse de Gobillot
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
19
0
Merci
non Val() donne toujours un Double
mais il faut un point obligatoirement

Daniel
Commenter la réponse de Gobillot
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
12
0
Merci
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
Commenter la réponse de cs_Exploreur
Messages postés
53
Date d'inscription
mercredi 11 août 2004
Statut
Membre
Dernière intervention
11 juin 2010
1
0
Merci
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
Commenter la réponse de DD05
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
19
0
Merci
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
Commenter la réponse de Gobillot
Messages postés
182
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011
0
Merci
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, "### ###.##")
Commenter la réponse de vicosta
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
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.
Commenter la réponse de jmfmarques
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007
0
Merci
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
Commenter la réponse de trollfever
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
15
0
Merci
À essayer:

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

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

MPi
Commenter la réponse de cs_MPi
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007
0
Merci
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
Commenter la réponse de trollfever
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
18
0
Merci
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
Commenter la réponse de jmfmarques
Messages postés
182
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011
0
Merci
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
Commenter la réponse de vicosta
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007
0
Merci
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 :-)
Commenter la réponse de trollfever
Messages postés
182
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011
0
Merci
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
Commenter la réponse de vicosta
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
19
0
Merci
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
Commenter la réponse de Gobillot
Messages postés
182
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
30 novembre 2011
0
Merci
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 ? 
Commenter la réponse de vicosta
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
19
0
Merci
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
Commenter la réponse de Gobillot
Messages postés
8
Date d'inscription
jeudi 7 décembre 2006
Statut
Membre
Dernière intervention
15 février 2007
0
Merci
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!
Commenter la réponse de trollfever