Aide arrondi et chiffres apres la virgule DOUBLE

trollfever Messages postés 8 Date d'inscription jeudi 7 décembre 2006 Statut Membre Dernière intervention 15 février 2007 - 13 févr. 2007 à 15:21
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

20 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
13 févr. 2007 à 15:31
Qu'est exactement prix_final ?
Un contrôle ? autre chose (et quoi) ?
Mêmes questions pour Quantite_final et pour Prix ...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
13 févr. 2007 à 18:01
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)
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 févr. 2007 à 18:03
essaye CDbl() au lieu de Val()
encore une histoire de point et de virgule ...

Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 févr. 2007 à 18:04
non Val() donne toujours un Double
mais il faut un point obligatoirement

Daniel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
13 févr. 2007 à 18:48
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
0
DD05 Messages postés 53 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 11 juin 2010 1
13 févr. 2007 à 19:19
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
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
13 févr. 2007 à 19:27
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
0
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
13 févr. 2007 à 23:10
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, "### ###.##")
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
13 févr. 2007 à 23:22
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.
0
trollfever Messages postés 8 Date d'inscription jeudi 7 décembre 2006 Statut Membre Dernière intervention 15 février 2007
14 févr. 2007 à 11:22
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
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
14 févr. 2007 à 23:05
À essayer:

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

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

MPi
0
trollfever Messages postés 8 Date d'inscription jeudi 7 décembre 2006 Statut Membre Dernière intervention 15 février 2007
14 févr. 2007 à 23:56
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
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 févr. 2007 à 00: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
0
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
15 févr. 2007 à 00:26
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
0
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 à 00:29
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 :-)
0
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
15 févr. 2007 à 00:47
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
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
15 févr. 2007 à 01:13
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
0
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
15 févr. 2007 à 12:20
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 ? 
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
15 févr. 2007 à 22:49
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
0
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
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!
0
Rejoignez-nous