Addition textbox décimale [Résolu]

cs_florentin 10 Messages postés mercredi 11 août 2004Date d'inscription 18 août 2004 Dernière intervention - 11 août 2004 à 17:52 - Dernière réponse : cs_ITALIA 2169 Messages postés vendredi 20 avril 2001Date d'inscription 30 juin 2009 Dernière intervention
- 13 août 2004 à 08:50
Aurais tu 1 explication a ce petite prob?.

Je souhaite additionner 3 textbox

Voici mon code :


total.Value = Str$(Val(Makertarif.Value) + Val(ReseauP3.Value) + Val(Licence.Value))


Cependant lorsque je place des montants à vigule ( j'ai bien pris en compte l'histoire de la virgule et du point sous windows), ma valeur total des texbox ne prend pas en compte les décimales? le résultat est juste mais sans décimal?


Contexte : développement d'une macros pour document word



Merci d'avance



Laurent
Afficher la suite 

14 réponses

cs_ITALIA 2169 Messages postés vendredi 20 avril 2001Date d'inscription 30 juin 2009 Dernière intervention - 13 août 2004 à 08:50
+3
Utile
coches reponses acceptés pour la soluce utilisé ca peut être utile pour d'autre
It@li@
Cette réponse vous a-t-elle aidé ?  
cs_ITALIA 2169 Messages postés vendredi 20 avril 2001Date d'inscription 30 juin 2009 Dernière intervention - 11 août 2004 à 18:13
0
Utile
Je pense que ca devarait aller mais il y a plusieurs façon de le Faire

Dim Val1 As Double
Dim Val2 As Double
Dim Val3 As Double

Val1 = Replace(Text1.Text, ".", ",")
Val2 = Replace(Text2.Text, ".", ",")
Val3 = Replace(Text3.Text, ".", ",")

Text4.Text =Val1+Val2+Va3

It@li@
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 11 août 2004 à 18:25
0
Utile
A la place de val, tu mets cdbl ça devrait aller.

Cordialement

CanisLupus
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 11 août 2004 à 18:26
0
Utile
Petite précision, val ne prend en compte que le point comme séparateur décimal).

Cordialement

CanisLupus
cs_florentin 10 Messages postés mercredi 11 août 2004Date d'inscription 18 août 2004 Dernière intervention - 12 août 2004 à 09:31
0
Utile
Merci de votre aide !!

Je trouve ce site super bien , il y une semaine je n'y connaissais rien et vous m'avez tous aider à évoluer . Je trouve ça sympa.

Bon, mais j'ai tout de même un soucis....

Lorsque je remplace Val par Cdlb , ça plante si j'ai une textbox à vide( dans mon exemple lorsque je me place sur la ligne en mode plantage, je vois ça: ReseauP3.value =""). Mais je constate ( toujours en mode plantage) que mon appli à bien mis les décimales.

Je retrouve le même phénomène lorsque je déclare des variables Dim. Et c'est pour cela que j'avais présenté ma syntaxe ainsi pour mon addition. Car effectivement de ce fait, mon appli accépté des texbox vide dans mon addition.

Si vous avez une solution.... j'avoue que sur ce point là je m'arrache les cheveux depuis 3 jours.
cs_ITALIA 2169 Messages postés vendredi 20 avril 2001Date d'inscription 30 juin 2009 Dernière intervention - 12 août 2004 à 09:41
0
Utile
et ma solution ???

pour ton souci de null :

if Makertarif.Value="" then Makertarif.Value="0"
if ReseauP3.Value="" then ReseauP3.Value="0"
if Licence.Value="" then Licence.Value="0"
total.Value = Str$(Cdlb(Makertarif.Value) + Cdlb(ReseauP3.Value) + Cdlb(Licence.Value))

It@li@
cs_florentin 10 Messages postés mercredi 11 août 2004Date d'inscription 18 août 2004 Dernière intervention - 12 août 2004 à 10:14
0
Utile
avec ta solution, j'avais mes même soucis de textbox =""

J'ai placé ton code dans mon appli, mais cette fois-ci j'ai un message d'erreur sur le Cdlb : erreur de compilation, Sub ou Fonction non définie.

J'y avais déjà pensé au :
if Makertarif.Value="" then Makertarif.Value="0"
Le soucis c'est que dès que je commence à saisir le premier chiffre dans la zone, ca plante. Et c'est pour ça que j'avais utiliser cette syntaxe, ca se passe super bien

Je suis casi sur que le prob vient d'autre part...

et tout ca pour une addition, je trouve ça dingue.

NB:
code pour la virgule :If Chr(KeyAscii) "." Then KeyAscii Asc(",")
cs_CanisLupus 3758 Messages postés mardi 23 septembre 2003Date d'inscription 13 mars 2006 Dernière intervention - 12 août 2004 à 11:26
0
Utile
Heu, c pas Cdlb mais Cdbl.
D'autre part, c sur que si le textbox est vide ou qu'il contient un caractère non numérique, ça plantera aussi.
Donc, faut controler la saisie, soit dans le keypress des textbox soit après :

Voir la solution d'ITALIA plus un tit truc que j'utilise souvent :

if isnumeric("0.0") then 'si le point est un séparateur décimal
'on remplace les virgules par des points
Makertarif.Value= replace(Makertarif.Value, ",", ".")
ReseauP3.Value= replace(ReseauP3.Value, ",", ".")
Licence.Value= replace(Licence.Value, ",", ".")

else 'sinon
'on remplace les points par des virgules
Makertarif.Value= replace(Makertarif.Value, ".", ",")
ReseauP3.Value= replace(ReseauP3.Value, ".", ",")
Licence.Value= replace(Licence.Value, ".", ",")

end if

Comme ça , tu n'as plus a te préoccuper de la config régionale.

Cordialement

CanisLupus
cs_florentin 10 Messages postés mercredi 11 août 2004Date d'inscription 18 août 2004 Dernière intervention - 12 août 2004 à 12:12
0
Utile
Tout d'abord, excusez pour la faute d'orto.

Ca marche avec la bonne ortho

Mais je pense que mon erreur vient aussi de l'emplacement dans les évènements.

Effectivement pour un avoir résultat dynamique ( en textbox3) je place le même code dans tous les textbox(1,2,4)...ainsi j'ai un résultat dynamique (nouvelle exemple) dans ma textbox3.

Private Sub TextBox2_Change()

TextBox3.Value = Str$(CDbl(TextBox2.Value) + CDbl(TextBox1.Value) + CDbl(TextBox4.Value))

End Sub
IDEM pour TextBox 1,2, et 4

Cette solution fonctionne très bien si on utilise Val mais avec CDbl c'est pas la peine.

Tandis que si je mets mon code qu'une seule fois dans :
Private Sub TextBox3_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

TextBox3.Value = Str$(CDbl(TextBox2.Value) + CDbl(TextBox1.Value) + CDbl(TextBox4.Value))

End Sub

cela fonctionne trés bien et de façon dynamique. Existe - t-il une solution pour avoir un résultat dynamique sans avoir besoin de bouger la souris ?

J'ai bien entendu parler d'un focus mais je n'ai pas ca dans mes évènements...

Merci de votre aide à tous les 2 , j'avance enfin dans mon appli.
cs_ITALIA 2169 Messages postés vendredi 20 avril 2001Date d'inscription 30 juin 2009 Dernière intervention - 12 août 2004 à 12:18
0
Utile
pour cela place ton code dans les evenements Keypress de tes 3 TextBox :

Private Sub TextBox1_KeyPress(KeyAscii As Integer)
End Sub

Private Sub TextBox2_KeyPress(KeyAscii As Integer)
End Sub

Private Sub TextBox4_KeyPress(KeyAscii As Integer)
End Sub

It@li@
cs_florentin 10 Messages postés mercredi 11 août 2004Date d'inscription 18 août 2004 Dernière intervention - 12 août 2004 à 14:19
0
Utile
ok,
J'ai fais ça :

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)If TextBox3.Value "" Then TextBox3.Value "0"If TextBox2.Value "" Then TextBox2.Value "0"If TextBox4.Value "" Then TextBox4.Value "0"If TextBox1.Value "" Then TextBox1.Value "0"

TextBox3.Value = Str$(CDbl(TextBox2.Value) + CDbl(TextBox1.Value) + CDbl(TextBox4.Value))

End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)If TextBox3.Value "" Then TextBox3.Value "0"If TextBox2.Value "" Then TextBox2.Value "0"If TextBox4.Value "" Then TextBox4.Value "0"If TextBox1.Value "" Then TextBox1.Value "0"
TextBox3.Value = Str$(CDbl(TextBox2.Value) + CDbl(TextBox1.Value) + CDbl(TextBox4.Value))
End Sub

Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)If TextBox3.Value "" Then TextBox3.Value "0"If TextBox2.Value "" Then TextBox2.Value "0"If TextBox4.Value "" Then TextBox4.Value "0"If TextBox1.Value "" Then TextBox1.Value "0"
TextBox3.Value = Str$(CDbl(TextBox2.Value) + CDbl(TextBox1.Value) + CDbl(TextBox4.Value))
End Sub

Vous pouvez essayer, c'est pas très dynamique même pas du tout....

mon prob était simple à la base mais ca prend des proportions ...
mettre des IF pour mettre une valeur a 0 avant calcul... je trouve que c'est pas très souple ....
cs_ITALIA 2169 Messages postés vendredi 20 avril 2001Date d'inscription 30 juin 2009 Dernière intervention - 12 août 2004 à 14:39
0
Utile
Remplace tout ton code par une ligne dans tes 3 Keypress :

ca donne ca :

TextBox3.Value = Str$(CDbl(iif(isnull(TextBox2.Value),"0",TextBox2.Value)
) + CDbl(iif(isnull(TextBox1.Value),"0",TextBox1.Value)) + CDbl(iif(isnull(TextBox4.Value),"0",TextBox4.Value)
))

It@li@
cs_florentin 10 Messages postés mercredi 11 août 2004Date d'inscription 18 août 2004 Dernière intervention - 12 août 2004 à 14:54
0
Utile
Merci pour cette ligne unique mais je ne sais pas pourquoi il plante me faisant comprendre les texbox = ""

Merci pour votre implication mais la je croix que nous sommes
arrivé au bout du bout sans résolution du prob...

Pour l'instant je laisse :

Private Sub TextBox1_Change()

TextBox3.Value = Str$(Val(TextBox2.Value) + Val(TextBox1.Value) + Val(TextBox4.Value))

End Sub

Private Sub TextBox2__Change()

TextBox3.Value = Str$(Val(TextBox2.Value) + Val(TextBox1.Value) + Val(TextBox4.Value))
End Sub

Private Sub TextBox4__Change()

TextBox3.Value = Str$(Val(TextBox2.Value) + Val(TextBox1.Value) + Val(TextBox4.Value))

End Sub

C'est un simple addition qui fonctionne sans les décimales ...sniff sniff

ce qui me rire c'est qu'avec la multiplication je n'ai pas de prob, les décimales apparaissent correctement : Par exemple dans la même appli :

Private Sub remisebox_Change()
resul$ = TarifP3.Value
If remisebox <> "" Then
If resul$ <> "" Then
Pourcentage$ = remisebox.Value / 100
Remis$ = (1 - Pourcentage$)
Licence.Value = (resul$ * Remis$)
End If
End If


Le résultat dans Licence.value apparait bien avec les décimales ... rigolo non ?

Merci de votre aide...en espérant que le temps me donne la solution... Ca fait 4 jours que je suis sur une addition, peut être que dans une semaine j'aurai une illumination ..

Encore merci
cs_florentin 10 Messages postés mercredi 11 août 2004Date d'inscription 18 août 2004 Dernière intervention - 12 août 2004 à 17:05
0
Utile
ok , j'ai trouvé la soluce.

J'avais une de mes textbox qui allée chercher une valeur dans une liste déroulante.

Et c'est pour ça, malgrè les IF qui forcent le textbox à O, le textbox reste en "".

Donc j'ai remplcé ma liste déroulante par des radio et maintenant ca roule , j'ai mis des IF partout pour forcer les montant a 0.

Encore Merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.