Valeur entrée manuellement non prise en compte

[Résolu]
Signaler
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
-
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
-
Bonjour,
J'ai un souci assez difficile a comprendre pour moi et j'aurais aimé avoir des avis plus éclairés que je ne puis en apporter moi même

Dans une appli, j'ai une sub appelée download qui
- va chercher un fichier excel dans un ftp
- charge les data du ftp dans un form, notament des valeurs qui seront affichéees dans deux textbox QILEFT et QIRIGHT
- Effectue un calcul en fonction de QILEFT et QIRIGHT : le resultat est affiché dans une textbox QI

Voila la sub qui calcule QI en fonction de QILEFT et QIRIGHT :
 Private Sub calculqi()
        'Erreur dans QI
        'affichage de QI en fonction de QILEFT et QIRIGHT
        If TextBoxosod.Text = "OS" Then
            indiceoeil = 0
            Etiqoeiltraite.Text = "OS"
            VALQILEFT = Convert.ToDouble(QILEFT.Text)
            ValQI = VALQILEFT
            QI.Text = ValQI.ToString("0.00")
        End If
        If TextBoxosod.Text = "OD" Then
            indiceoeil = 1
            Etiqoeiltraite.Text = "OD"
            VALQIRIGHT = Convert.ToDouble(QIRIGHT.Text)
            ValQI = VALQIRIGHT
            QI.Text = ValQI.ToString("0.00")
        End If

        ' remplacement du "." par une ","
        If DecimalSeparator = "," Then QI.Text = QI.Text.Replace(".", ",")
        ' test si numérique
        If Double.TryParse(QI.Text, ValQI) = True Then
            ' QI contient bien une valeur numérique
            ValQI = Convert.ToDouble(QI.Text)

            If Txtrelift.Text = "N" Then
                'Calcul de delta QI 
                deltaqi.Text = (Math.Abs(CDbl(QILEFT.Text)) - Math.Abs(CDbl(QIRIGHT.Text))).ToString("0.00")
                'Cas de l'oeil gauche
                If TextBoxosod.Text = "OS" Then
                    Etiqoeiltraite.Text = "OS"
                    Select Case VALQILEFT
                        Case Is <= -0.3
                            ValQI = -0.3
                        Case Else
                            ValQI = VALQILEFT
                        End Select
                    QI.Text = ValQI.ToString("0.00")
                End If

                'Cas de l'oeil droit
                If TextBoxosod.Text = "OD" Then
                    Etiqoeiltraite.Text = "OD"
                    Select Case VALQIRIGHT
                        Case Is <= -0.3
                            ValQI = -0.3
                        Case Else
                            ValQI = VALQIRIGHT
                     End Select
                    QI.Text = ValQI.ToString("0.00")
                End If
            End If

            If Txtrelift.Text = "Y" Then
                'calcul de deltaQI
                deltaqi.Text = "0.00"

                'cas de l'oeil droit
                If TextBoxosod.Text = "OD" Then
                    Etiqoeiltraite.Text = "OD"
                    ValQI = VALQIRIGHT
                Else
                    'cas de l'oeil gauche
                    ValQI = VALQILEFT
                    QI.Text = ValQI.ToString("0.00")
                End If
            End If
        Else
            messageaff = "QI is not a numeric value"
            infoaff = "Incorrect data"
            MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
            QI.Text = ""
            QI.Refresh()
            QI.Focus()
            erreur = True
            Exit Sub
        End If
    End Sub


tout se passe bien mais voila :
Je dois pouvoir changer la valeur affichée de QI manuellement si je le désire.
J'ai pensé faire une action sur QI.textchanged et je peux changer la valeur de QI dans la textbox, mais c'est la valeur initiale qui reste comme référence pour les calculs ultérieurs.

Exemple :
- la sub calculqi me calcule et m'affiche un QI de -0.45. Je calcule par exemple un QF = f(QI), ca me donnera par exemple 0.25
- Je clique sur le textbox QI, j'entre au clavier -0.15 et paffff ..... le QF reste toujours a 0.25 bien que le calcul de QF se fasse. la derniere valeur entrée est affichée mais pas prise en compte.

En clair je ne vois pas comment dire :
sur QI.Textchanged, c'est la derniere valeur entrée qui est la bonne.

Pourquoi d'après vous ?
Merci bien

25 réponses

tu écris : "valQI représente ici, soit le QI Calculé (si je n'ai pas modifié la valeur) soit le QI entré manuellement si je l'ai modifié "

si dans les 2 cas ValQI représente bien la valeur inscrite dans QI.text ton problème doit être résolu !

ps : y a pas de MP sur ce forum ? C'est à dire ? explique
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
Salut

Pourquoi d'après vous ?
bah c'est du à la personne qui a écrit le code LOL

Je clique sur le textbox QI, j'entre au clavier -0.15 et paffff ..... le QF reste toujours a 0.25 bien que le calcul de QF se fasse. la derniere valeur entrée est affichée mais pas prise en compte.

montre ton code de textbox_click event
Serait la solution ?

Explication
Si tu ne modifies pas Qi.text tu lances la Sub calculqi
Si tu modifies Qi.text tu lances la Sub calculqitext()
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
Salut

on a l'impression que toute l'équipe médical est autours de toi LOL

