Dans mon programme je addition Val(EDF) qui est de 40.10 + Val (EDF1) qui est de 41.28 = 81.28 Au lieu de 81.38 et je ne vois pas comment corriger cet erreur, Merci pour votre Aide
Dans mon programme je addition Val(EDF) qui est de 40.10 + Val (EDF1) qui est de 41.28 = 81.28 Au lieu de 81.38 et je ne vois pas comment corriger cet erreur, Merci pour votre Aide
Est-ce que vos variables EDF et EDF1 sont bien déclaré?
Salut
EDF = "40.10": EDF1 = "41.28": MsgBox Val(EDF) + Val(EDF1) renvoi bien 81.38
Le seul moyen d'arriver au même résultat que toi est d'avoir EDF = "40,10", une virgule comme séparateur décimal.
Dans ce cas EDF = "40,10": EDF1 = "41.28": MsgBox CDbl(EDF) + Val(EDF1),donnerait le bon résultat, mais ....Envoyé par MSDN
si par idée de standardiser tu décides de faire EDF = "40,10": EDF1 = "41.28": MsgBox CDbl(EDF) + CDbl(EDF1), Problème CDbl(EDF1) provoquerait une erreur type incompatible.
Une solution
Code : Sélectionner tout - Visualiser dans une fenêtre à part MsgBox Val(Replace(EDF, ",", ".")) + Val(Replace(EDF1, ",", "."))
Soyez sympa, pensez -y
Balises[CODE]...[/CODE]
Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Balises[C]...[/C] code intégré dans une phrase.
Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
👉 → → Ma page perso sur DVP ← ← 👈
Bonjour,
Voisi la page du programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Private Sub EDF1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 48 To 57 Case 45 Case 46 Case 8 Case 13 Case Else Beep KeyAscii = 0 End Select If KeyAscii = 13 Then EDF = Val(EDF) + Val(EDF1) EDF1 = "" OM1.SetFocus End If End Sub
En supposant que EDF et EDF1 sont des TextBoxs et que EDF gère les entrées utilisateur comme dans EDF1,l'addition te donnerait toujours le bon résultat, mais avec les données suggérées (TextEDF = 40.10 et TextEDF1 = 41.28) le résultat affiché dans TextEDF apparaitra avec une virgule pour séparateur décimal.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Private Sub TextEDF_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 8, 13, 45, 46, 48 To 57 Case Else Beep KeyAscii = 0 End Select End Sub Private Sub TextEDF1_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 8, 13, 45, 46, 48 To 57 'n'autoriser que ces touches clavier Case Else 'si non annuler toutes autres touches Beep KeyAscii = 0 End Select If KeyAscii = 13 Then TextEDF.Text = Val(TextEDF.Text) + Val(TextEDF1.Text) TextEDF1.Text = "" OM1.SetFocus End If End Sub
En modifiant la ligne 18 dans le code proposé par TextEDF.Text = Replace((Val(TextEDF.Text) + Val(TextEDF1.Text)), ",", ".")tu pourras enchaîner plusieurs fois l'entrée utilisateur dans le TextBox TextEDF1
Soyez sympa, pensez -y
Balises[CODE]...[/CODE]
Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Balises[C]...[/C] code intégré dans une phrase.
Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
👉 → → Ma page perso sur DVP ← ← 👈
Je confirme les dires de ProgElecT.
C'est une question de virgule.
Peut-être vérifier le séparateur de décimal dans excel
Fichier/option/option avancé
J'ai loupé quelque chose ?
Personnellement, pirouge, cela ne me convient pas vraiment d'essayer de deviner tous les paramètres de la structure de ton programme.Peut-être vérifier le séparateur de décimal dans excel
Fichier/option/option avancé
Si la valeur que peut prendre EDF (Textebox ?) et/ou EDF1 (Textebox ?) provient d'un copier/coller et/ou de toutes autres méthodes autres que l'utilisateur qui entre la donnée par le clavier, il faut traiter le séparateur décimal dans l’événement Change de chaque TexteBox.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub TextEDF_Change() TextEDF.Text = Replace(TextEDF.Text, ",", ".") End Sub Private Sub TextEDF1_Change() TextEDF1.Text = Replace(TextEDF1.Text, ",", ".") End Sub
Soyez sympa, pensez -y
Balises[CODE]...[/CODE]
Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Balises[C]...[/C] code intégré dans une phrase.
Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
👉 → → Ma page perso sur DVP ← ← 👈
Salut
C'est vraiment curieux comme problème, dans un nouveau projet
essais cele premier message devrait t'afficher: Val(EDF = 40.10) + Val(EDF1 = 41.28) = 81,38
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Private Sub Form_Load() Dim EDF As String, EDF1 As String EDF = "40.10" EDF1 = "41.28" MsgBox "Val(EDF = 40.10) + Val(EDF1 = 41.28) = " & Val(EDF) + Val(EDF1), vbInformation, "1° message" EDF = "40,10" MsgBox "Val(EDF = 40,10) + Val(EDF1 = 41.28) = " & Val(EDF) + Val(EDF1), vbInformation, "2° message" End Sub
le deuxième: Val(EDF = 40,10) + Val(EDF1 = 41.28) = 81,28
81,28 (comme signalé par ton premier message) car EDF = 40,10, seul moyen pour moi de créer ton dysfonctionnement.
Soyez sympa, pensez -y
Balises[CODE]...[/CODE]
Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Balises[C]...[/C] code intégré dans une phrase.
Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
👉 → → Ma page perso sur DVP ← ← 👈
Un peu bizarre ce que tu obtiens comme résultat.
Pourtant, en suivant ta démarche, j'obtiens toujours le résultat escompté.
Pour l'utilisation de la touche ENTRÉE dans l'évènement KeyPress, le code est fonctionnel et suit les instructions demandées.
Sur un formulaire(Form), place 3 TextBox dénommés T1, T2 et T3 , ce dernier recevra le résultat, puis un CommandButton appelé Command1.
Mets une valeur dans T1 et une autre dans T2 et appuie sur ENTRÉE ou sur le bouton Command1.
Le résultat sera affiché dans T3 et T2 devient vide.Si cela ne marche pas, c'est qu'il y a quelque chose qui cloche avec ton EDIT ou bien avec le reste de ton code. Moi, je réviserais mon code et/ou réinstallerais VB6 pour avoir le cœur net.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Command1_Click() T3 = Val(T1) + Val(T2) T2 = "" End Sub Private Sub T2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then T3 = Val(T1) + Val(T2) T2 = "" End If End Sub
Ne pas oublier le tag si satisfait.
Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
Balises CODE indispensables. Regardez ICI
Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
Vous pouvez consulter mes contributions
Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
Ne pas oublier L'Aide VBScript et MSDN VB6 Fr
Enfin ,j’ai compris que l’erreur de mon calcul était due à ;lorsque je validais 40.10 dans la case EDF1 il m’inscrivait 40,10 dans la case EDF et lorsque j’ajoutais 41.28 , pour la somme il ne tenait pas compte des dizièmes de l’EDF,et additionnait 40,10+41.28=81.28 au lieu de 41.38.
Or il fallait juste faire en sorte que en validant EDF1,il mette en EDF,40.10 et non 40,10,en modifiant la ligne comme ceci :EDF=Replace((Val(EDF)+Val(EDF1)), ",", ".").
Je tiens à remercier ProgElect qui a fait tout son possible pour m’expliquer d’où venait l’erreur,mais pour moi ce n’était pas évident.Un grand merci.
Pour information
Une petite anomalie de VB6
la valeur de nbr affiche 40,10
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Dim nbr As Currency nbr = 40.12 Stop Text1 = nbr
Automatiquement VB6 traduit le point par une virgule.
Par contre l'instruction VAL (qui date des premiers BASIC) ne reconnaît que le point comme
séparateur décimal, la virgule étant reconnue comme caractère alphanumérique
la reconnaissance du nombre par VAL s'arrête à 40
Pour éviter l'erreur dans les calculs avec VAL, mettre toujours un replace pour remplacer la virgule par un point.
Dans cet exemple nbr a bien la bonne valeur de 40,35
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Dim nbr As Currency Dim nbrs As String nbr = 40.12 nbrs = Replace(Str(nbr), ",", ".") nbr = Val(nbrs) + 0.23 Stop Text1 = nbr
Salut
oui et non,car le Replace est fait après l'addition , Val(EDF)+Val(EDF1) = 81.28Envoyé par pirouge
Pour preuveMyVal() est donc a utilisé systématiquement à la place de Val().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Command1_Click() Dim EDF As String, EDF1 As String EDF = "40,10" EDF1 = "41.28" MsgBox Replace((Val(EDF) + Val(EDF1)), ",", ".") MsgBox MyVal(EDF) + MyVal(EDF1) End Sub 'une fonction qui permet de contourner le probléme de Val() de VB Private Function MyVal(Donn) MyVal = Val(Replace(CStr(Donn), ",", ".")) End Function
Soyez sympa, pensez -y
Balises[CODE]...[/CODE]
Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Balises[C]...[/C] code intégré dans une phrase.
Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
👉 → → Ma page perso sur DVP ← ← 👈
La fonction que préconise ProgElect est une bonne solution
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager