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

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 août 2013 à 10:25
Salut
et si tu écris
QI.Text = ValQI.ToString
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
8 août 2013 à 10:29
tiens salut shayw comment va ?

ben si j'enlève le ("0.00") ca m'affiche 0 tout simplement.
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
8 août 2013 à 10:45
Bonjour Attila54.

Pourriez-vous, en plus de votre procédure calculqi, donner la liste exhaustive de vos déclarations de variables ?

Cordialement.
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
8 août 2013 à 10:57
Bien sur, la voila :
' VERSION 4.1.1.8
Imports System.Windows.Forms
Imports OXL = Microsoft.Office.Interop.Excel
Imports System.IO
Imports System.Data.OleDb
Imports System.Drawing.Drawing2D
Imports System.Math
Imports System
Imports System.Net
Imports System.Text
Public Class Visiondeloin
    Dim resolution As Boolean
    Dim erreur As Boolean
    Public ValFlap As Double
    Public ValRSB As Double
    Public valDELTAS As Double
    Dim ValPACHY As String
    Public ValAXE As Integer
    Public ValAD As Integer
    Dim ValAL As Integer
    Public ValST As Double
    Public ValCT As Double
    Dim ValAT As String
    Dim ValATL As String
    Public ValADP As Integer
    Public ValSIMAGE2 As Double
    Public ValCIMAGE2 As Double
    Public ValAXEIMAGE2 As Integer
    Public ValSIMAGE2P As Double
    Public ValSIMAGE3 As Double
    Public ValCIMAGE3 As Double
    Public ValAXEIMAGE3 As Double
    Public ValS As Double
    Public ValC As Double
    Public ValSC As Double
    Public ValCC As Double
    Public ValK1 As Double
    Public ValK2 As Double
    Public ValQI As Double
    Public ValAC As Integer
    Public ValSE As Double
    Public ValSED As Double
    Public valUOZMIN As Double
    Public valUOZMEAN As Double
    Public valUOZMAX As Double
    Public ValPupilphoto As Integer
    Public ValPupilmeso As Integer
    Public ValPupilmax As Integer
    Public ValACD As Double
    Public valCTHICKNESS As Integer
    Public VALDVA As Double
    Public VALADD As Double
    Public VALNVA As Double
    Public VALDVA2 As Double
    Public VALADD2 As Double
    Public VALNVA2 As Double
    Public VALOZ As Double
    Public VALversion As Double
    Public valrotate As Integer
    Public VALA As Double
    Public VALA1 As Double
    Public valverifTS As Double
    Public VALQL As Double
    Public VALTSA As Double
    Public VALKPF As Double
    Public VALKCF As Double
    Public VALKPI As Double
    Public VALQILEFT As Double
    Public VALQIRIGHT As Double
    Public valTxtpseudo As String
    Public valTxtrelift As String
    Public valTxtcat As String
    Public VALdeltaqi As Double
    Public AppExcel As OXL.Application
    Public VALaddage As Double
    Public VALqfref As Double
    Private xlWorkbook As OXL.Workbook
    'feuille 1
    Private xlWorkSheetOne As OXL.Worksheet
0

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

Posez votre question
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
8 août 2013 à 11:19
Merci.

J'ai mis tout cela sur mon ordinateur, et j'étudierai votre code cet après midi.
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
8 août 2013 à 11:31
merci bien

--
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
8 août 2013 à 12:42
J'ai eu un peu plus de temps que prévu avant le repas. J'ai donc fait ce que je vous ai dit, en créant bien sûr les trois TextBox et un bouton de commande.
J'ai mis "N" et "OD" là où il fallait, j'ai ajouté
QILEFT = -1.14
QIRIGHT = -0.59

en tête de votre procédure, et j'ai lancé cette dernière. Eh bien elle m'affiche impérialement "-0.30". Et je vous jure ne pas posséder de flûte à six schtroumpfs
Cordialement.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 août 2013 à 13:06
Oui ça va

L'ophtalmo n'a pas encore consulté le psy ???
dans ton exemple tu dis
QILEFT affiche "-1.14"
QIRIGHT affiche "-0.59"
et où dans ton code tu attribues une valeur à QILEFT et QIRIGHT
dans ton code QILEFT et QIRIGHT ne reçoit aucune valeur
donc = 0
ce qui donne
et aussi VALQILEFT c'est QILEFT ?
Select Case VALQILEFT ( VALQILEFT ou QILEFT = 0 ,aucune valeur leur ai attribué donc par défaut = 0??)
ce qui donne selon ton code
ValQI = VALQILEFT
ValQI = 0

l'ophtalmo va se dire il sont tous miro ????
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
Modifié par Attila54 le 8/08/2013 à 14:13
re shayw
bah valqileft et valqiright sont declarées comme des "double" et sont des datas initialement importées d'une feuille excel.