- B) Soit Soit le QI affiché dans le textbox ne me convient pas, je clique sur le textbox QI, j'entre au clavier une valeur de QI qui n'est plus issue de QILEFT et QIRIGHT mais de mon estimation et n'est donc plus calculé et je clique sur "calcul" qui me déclenche le reste des calculs (QF, ... etc ...) en prenant en compte mon QI entré à la main

en prenant en compte mon QI entré à la main
c'est toi qui le dit

poste le code du bouton calcul et de ta fonction calcul
celle qui calcule le QF
QF dépend de QI ?
salut Attila
Pourquoi as-tu donc posté le code de calcul de QI dans ce cas ?

Si tu changes la valeur de QI manuellement donc c'est le calcul des autres Datas qu'il faut refaire !

donc :
1 ) tu importes QILeft et QIright selon l'oeil !
2 ) tu calcules QI
3) si QI te semble bon ok sinon tu rentres une nouvelle valeur
4) tu calcules QF et les autres valeurs si il y en a !

N'oublies pas : 80% d'un logiciel c'est tout ce qui se passe avant de coder : définitions des besoins, des tâches à faire, des données à traiter et des résultats escomptés
ensuite 20 % de code à faire

Oublie donc le code et les idées que je t'ai donnés précédemment

bon courage
Salut Attila
tu rentres dans une textbox Qi.text une valeur
cette valeur de QI doit interagir dans la sub Calcul

Qi.text ne représente-t-il pas la valeur ValQI qui est dans la sub Calcul que tu nous as mis ?

 Select Case .valQI   <---- ce ValQI ci de mémoire 
                Case Is < 0
                    .valKPI = ((Math.Sqrt(.valQI + 4)) * .valKCI) / 2
                Case Is > 0
                    .valKPI = (2 * .valKCI) / (Math.Sqrt(4 - .valQI))
                Case Else
                    .valKPI = .valKCI
            End Select


A l'endroit indiqué par ma flèche ValQI représente la valeur qui se troouve dans la Textbox QI.text je crois !
Cette valeur est calculée la première fois dans la Sub Download qui appelle Calculqi et est ensuite affichée dans QI.text !
Maintenant tu veux modifier Qi.text à la main

rajoute cette ligne de code avant le Select Case .valQI

.valQI = convert.todouble(QI.text)

ainsi .valQI à cet endroit représente la valeur calculée au début et aussi la valeur que tu entres dans QI.text pour modifier
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
salut shayw
t as un cs devant ton pseudo maintenant ????
trêve de plaisanterie, je n'ai rien sur l'évent click du textbox QI peut j'avais pensé a mette me_gotFocus mais ca me bloque tout après

ou j'avais pense a
'If DecimalSeparator = "," Then QI.Text = QI.Text.Replace(".", ",")
    ' test si numérique
    'If Double.TryParse(QI.Text, ValQI) = True Then
    ' QI contient bien une valeur numérique
    'ValQI = Convert.ToDouble(QI.Text)


mais je le voyais plutot sur QI.Textchanged


--
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
Par contre sur QI_GotFocus, j'ai cela et je pensais que cela suffisait pour effacer la valeur stockée dans le textbox

Private Sub QI_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles QI.GotFocus
        calculok = False
        QI.Text = ""
        QI.Refresh() 
salut! tu dis :"Je dois pouvoir changer la valeur affichée de QI manuellement si je le désire. "

Et si tu changeait plutôt les valeurs dans les textbox QILEFT et QIRIGHT car ceux sont ces valeurs selon l'oeil droit ou gauche qui conditionne la valeur de QI.text dans la sub Calculqi ! et donc déclenche le calcul selon QILEFT ou QIRIGHT !
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
Salut galain
Sauf erreur de ma part, tu connais mieux que quiquonque ce projet ... et ses exigences en amont ...
En fait la il s agit vraiment de modifier QI a la main et non les qileft ou right. Je sais que ca faciliterait les choses mais la, ce ne serait pas adapté a la situation. C est bien pour ca que je galère... en tout cas merci de ta suggestion :-)
Private Sub calculqi()
        'Erreur dans QI
        'affichage de QI en fonction de QILEFT et QIRIGHT
        If TextBoxosod.Text = "OS" Then
            indiceoeil = 0
            Etiqoeiltraite.Text = "OS"
            VALQILEFT = Convert.ToDouble(QILEFT.Text)
            ValQI = VALQILEFT
            QI.Text = ValQI.ToString("0.00")
        End If
        If TextBoxosod.Text = "OD" Then
            indiceoeil = 1
            Etiqoeiltraite.Text = "OD"
            VALQIRIGHT = Convert.ToDouble(QIRIGHT.Text)
            ValQI = VALQIRIGHT
            QI.Text = ValQI.ToString("0.00")
        End If
        calculqitest()

End sub

