Problème dans une boucle de calcul

Résolu
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 - Modifié par Attila54 le 8/08/2013 à 09:57
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 - 12 août 2013 à 11:09
Bonjour
Je rencontre un petit souci dans une boucle de calcul qui au final, doit m'afficher QI.Text dans un textbox
Il se fait en fonction de
Textboxosod qui peut prendre soit OS soit OD comme valeur
Txtrelift qui peut prendre soit Y soit N comme valeur
QILEFT et QIRIGHT
L'idée est la suivante
Si txtrelift affiche N, on traite QI selon textboxosod
SI textboxosod affiche OS et que QILEFT =< -0.3 alors QI affichera -0.30
SI textboxosod affiche OS et que QILEFT > -0.3 alors QI affichera le même valeur que QILEFT
SI textboxosod affiche OD et que QIRIGHT =< -0.3 alors QI affichera -0.30
SI textboxosod affiche OS et que QIRIGHT > -0.3 alors QI affichera le même valeur que QIRIGHT

Si txtrelift affiche Y, on traite QI selon textboxosod
SI textboxosod affiche OS alors QI affichera la même valeur que QILEFT
SI textboxosod affiche OD alors QI affichera le même valeur que QIRIGHT

Cela paraissait simple et j'ai fait ceci :

Private Sub calculqi()
            'calcul de qi
        If Txtrelift.Text = "N" Then           
             'Cas de l'oeil gauche
             If TextBoxosod.Text = "OS" Then
                Select Case VALQILEFT
                    Case Is <= -0.3
                        ValQI = -0.3
                    Case Else
                        ValQI = VALQILEFT
                    End Select
             Else
                'Cas de l'oeil droit
                Select Case VALQIRIGHT
                    Case Is <= -0.3
                        ValQI = -0.3
                    Case Else
                        ValQI = VALQIRIGHT             
                End Select
            End If
         Else  
           'cas de l'oeil droit
            If TextBoxosod.Text = "OD" Then
                ValQI = VALQIRIGHT
            Else
                'cas de l'oeil gauche
                ValQI = VALQILEFT
            End If
        End If
    QI.Text = ValQI.ToString("0.00")
End Sub


Pourtant quelle que soient les valeurs de QILEFT, QIRIGHT, txtrelift et textboxosod, QI m'affiche 0.00

exemple :
Txtrelift affiche "N"
Textboxosod affiche "OD"
QILEFT affiche "-1.14"
QIRIGHT affiche "-0.59"
si je suis le raisonnement, QI devrait afficher : "-0.30"
eh bien il m'affiche royalement "0.00"

Je ne vois pas où j'ai fait une erreur dans ma séquence de codage
Pourrais je avoir un avis éclairé ?
Merci beaucoup

22 réponses

Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
11 août 2013 à 16:28
Bonjour Attila54.

Vous disposez d'un TextBox qui délivre Me.QILEFT.Text As String = "-1.14".
Vous avez besoin d'un nombre VALQILEFT = 1.14 As Double.
Et voila pourquoi il vous faut convertir Me.QILEFT.Text en VALQILEFT.

Comment faire ? Vous êtes dans de beaux draps !
Heureusement, il existe une fonction CDbl qui convertit un String en Double
Malheureusement, cette fonction ne convertit que les strings utilisant la virgule décimale, et non pas le point décimal.
Heureusement, il existe une fonction Replace qui, dans un string, remplace partout n'importe quel caractère par un autre.

En conséquence, attrapez le string à point décimal Me.QILEFT.Text, collez-lui une fonction Replace(".", ","), mettez le tout dans une fonction CDbl, et servez chaud.
Cordialement.
--
Étant illettré, je signe d'une croix : ×
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par shayw le 11/08/2013 à 21:20
Bonjour
on peut aussi
Dim ValQiLeft,ValQiRight,result as double
'verifie le contenu du textbox et essai dans le convertir en double
If Double.TryParse(QiLeft, result) Then
  ValQiLeft = result 
 End If


ou on suppose que le textbox contient des caractères chiffres et séparateur décimal on le converti en double

Dim res As Double
 res = Convert.ToDouble(QiLeft)


aussi cdbl est plutot absolete
Bonne prog
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
12 août 2013 à 11:09
saleté de ponctuation ......
voila qui, tout en étant humoristique, m'a fait comprendre le pourquoi du comment
Un grand merci a toi zermelo

Quant a toi shayw, toujours a la pointe...
En tout cas, merci beaucoup a vous deux pour le coup de pouce
0
Rejoignez-nous