Addition textbox décimale

Résolu
cs_florentin Messages postés 10 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 18 août 2004 - 11 août 2004 à 17:52
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 - 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

14 réponses

cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
13 août 2004 à 08:50
coches reponses acceptés pour la soluce utilisé ca peut être utile pour d'autre
It@li@
3
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
11 août 2004 à 18:13
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@
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
11 août 2004 à 18:25
A la place de val, tu mets cdbl ça devrait aller.

Cordialement

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

Cordialement

CanisLupus
0

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

Posez votre question
cs_florentin Messages postés 10 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 18 août 2004
12 août 2004 à 09:31
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.
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
12 août 2004 à 09:41
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@
0
cs_florentin Messages postés 10 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 18 août 2004
12 août 2004 à 10:14
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(",")
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
12 août 2004 à 11:26
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
0
cs_florentin Messages postés 10 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 18 août 2004
12 août 2004 à 12:12
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.
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
12 août 2004 à 12:18
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@
0
cs_florentin Messages postés 10 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 18 août 2004
12 août 2004 à 14:19
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 ....
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
12 août 2004 à 14:39
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@
0
cs_florentin Messages postés 10 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 18 août 2004
12 août 2004 à 14:54
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
0
cs_florentin Messages postés 10 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 18 août 2004
12 août 2004 à 17:05
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
0
Rejoignez-nous