Private Sub calculqitext()
        ' remplacement du "." par une ","
        If DecimalSeparator = "," Then QI.Text = QI.Text.Replace(".", ",")
        ' test si numérique
        If Double.TryParse(QI.Text, ValQI) = True Then
            ' QI contient bien une valeur numérique
            ValQI = Convert.ToDouble(QI.Text)

            If Txtrelift.Text = "N" Then
                'Calcul de delta QI 
                deltaqi.Text = (Math.Abs(CDbl(QILEFT.Text)) - Math.Abs(CDbl(QIRIGHT.Text))).ToString("0.00")
                'Cas de l'oeil gauche
                If TextBoxosod.Text = "OS" Then
                    Etiqoeiltraite.Text = "OS"
                    Select Case VALQILEFT
                        Case Is <= -0.3
                            ValQI = -0.3
                        Case Else
                            ValQI = VALQILEFT
                        End Select
                    QI.Text = ValQI.ToString("0.00")
                End If

                'Cas de l'oeil droit
                If TextBoxosod.Text = "OD" Then
                    Etiqoeiltraite.Text = "OD"
                    Select Case VALQIRIGHT
                        Case Is <= -0.3
                            ValQI = -0.3
                        Case Else
                            ValQI = VALQIRIGHT
                     End Select
                    QI.Text = ValQI.ToString("0.00")
                End If
            End If

            If Txtrelift.Text = "Y" Then
                'calcul de deltaQI
                deltaqi.Text = "0.00"

                'cas de l'oeil droit
                If TextBoxosod.Text = "OD" Then
                    Etiqoeiltraite.Text = "OD"
                    ValQI = VALQIRIGHT
                Else
                    'cas de l'oeil gauche
                    ValQI = VALQILEFT
                    QI.Text = ValQI.ToString("0.00")
                End If
            End If
        Else
            messageaff = "QI is not a numeric value"
            infoaff = "Incorrect data"
            MessageBox.Show(messageaff, infoaff, MessageBoxButtons.OK, MessageBoxIcon.Warning)
            QI.Text = ""
            QI.Refresh()
            QI.Focus()
            erreur = True
            Exit Sub
        End If
    End Sub
Attention
avant le End Sub dans calculqi il faut lire calculqitext() et non calculqitest()

faute de frappe
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
Salut
t as un cs devant ton pseudo maintenant ????
ben oui LOL
non mais je ne sais pas ce qui c'est passé je me suis retrouvé avec un cs dans l'ex cs mon pseudo était shayw maintenant cs_ShayW

j'ai confondu textbox et bouton
pour le reste pas clair
dans QI textbox tu affiches le résultat de calculqi
ensuite
la sub calculqi me calcule et m'affiche un QI de -0.45. Je calcule par exemple un QF = f(QI), ca me donnera par exemple 0.25
- Je clique sur le textbox QI, j'entre au clavier -0.15 et paffff ..... le QF reste



Je clique sur le textbox QI, j'entre au clavier -0.15 et paffff ..... le QF reste
bah normal il faut passer QI.text à ta fonction qui calcule QF ?

cs_Galain
bonjour ,bon courage
Salut cs_ShayW

codes-Sources maintenant a rejoint le site Comment ça marche ( enfin c'est ce que j'ai compris pour l'instant)
Les "anciens" de CS ont leurs pseudos préfixés de cs_ pour signifier qu'ils viennent de l'ancien site Codes-Sources

Maintenant au sujet du problème de notre ami Attila54

Calculqi() prend les valeurs de Qileft.text ou Qiright.text pour déterminer Qi.text selon l'oeil gauche ou droit!
on ne peut passer Qi.text à la sub directement car dans la Sub calculqi() Qi.text depend des valeurs des textbox Qileft ou Qiright selon l'oeil!
notre ami veut lancer un calcul normal avec la valeur Qileft ou Qiright pour avoir Qi.text et ensuite Qf!
il veut ensuite pour modifier Qi.text et rependre ce calcul sans tenir compte de Qileft ou Qiright
D'où dans ma solution soit on appelle la sub calculqi() au premier calcul ( cette sub appelle calculqitext()) et ensuite uniquement la sub claculqitext() car on a modifié Qi.text
Maintenant est bon ? seul Attila54 nous le dira

Bien le bonjour à toi cs_ShayW
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
re a vs deux
Bah moi j ai pas cs Attila54 :-(:-(
Pour mon souci, je peux alors lancer calculqitext sur qi.textchanged alors
Je test cela demain
Gros merci a vs :-):-):-)

--
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
Salut Galain et shayW

Bah moi j'ai pas de cs-Atila54 snifffff

alors j'ai pas encore la station vs à ma dispo mais je me demande si je ne vous ai pas embrouillé avec mon souci ou alors si je n'ai pas trop compris le subtil code d'Alain.

En regardant ton calculqitext(), je m'aperçois que QI dépend toujours de QILEFT et QIRIGHT et pour mon cas ça ne fonctionne pas comme cela.

Comment cela fonctionne : De manière immuable
- J'ouvre le logiciel
- je clique sur le button "Load" qui lance la sub download().Celle ci télécharge et importe des data, dont QILEFT et QIRIGHT dans mon form.
download() lance ensuite automatiquement la sub calculqi() qui calcule et affiche la valeur de QI en fonction de plusieurs paramètres dont QILEFT et QIRIGHT.

Jusque la tout fonctionne bien.

Ensuite 2 choix s'offrent a moi :
- A) Soit le QI affiché dans le textbox me convient et je clique sur un button "Calcul" qui me déclenche le reste des calculs (QF, ... etc ...)