La textbox QILEFT va contenir valquileft (si tu veux, qileft.text = valqileft.Tostring("0.00")

Zermero:
grand merci, cela voudrait dire que mon code n'est pas si pourri que cela mais dans ce cas pourquoi m'affiche t'il royalement 0.00 moi ? c'est comme si, bien que je les voie affichées, les valeurs contenues dans valqileft et right n'etaient pas prises en compte dans ma sub non ?
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
8 août 2013 à 14:39
Le code de votre procédure CalculQI n'est nullement pourri. C'est la totalité du code qui pose problème, y compris ce qui est censé définir vos variables VALQILEFT et VALQIRIGHT, et qui les affiche probablement dans des TextBox QILEFT et QIRIGHT. Mais le fait que ces supposés TextBox affichent leurs valeurs ne signifie pas nécessairement que ces valeurs ont été renseignées.
C'est là que vous devez creuser.
Cordialement.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 août 2013 à 14:55
bah valqileft et valqiright sont declarées comme des "double" et sont des datas initialement importées d'une feuille excel.

ton code fonctionne
et Zermelo que je salue le comfirme aussi
donc quel est le problème ?
est ce VALQILEFT VALQIRIGHT recoivent bien leur données de ta
feuille excel
tu dois avoir un ligne de code de ce genre
VALQILEFT =
VALQIRIGHT =
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
Modifié par Attila54 le 8/08/2013 à 15:41
re shayw

voici ce qui importe les data de l'excel pour QILEFT et QIRIGHT
Private Sub Buttonload_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonload.Click
       ' Fichier Excel
        Dim CheminFicher As String
        Dim BoiteDialogue As New OpenFileDialog
        txtDocteur2.Text = txtDocteur.Text
        If AppExcel IsNot Nothing Then
            MessageBox.Show("Excel Worksheet is closing please wait")
            If xlWorkSheetOne IsNot Nothing Then
                xlWorkSheetOne = Nothing
            End If
            If xlWorkbook IsNot Nothing Then
                xlWorkbook.Close()
                xlWorkbook = Nothing
            End If
            AppExcel.Quit()
            AppExcel = Nothing
        End If
        With BoiteDialogue
            ' Initialisation de la boite de dialogue
            .Title = "Load Data"
            .InitialDirectory = "\D:\encours\"
            .Filter = "Fichiers Excel |*.xls; *.xlsx"

            ' vérification de la séléction
            If .ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                CheminFicher = .FileName
            Else
                MessageBox.Show("Aucun fichier Excel séléctionné")
                Exit Sub ' Abandon de la routine
            End If
            'ouvre l'onglet 1 de l'application
            AppExcel = New OXL.Application
            xlWorkbook = AppExcel.Workbooks.Open(CheminFicher)
            xlWorkSheetOne = CType(xlWorkbook.Worksheets(1), Microsoft.Office.Interop.Excel.Worksheet)
            AppExcel.Visible = False

            'chargement des data en Textbox 
            Dim rng As OXL.Range = Nothing

.
.

            rng = CType(Me.xlWorkSheetOne.Cells(16, 15), Microsoft.Office.Interop.Excel.Range)
            Me.K2.Text = CType(rng.Value, String)

            rng = CType(Me.xlWorkSheetOne.Cells(22, 2), Microsoft.Office.Interop.Excel.Range)
            Me.QIRIGHT.Text = CType(rng.Value, String)

            rng = CType(Me.xlWorkSheetOne.Cells(22, 10), Microsoft.Office.Interop.Excel.Range)
            Me.QILEFT.Text = CType(rng.Value, String)
.
.


En debug je vois très bien qileft et qiright s'afficher pour info
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
8 août 2013 à 15:44
 Me.QIRIGHT.Text = CType(rng.Value, String)

ok

et où rentre calculqi dans le scénario ?
peut etre appelle ta sub calculqi dans l'évenement Buttonload_Click
à la fin
Private Sub Buttonload_Click( .....
 blabla
calculqi
end sub
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
8 août 2013 à 18:27
Bah non ca marche pas, toujours 0.00 ....
par contre, en attribuant une valeur fixe a qileft et qiright, alors la oui ca marche ...


--
0
Utilisateur anonyme
8 août 2013 à 18:51
Bonsoir à tous,

As-tu utilisé le mode pas à pas (F8) pour observer comment se déroule ta sub selon ce que tu entres dans tes textbox ?
Peut-être un problème d'orthographe, de majuscules, condition oubliée...
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
8 août 2013 à 18:55
Bonsoir.
Je préconise les conversions suivantes,

        VALQILEFT = CDbl(Me.QILEFT.Text.Replace(".", ","))
        VALQIRIGHT = CDbl(Me.QIRIGHT.Text.Replace(".", ","))

en fin de l'événement Buttonload_Click
Bonne soirée.
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
9 août 2013 à 11:42
Bonjour Attila54.

Si sous n'avez plus besoin de moi, veuillez me le faire savoir, de sorte que j'ôte de mon ordinateur les tests que j'ai fait pour vous.
Cordialement.
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
9 août 2013 à 13:37
Bonjour a vous 2
désolé du retard, je viens juste d'effectuer les changements ce matin et ça fonctionne bien maintenant. Je ne comprends pas pourquoi j'ai besoin de ces conversions mais en tout cas, je vous remercie beaucoup de vos aides respectives

--
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
9 août 2013 à 14:55
J'en suis content pour vous. Souhaitez vous que je vous explique le pourquoi et le comment de ces conversions ?
Cordialement.
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
10 août 2013 à 11:37
Re Zermelo
Bien sur que je suis preneur, toute information me permettant de progresser est la bienvenue

--
0
Rejoignez-nous