- B) Soit Soit le QI affiché dans le textbox ne me convient pas, je clique sur le textbox QI, j'entre au clavier une valeur de QI qui n'est plus issue de QILEFT et QIRIGHT mais de mon estimation et n'est donc plus calculé et je clique sur "calcul" qui me déclenche le reste des calculs (QF, ... etc ...) en prenant en compte mon QI entré à la main

Pour le moment
-si je suis dans le cas A) tout fonctionne a merveille
-si je suis dans le cas B) je peux modifier la valeur au clavier dans le textbox QI mais si je clique sur calcul, j'ai le même resultat que dans le choix A). Autrement dit, je vois la nouvelle valeur entrée dans QI.Text mais elle n'est pas prise en compte

Le point important est que la séquence est et sera toujours la même dans l'utilisation du logiciel
- Importation des data
- Calcul de QI en fonction de QILEFT et QIRIGHT
- Vérification visuelle de QI
- Changement de la valeur de QI manuellement si la valeur ne convient pas
- Calcul des autres data

En espérant ne pas avoir été trop fastidieux et imbuvable sur ce coup la .....
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
salut shayW
Alors OUI entre autres, QF dépend de QI mais ce n'est pas la seule valeur

Et oui, je voudrais que mon QI entré a la main soit pris en compte si je le change

le bouton calcul me lance ceci au click :
Private Sub calcul()
        If txtNOM.Text = "" Then txtNOM.Text = "XXXXXXXXXXXXX"
        If txtPRENOM.Text = "" Then txtPRENOM.Text = "XXXXXXXXXXXXX"
        If erreur = True Then calculok = False : Exit Sub
        Initialisationcouleurtextbox()
        LabelHEHN.Visible = False
        RectangleShapeHEHN.Visible = False
        If Pseudo.Checked = True Then
            Pseudo.Checked = True
            Pseudo.ForeColor = Color.LimeGreen
        Else
            Pseudo.Checked = False
            Pseudo.ForeColor = Color.White
        End If

        If relift.Checked = True Then
            relift.Checked = True
            relift.ForeColor = Color.LimeGreen
        Else
            relift.Checked = False
            relift.ForeColor = Color.White
        End If

        With oeil
            PACHYREP.Text = PACHY.Text
            OZREP.Text = "6.50"
            .valS = Convert.ToDouble(S.Text)
            .valC = Convert.ToDouble(C.Text)
            .valAxe = Convert.ToInt32(AXE.Text) ' c'est une valeur entière
            .valK1 = Convert.ToDouble(K1.Text)
            .valK2 = Convert.ToDouble(K2.Text)
            .ValPACHY = Convert.ToDouble(PACHY.Text)
            .valtxtpseudo = Txtpseudo.Text ' c'est une valeur entière
            .valtxtrelift = Txtrelift.Text ' c'est une valeur entière
            .valtxtother = Txtother.Text ' c'est une valeur entière
            ' 5 VALEURS OPTIONNELLES
            ' On en tient compte que si leurs Textbox sont <> ""
            If ACD.Text <> "" Then .ValACD = Convert.ToDouble(ACD.Text)
            If AL.Text <> "" Then .ValAL = Convert.ToDouble(AL.Text)
            If AD.Text <> "" Then .ValAD = Convert.ToDouble(AD.Text)
            SIMAGE.Text = (.valS).ToString("0.00")
            CIMAGE.Text = (.valC).ToString("0.00")

            ' Calcul de S' ; C' et A'
            ST.Text = ((.valS) + (.valC)).ToString("0.00")
            CT.Text = (-(.valC)).ToString("0.00")
            ATL.Text = ((.valAxe) + 90).ToString("0")
            If CDbl(ATL.Text) > 180 Then
                AT.Text = ((.valAxe) - 90).ToString("0")
            Else
                AT.Text = ((.valAxe) + 90).ToString("0")
            End If
            .valST = Convert.ToDouble(ST.Text)
            .valCT = Convert.ToDouble(CT.Text)
            .valAT = Convert.ToInt32(AT.Text) ' c'est une valeur entière

            ' Traitement de K1IMAGE etK2IMAGE
            If .valK1 <= .valK2 Then
                K1IMAGE.Text = .valK1.ToString("0.00")
                K2IMAGE.Text = .valK2.ToString("0.00")
            Else
                K1IMAGE.Text = .valK2.ToString("0.00")
                K2IMAGE.Text = .valK1.ToString("0.00")
            End If

            'Traitement de SIMAGE
            'plage de S : +6.00 à -11.00 bornes comprises 
            Dim ajouts As Double
            Dim ajoutc As Double
            Select Case .valS
                Case Is > -6     ' entre -5.99 et +6.00
                    ajouts = 0
                Case Is > -7     ' entre -6.00 et -6.99
                    ajouts = 0.25
                Case Is > -8.5  ' entre -7.00 et -8.49
                    ajouts = 0.5
                Case Is > -9.5  ' entre -8.50 et -9.49 
                    ajouts = 0.75
                Case Is > -10.5 ' entre -9.49 et -10.49 
                    ajouts = 1
                Case Else         ' entre -10.50 et -11.00
                    ajouts = 1.25
            End Select

            ' Traitement de CIMAGE
            ' Plage de C : -6.00 à +6.00 bornes comprises
            Select Case .valC
                Case Is > -3     ' entre +6.00 et -2.99
                    ajoutc = 0
                Case Is > -5     ' entre -3.00 et -4.99
                    ajoutc = 0.25
                Case Else        ' entre -5.00 et -6.00
                    ajoutc = 0.5
            End Select

            If .valS <= 0 And .valC <= 0 Then
                CIMAGE.Text = (.valC + ajoutc).ToString("0.00")
                SIMAGE.Text = (.valS + ajouts - ajoutc).ToString("0.00")
            Else
                CIMAGE.Text = (.valC).ToString("0.00")
                SIMAGE.Text = (.valS).ToString("0.00")
            End If

            ' on passe en VERT si ajouts <> 0
            If ajouts <> 0 Then
                SIMAGE.BackColor = Color.DarkGreen
            Else
                If ajoutc <> 0 Then
                    SIMAGE.BackColor = Color.DarkGreen
                Else
                    SIMAGE.BackColor = Color.LightSlateGray
                End If
            End If

            ' on passe en VERT si ajoutc <> 0
            If ajoutc <> 0 Then
                CIMAGE.BackColor = Color.DarkGreen
                SIMAGE.BackColor = Color.DarkGreen
            Else
                CIMAGE.BackColor = Color.LightSlateGray
            End If

            ' Traitement SIMAGE 2 et 3, CIMAGE 2 et 3 et AXEIMAGE 2 et 3
            SIMAGE2.Text = SIMAGE.Text
            If SIMAGE.BackColor = Color.DarkGreen Then
                SIMAGE2.BackColor = Color.DarkGreen
                LabelWL.Visible = True
                RectangleShapeWL.Visible = True
            Else
                SIMAGE2.BackColor = Color.LightSlateGray
                LabelWL.Visible = False
                RectangleShapeWL.Visible = False
            End If

            CIMAGE2.Text = CIMAGE.Text
            If CIMAGE.BackColor = Color.DarkGreen Then
                CIMAGE2.BackColor = Color.DarkGreen
                LabelWL.Visible = True
                RectangleShapeWL.Visible = True
            Else
                CIMAGE2.BackColor = Color.LightSlateGray
                LabelWL.Visible = False
                RectangleShapeWL.Visible = False
            End If

            SIMAGE3.Text = SIMAGE.Text
            If SIMAGE.BackColor = Color.DarkGreen Then
                SIMAGE3.BackColor = Color.DarkGreen
                LabelWL.Visible = True
                RectangleShapeWL.Visible = True
            Else
                SIMAGE3.BackColor = Color.LightSlateGray
                LabelWL.Visible = False
                RectangleShapeWL.Visible = False
            End If

            CIMAGE3.Text = CIMAGE.Text
            If CIMAGE.BackColor = Color.DarkGreen Then
                CIMAGE3.BackColor = Color.DarkGreen
                LabelWL.Visible = True
                RectangleShapeWL.Visible = True
            Else
                CIMAGE3.BackColor = Color.LightSlateGray
                LabelWL.Visible = False
                RectangleShapeWL.Visible = False
            End If

            ' Traitement de AXEIMAGE et VIMAGE
            valtext = 12
            VIMAGE.Text = valtext.ToString("0.00") ' fixe
            AXEIMAGE.Text = .valAxe.ToString("0")

            AXEIMAGE2.Text = AXEIMAGE.Text
            AXEIMAGE3.Text = AXEIMAGE.Text

            ' Traitement de SE,SEDILATE, KCI et KCF 
            .valSE = (.valC / 2) + .valS
            SE.Text = .valSE.ToString("0.00")
            .valSED = (.valCC / 2) + .valSC
            SED.Text = .valSED.ToString("0.00")
            .valKCI = (.valK1 + .valK2) / 2
            KCI.Text = .valKCI.ToString("0.00")
            .valKCF = .valKCI + .valSE
            KCF.Text = .valKCF.ToString("0.00")

            'Traitement de UOZMIN
            .valUOZMIN = ((.ValAL * .valPupilphoto) / (.ValAL - .ValACD))
            UOZMIN.Text = (.valUOZMIN).ToString("0.00")

            'Traitement de UOZMEAN
            .ValUOZMEAN = ((.ValAL * .valPupilmeso) / (.ValAL - .ValACD))
            UOZMEAN.Text = (.ValUOZMEAN).ToString("0.00")

            'Traitement de UOZMAX
            .ValUOZMAX = ((.ValAL * .valPupilmax) / (.ValAL - .ValACD))
            UOZMAX.Text = (.ValUOZMAX).ToString("0.00")

            ' Traitement de KPI
            Select Case .valQI
                Case Is < 0
                    .valKPI = ((Math.Sqrt(.valQI + 4)) * .valKCI) / 2
                Case Is > 0
                    .valKPI = (2 * .valKCI) / (Math.Sqrt(4 - .valQI))
                Case Else
                    .valKPI = .valKCI
            End Select
            KPI.Text = .valKPI.ToString("0.00")
            VALKPF = .valKPI
            KPF.Text = VALKPF.ToString("0.00")

            ' Traitement de QL
            .valKPF = .valKPI
            If .valKCF = .valKPF Then
                .valQL = 0
            Else
                If .valKCF < .valKPF Then
                    .valQL = (((1 - ((.valKCF / .valKPF) ^ 2))) * 4)
                Else
                    .valQL = (((1 - ((.valKPF / .valKCF) ^ 2))) * -4)
                End If
            End If
            QL.Text = .valQL.ToString("0.00")
            calculok = False

            ' Traitement de AD et ADP
            PictureBox2.Visible = True
            If .valSE > 0 Then
                If .valS > 0 And .valC = 0 Then
                    ValAD = 0
                    AD.Text = ValAD.ToString("0")
                    ValADP = CInt((Math.Abs(.valS * 16.3)))
                    ADP.Text = ValADP.ToString("0")
                    interne.Visible = False
                    ST.Visible = False
                    CT.Visible = False
                    AT.Visible = False
                    arobase.Visible = False
                    Me.PictureBox2.Image = My.Resources.img2
                End If

                If .valS = 0 And .valC > 0 Then
                    ValAD = 0
                    AD.Text = ValAD.ToString("0")
                    ValADP = CInt(Math.Abs(.valC * 16.3))
                    ADP.Text = ValADP.ToString("0")
                    interne.Visible = False
                    ST.Visible = False
                    CT.Visible = False
                    AT.Visible = False
                    arobase.Visible = False
                    Me.PictureBox2.Image = My.Resources.img3
                End If

                If .valS > 0 And .valC < 0 Then
                    'utilisation de la transformée
                    ValAD = 0
                    AD.Text = ValAD.ToString("0")
                    ValADP = CInt(Math.Abs(((.valCT + .valST) * 16.3) + (((.valCT + .valST) * 16.3) * 0.041666)))
                    ADP.Text = ValADP.ToString("0")
                    interne.Visible = True
                    ST.Visible = True
                    CT.Visible = True
                    AT.Visible = True
                    arobase.Visible = True
                    Me.PictureBox2.Image = My.Resources.img4
                End If

                If .valS > 0 And .valC > 0 Then
                    ValAD = 0
                    AD.Text = ValAD.ToString("0")
                    ValADP = CInt(Math.Abs(((.valC + .valS) * 16.3) + (((.valC + .valS) * 16.3) * 0.041666)))
                    ADP.Text = ValADP.ToString("0")
                    interne.Visible = False
                    ST.Visible = False
                    CT.Visible = False
                    AT.Visible = False
                    arobase.Visible = False
                    Me.PictureBox2.Image = My.Resources.img5
                End If

                If .valS < 0 And .valC > 0 Then
                    ValAD = CInt(Math.Abs(-(.valS * 15)))
                    AD.Text = ValAD.ToString("0")
                    ValADP = CInt(Math.Abs(.valC * 16.3))
                    ADP.Text = ValADP.ToString("0")
                    interne.Visible = False
                    ST.Visible = False
                    CT.Visible = False
                    AT.Visible = False
                    arobase.Visible = False
                    Me.PictureBox2.Image = My.Resources.img6
                End If
            End If

            If .valSE < 0 Then
                If .valS < 0 And .valC = 0 Then
                    ValAD = CInt(Math.Abs(-(.valS * 15)))
                    AD.Text = ValAD.ToString("0")
                    ValADP = 0
                    ADP.Text = ValADP.ToString("0")
                    interne.Visible = False
                    ST.Visible = False
                    CT.Visible = False
                    AT.Visible = False
                    arobase.Visible = False
                    Me.PictureBox2.Image = My.Resources.img7
                End If

                If .valS = 0 And .valC < 0 Then
                    ValAD = CInt(Math.Abs(-(.valC * 16.3)))
                    AD.Text = ValAD.ToString("0")
                    ValADP = 0
                    ADP.Text = ValADP.ToString("0")
                    interne.Visible = False
                    ST.Visible = False
                    CT.Visible = False
                    AT.Visible = False
                    arobase.Visible = False
                    Me.PictureBox2.Image = My.Resources.img8
                End If

                If .valS > 0 And .valC < 0 Then
                    ' Utilisation de la transformée
                    ValAD = CInt(Math.Abs((.valST) * 15))
                    AD.Text = ValAD.ToString("0")
                    ValADP = CInt(Math.Abs(.valCT * 16.3))
                    ADP.Text = ValADP.ToString("0")
                    interne.Visible = True
                    ST.Visible = True
                    CT.Visible = True
                    AT.Visible = True
                    arobase.Visible = True
                    Me.PictureBox2.Image = My.Resources.img9
                End If

                If .valS < 0 And .valC > 0 Then
                    ' Utilisation de la transformée
                    ValAD = CInt(Math.Abs(((.valCT + .valST) * 15) - (((.valCT + .valST) * 15) * 0.05)))
                    AD.Text = ValAD.ToString("0")
                    ValADP = 0
                    ADP.Text = ValADP.ToString("0")
                    interne.Visible = True
                    ST.Visible = True
                    CT.Visible = True
                    AT.Visible = True
                    arobase.Visible = True
                    Me.PictureBox2.Image = My.Resources.img10
                End If

                If .valS < 0 And .valC < 0 Then
                    interne.Visible = False
                    ST.Visible = False
                    CT.Visible = False
                    AT.Visible = False
                    arobase.Visible = False
                    ValAD = CInt(Math.Abs(((.valC + .valS) * 16.3) - (((.valC + .valS) * 16.3) * 0.041666)))
                    AD.Text = ValAD.ToString("0")
                    ValADP = 0
                    ADP.Text = ValADP.ToString("0")
                    Me.PictureBox2.Image = My.Resources.img11
                End If
            End If

            If .valSE = 0 Then
                If .valS < 0 And .valC > 0 Then
                    interne.Visible = False
                    ST.Visible = False
                    CT.Visible = False
                    AT.Visible = False
                    arobase.Visible = False
                    ValAD = CInt(Math.Abs(.valS * 15))
                    AD.Text = ValAD.ToString("0")
                    ValADP = CInt(Math.Abs(.valC * 16.3))
                    ADP.Text = ValADP.ToString("0")
                    Me.PictureBox2.Image = My.Resources.img12
                End If
                If .valS > 0 And .valC < 0 Then
                    ' Utilisation de la transformée
                    interne.Visible = True
                    ST.Visible = True
                    CT.Visible = True
                    AT.Visible = True
                    arobase.Visible = True
                    ValAD = CInt(Math.Abs(((.valCT + .valST) * 15) - (((.valCT + .valST) * 15) * 0.041666)))
                    AD.Text = ValAD.ToString("0")
                    ValADP = CInt(Math.Abs(.valCT * 16.3))
                    ADP.Text = ValADP.ToString("0")
                    Me.PictureBox2.Image = My.Resources.img13
                End If
                If .valS = 0 And .valC = 0 Then
                    interne.Visible = False
                    ST.Visible = False
                    CT.Visible = False
                    AT.Visible = False
                    arobase.Visible = False
                    ValAD = 0
                    AD.Text = ValAD.ToString("0")
                    ValADP = 0
                    ADP.Text = ValADP.ToString("0")
                    Me.PictureBox2.Image = My.Resources.img14
                End If
            End If

            ' Calcul de QFIDEAL ou QFPROP
            If Pseudo.Checked = True Then
                valQFPROP = -1.5 '
            Else
                Select Case Convert.ToInt16(TextAge.Text)
                    Case Is < 40
                        valQFPROP = -0.8 '   De 0 à 40 ans : -0.80
                    Case 40 To 41
                        valQFPROP = -0.9 '   De 40 à 41 ans : -0.90
                    Case 42 To 43
                        valQFPROP = -0.95 '  De 42 à 43 ans : -0.95
                    Case 44 To 46
                        valQFPROP = -1.0 '   De 44 à 46 ans : -1.00
                    Case 47 To 52
                        valQFPROP = -1.05 '  De 47 à 52 ans : -1.05
                    Case 53 To 56
                        valQFPROP = -1.1  '  De 53 à 56 ans : -1.10
                    Case 57 To 62
                        valQFPROP = -1.15   'De 57 à 62 ans : -1.15
                    Case 63 To 70
                        valQFPROP = -1.2 '   De 63 à 66 ans : -1.20
                    Case Is > 70
                        valQFPROP = -1.25 '  De 67 à plus : -1.25
                End Select
            End If
            QFPROP.Text = valQFPROP.ToString("0.00")

            'calcul de la textbox rotate
            If C.Text < "0" Then
                rotate.Text = AXE.Text
            Else
                rotate.Text = CStr(CDbl(AXE.Text) + 90)
            End If

            'rotation de l'image
            Dim Angle As Double = CDbl(Me.rotate.Text)
            Rotation(Angle)

            ' Calcul de RSB
            Try ' calcul
                RSB.Text = CStr(CDbl(PACHY.Text) - CDbl(AD.Text) - CDbl(Flap.Text))
            Catch ex As Exception
                'MsgBox("Saisie unvalide, remédier...  ", vbExclamation)
                Pupilphoto.Focus()
            End Try

            'Affichage des alertes rsb
            If RSB.Text > "300" Then
                PictureBoxvert.Visible = True
                labelrouge.Visible = False
                PictureBoxmainrouge.Visible = False
                PictureBoxJAUNE.Visible = False
                OvalShapeFalse.Visible = False
                FAILED.Visible = False
                OvalShapeok.Visible = True
                DONE.Visible = True
            End If
            If RSB.Text <= "250" Then
                PictureBoxvert.Visible = False
                labelrouge.Visible = True
                PictureBoxmainrouge.Visible = True
                PictureBoxJAUNE.Visible = False
                OvalShapeFalse.Visible = True
                FAILED.Visible = True
                OvalShapeok.Visible = False
                DONE.Visible = False
            End If
            If RSB.Text > "250" And RSB.Text < "300" Then
                PictureBoxvert.Visible = False
                labelrouge.Visible = False
                PictureBoxmainrouge.Visible = False
                PictureBoxJAUNE.Visible = True
                OvalShapeFalse.Visible = False
                FAILED.Visible = False
                OvalShapeok.Visible = True
                DONE.Visible = True
            End If

            'Calcul de CTHICKNESS
            CTHICKNESS.Text = CStr(CDbl(PACHY.Text) - CDbl(AD.Text))

            'calcul de ajustement sur hypermetropie
            valDELTAS = ((Convert.ToDouble(SED.Text)) - (Convert.ToDouble(SE.Text))) 'calcul de delta valeur absolue de la différence de S et de SC
            DELTAS.Text = valDELTAS.ToString("0.00") 'Affichage de Delta

            'Calcul de A1
            If valDELTAS > 0 Then
                VALA1 = -(valDELTAS / 2) 'calcul de A2 = (DELTAS / 2)
                A1.Text = VALA1.ToString("0.00") 'Affichage de A1
            Else
                A1.Text = "0.00" 'Affichage de A1
            End If

            'A valeur totale des ajustements
            A.Text = A1.Text

            ' Vérification de TS avec KCF et KPI DE VISION DE LOIN
            If .valQL <= 0 Then
                valverifTS = (.valKCF * (Math.Sqrt(4 + valQFPROP) / 2) - .valKPI)
                'TS =[KCF * Math.Sqrt (4+QIDEAL)/2] - KPI
            End If
            If .valQL > 0 Then
                valverifTS = (.valKCF * (Math.Sqrt(4 + valQFPROP) / 2) - .valKCF)
                'TS =[[KCF * Math.Sqrt (4+QIDEAL)/2] - KCF]
            End If

            VerifTS.Text = valverifTS.ToString("0.00")

            'Calcul de TSA
            VALTSA = valverifTS                 ' La TS finale qui servira aux calculs ultérieurs est egale a la TS sans ajustements +/- la TSA
            TSA.Text = VALTSA.ToString("0.00")  ' La TS finale qui servira aux calculs ultérieurs est egale a la TS sans ajustements +/- la TSA
        End With

        flagimage = 0
        OvalShapeok.Visible = True
        OvalShapeFalse.Visible = False
        DONE.Visible = True
        FAILED.Visible = False
        Enregistrementstructure()
        Accesvisiondepres.Focus() ' accès à vision de près
    End Sub


Elle fait beaucoup d'autres choses en sus du QF (apelé QFIDEAL OU QFPROP) et est complétement indépendante de la valeur de affichée dans QI. Elle s'en sert pour calculer KPI qui lui même servira a calculer entre autres QF
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
et est complétement indépendante de la valeur de affichée dans QI. Elle s'en sert pour calculer KPI qui lui même servira a calculer entre autres QF

pas exact et la l'erreur to textbox affiche ton valQI
ton fonction calcul se sert de valQI et non de la valeur de ton textbox
donc meme si tu modifies ton textbox le valQi n'est pas modifié puisqu'il le faut calculer de nouveau via la fonction calculqi
donc il va falloir bricoler quelque chose
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
Salut Galain,
Ben je l'ai postée car notre ami shayW me l'a demandé ......
Je pensais avoir été clair quand je parlais, d'une part du QI Calculé qui fonctionne bien et du QI entré manuellement qui doit se substituer au QI calculé pour calculer par exemple KCI donc OUI .valQI représente ici, soit le QI Calculé (si je n'ai pas modifié la valeur) soit le QI entré manuellement si je l'ai modifié
Je teste ta suggestion de suite d'autant que .valQI n'intervient pas plus haut dans la sub ...

ps : y a pas de MP sur ce forum ?
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
je teste ca ce jour mais je le sens bien la :-)
MP = message privés mais j ai compris comment ca marchait ici. Le destinataire doit être connecté pour pouvoir envoyer un MP ...
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
Yessss on dirait que c'est un succés :) :) :)
Ton idée était tout simplement géniale Galain. J'ai juste modifié ton
.valQI = convert.todouble(QI.text)
en
.valQI = CDbl(Me.QI.Text.Replace(".", ","))
sinon j'avais une grosse exception.

Mille merci a vous deux pour l'aide apportée et votre comprehension
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
je n'ai pas compris en quoi valQI = CDbl(Me.QI.Text.Replace(".", ","))
résoud le problème qui,était
Je clique sur le textbox QI, j'entre au clavier -0.15 et paffff ..... le QF reste toujours a 0.25 bien que le calcul de QF se fasse. la derniere valeur entrée est affichée mais pas prise en compte.
tu n'as pas parlé d'exception
et si tu veux verifier ton textbox.text qui soit numérique
Double.TryParse(QI.Text,valQI) qui donne true ou false
c.a.d si true valQI à la valeur QI.TEXT convertit en double
donc tu peux écrire de cette façon
if not Double.TryParse(QI.Text,valQI) then
  messagebox.show("chiffres seulement")
  exit sub
end if 


ainsi tu n'as besoin de remplacer le point par une virgule
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
nan en fait c'est le logiciel qui doit afficher des , et non des points.
Le contrôle d'erreur est fait pour tous les textbox a un autre moment avant le calcul et ce contrôle me faisait une exception car la virgule n'était pas présente pour le QI ...
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
52
et si tu écris dans le textboxqi -0,15 et clique sur le bouton calcul le QF change ?
et si tu écris dans le textboxqi -0,,,,,15toto
Messages postés
409
Date d'inscription
jeudi 30 juin 2005
Statut
Membre
Dernière intervention
21 novembre 2013
1
Ben msgbix de erreur valeur si puis qi mis a "" puis qi.focus et si j entre une valeur correcte ca fonctionne, le kpi donc le qf changent, sinon de nouveau message d erreur ...