IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

incrémentation boucle while


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut incrémentation boucle while
    Bonjour, voici une partie de mon 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
     Function CalculCaquot(ByVal i) As Double
            Dim a2 As Double = Convert.ToDouble(Me.Labela2.Text)
            Dim b2 As Double = Convert.ToDouble(Me.Labelb2.Text)
            Dim LabelQmaxi As Double
            Dim ValeurSi As Double = Convert.ToDouble(Me.DataGridView1.Rows(i - 1).Cells("Surfacetotale").Value)
            Dim ValeurLi As Double = Convert.ToDouble(Me.DataGridView1.Rows(i - 1).Cells("longueur").Value)
            Dim ValeurCi As Double = Convert.ToDouble(Me.DataGridView1.Rows(i - 1).Cells("Coefficientimpermeabilisation").Value)
            Dim ValeurPi As Double = Convert.ToDouble(Me.DataGridView1.Rows(i - 1).Cells("pente").Value)
     
            i = 1
            While i < 100
                LabelQmaxi = ((((a2 / 60) / 6.6) * (0.28 * (ValeurLi / 100) ^ 0.84 * (ValeurSi / 10000) ^ -0.42) ^ -b2) ^ (1 / (1 - 0.287 * b2))) * (ValeurCi ^ (1 / (1 - 0.287 * b2))) * ((ValeurPi / 100) ^ (0.41 * b2 / (1 - 0.287 * b2))) * ((ValeurSi / 10000) ^ ((0.95 - 0.507 * b2) / (1 - 0.287 * b2))) * 1000
                i += 1
            End While
            Return LabelQmaxi
    Dans un premier temps, je veux faire le calcul pour les valeurs ValeurS1, ValeurP1, etc,que je rentre dans un premier DataGridView jusque là il n'y a pas de problème ca fonctionne. Ensuite, je voudrais appliquer la formule avec les valeurs ValeurS2, ValeurP2, etc puis ValeurS3, S4, etc, que je rentre également dans DataGridView1 puis les afficher le résultat dans un DataGridView2 après avoir appuyer sur un bouton. Le problème est que ca ne fonctionne pas car à chaque fois, le programme reprend les valeurs S1, P1.

    Je voudrais donc savoir comment incrémenter dans ce cas précis, et quand je dis "incrémenteré, ca veut dire reprendre les valeurs de la deuxième ligne, 3ème ligne etc

    Pour plus de précisions, voici le programme complet:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    Public Class Form3
     
        Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ComboBoxRegion2.Items.Add("Alsace")
            ComboBoxRegion2.Items.Add("Aquitaine")
            ComboBoxRegion2.Items.Add("Auvergne")
            ComboBoxRegion2.Items.Add("Bourgogne")
            ComboBoxRegion2.Items.Add("Bretagne")
            ComboBoxRegion2.Items.Add("Champagne")
            ComboBoxRegion2.Items.Add("Centre")
            ComboBoxRegion2.Items.Add("Franche-Comté")
            ComboBoxRegion2.Items.Add("Limousin")
            ComboBoxRegion2.Items.Add("Languedoc")
            ComboBoxRegion2.Items.Add("Lorraine")
            ComboBoxRegion2.Items.Add("Midi-Pyrénées")
            ComboBoxRegion2.Items.Add("Nord")
            ComboBoxRegion2.Items.Add("Normandie")
            ComboBoxRegion2.Items.Add("Pays-de-Loire")
            ComboBoxRegion2.Items.Add("Picardie")
            ComboBoxRegion2.Items.Add("Poitou-Charente")
            ComboBoxRegion2.Items.Add("Provence-Côte d'Azur")
            ComboBoxRegion2.Items.Add("Région parisienne")
            ComboBoxRegion2.Items.Add("Rhône-Alpes")
        End Sub
     
     
        Private Sub ComboBoxRegion2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxRegion2.SelectedIndexChanged
            ComboBoxVille2.Items.Clear()
            If ComboBoxRegion2.Text = "Alsace" Then
                ComboBoxVille2.Items.Add("Mulhouse")
                ComboBoxVille2.Items.Add("Strasbourg")
            End If
            If ComboBoxRegion2.Text = "Aquitaine" Then
                ComboBoxVille2.Items.Add("Agen")
                ComboBoxVille2.Items.Add("Biarritz")
                ComboBoxVille2.Items.Add("Bordeaux")
                ComboBoxVille2.Items.Add("Cazaux")
                ComboBoxVille2.Items.Add("Dax")
                ComboBoxVille2.Items.Add("Mont-de-Marsan")
                ComboBoxVille2.Items.Add("Pau")
            End If
            If ComboBoxRegion2.Text = "Auvergne" Then
                ComboBoxVille2.Items.Add("Clermont-Ferrand")
            End If
            If ComboBoxRegion2.Text = "Bourgogne" Then
                ComboBoxVille2.Items.Add("Auxerre")
                ComboBoxVille2.Items.Add("Château-Chinon")
                ComboBoxVille2.Items.Add("Dijon")
                ComboBoxVille2.Items.Add("Mont-St-Vincent")
            End If
            If ComboBoxRegion2.Text = "Bretagne" Then
                ComboBoxVille2.Items.Add("Rostrenen")
            End If
            If ComboBoxRegion2.Text = "Champagne" Then
                ComboBoxVille2.Items.Add("Reims")
            End If
            If ComboBoxRegion2.Text = "Centre" Then
                ComboBoxVille2.Items.Add("Chartres")
                ComboBoxVille2.Items.Add("Orléans")
            End If
            If ComboBoxRegion2.Text = "Franche-Comté" Then
                ComboBoxVille2.Items.Add("Belfort")
            End If
            If ComboBoxRegion2.Text = "Limousin" Then
                ComboBoxVille2.Items.Add("Limoges")
            End If
            If ComboBoxRegion2.Text = "Languedoc" Then
                ComboBoxVille2.Items.Add("Carcassonne")
                ComboBoxVille2.Items.Add("Montpellier")
                ComboBoxVille2.Items.Add("Nîmes")
                ComboBoxVille2.Items.Add("Perpignan")
            End If
            If ComboBoxRegion2.Text = "Lorraine" Then
                ComboBoxVille2.Items.Add("Metz")
            End If
            If ComboBoxRegion2.Text = "Midi-Pyrénées" Then
                ComboBoxVille2.Items.Add("Gourdon")
                ComboBoxVille2.Items.Add("Millau")
                ComboBoxVille2.Items.Add("Ossun")
                ComboBoxVille2.Items.Add("Toulouse")
            End If
            If ComboBoxRegion2.Text = "Nord" Then
                ComboBoxVille2.Items.Add("Lille")
            End If
            If ComboBoxRegion2.Text = "Normandie" Then
                ComboBoxVille2.Items.Add("Alençon")
                ComboBoxVille2.Items.Add("Caen")
                ComboBoxVille2.Items.Add("Rouen")
            End If
            If ComboBoxRegion2.Text = "Pays-de-Loire" Then
                ComboBoxVille2.Items.Add("Angers")
                ComboBoxVille2.Items.Add("Le Mans")
                ComboBoxVille2.Items.Add("Nantes")
            End If
            If ComboBoxRegion2.Text = "Picardie" Then
                ComboBoxVille2.Items.Add("Abbeville")
                ComboBoxVille2.Items.Add("St-Quentin")
            End If
            If ComboBoxRegion2.Text = "Poitou-Charente" Then
                ComboBoxVille2.Items.Add("Angoulême")
                ComboBoxVille2.Items.Add("Cognac")
                ComboBoxVille2.Items.Add("Poitiers")
            End If
            If ComboBoxRegion2.Text = "Provence-Côte d'Azur" Then
                ComboBoxVille2.Items.Add("Ajaccio")
                ComboBoxVille2.Items.Add("Bastia")
                ComboBoxVille2.Items.Add("Marignane")
                ComboBoxVille2.Items.Add("Nice")
                ComboBoxVille2.Items.Add("Salon")
            End If
            If ComboBoxRegion2.Text = "Région parisienne" Then
                ComboBoxVille2.Items.Add("Brétigny")
                ComboBoxVille2.Items.Add("Paris-Montsouris")
            End If
            If ComboBoxRegion2.Text = "Rhône-Alpes" Then
                ComboBoxVille2.Items.Add("Challes-les-Eaux")
                ComboBoxVille2.Items.Add("Grenoble")
                ComboBoxVille2.Items.Add("Lyon")
                ComboBoxVille2.Items.Add("Montélimar")
            End If
        End Sub
     
        Private Sub ComboBoxVille2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBoxVille2.SelectedIndexChanged
            If ComboBoxVille2.Text = "Mulhouse" Then
                Labela2.Text = 310
                Labelb2.Text = 0.689
            End If
            If ComboBoxVille2.Text = "Strasbourg" Then
                Labela2.Text = 255
                Labelb2.Text = 0.481
            End If
            If ComboBoxVille2.Text = "Agen" Then
                Labela2.Text = 285
                Labelb2.Text = 0.411
            End If
            If ComboBoxVille2.Text = "Biarritz" Then
                Labela2.Text = 241
                Labelb2.Text = 0.34
            End If
            If ComboBoxVille2.Text = "Bordeaux" Then
                Labela2.Text = 392
                Labelb2.Text = 0.51
            End If
            If ComboBoxVille2.Text = "Cazaux" Then
                Labela2.Text = 379
                Labelb2.Text = 0.635
            End If
            If ComboBoxVille2.Text = "Dax" Then
                Labela2.Text = 273
                Labelb2.Text = 0.53
            End If
            If ComboBoxVille2.Text = "Mont-de-Marsan" Then
                Labela2.Text = 301
                Labelb2.Text = 0.411
            End If
            If ComboBoxVille2.Text = "Pau" Then
                Labela2.Text = 297
                Labelb2.Text = 0.511
            End If
            If ComboBoxVille2.Text = "Clermont-Ferrand" Then
                Labela2.Text = 246
                Labelb2.Text = 0.451
            End If
            If ComboBoxVille2.Text = "Auxerre" Then
                Labela2.Text = 205
                Labelb2.Text = 0.421
            End If
            If ComboBoxVille2.Text = "Château-Chinon" Then
                Labela2.Text = 591
                Labelb2.Text = 0.719
            End If
            If ComboBoxVille2.Text = "Dijon" Then
                Labela2.Text = 234
                Labelb2.Text = 0.431
            End If
            If ComboBoxVille2.Text = "Mont-St-Vincent" Then
                Labela2.Text = 175
                Labelb2.Text = 0.361
            End If
            If ComboBoxVille2.Text = "Rostrenen" Then
                Labela2.Text = 186
                Labelb2.Text = 0.506
            End If
            If ComboBoxVille2.Text = "Reims" Then
                Labela2.Text = 282
                Labelb2.Text = 0.527
            End If
            If ComboBoxVille2.Text = "Chartres" Then
                Labela2.Text = 211
                Labelb2.Text = 0.496
            End If
            If ComboBoxVille2.Text = "Orléans" Then
                Labela2.Text = 226
                Labelb2.Text = 0.475
            End If
            If ComboBoxVille2.Text = "Belfort" Then
                Labela2.Text = 161
                Labelb2.Text = 0.355
            End If
            If ComboBoxVille2.Text = "Limoges" Then
                Labela2.Text = 196
                Labelb2.Text = 0.44
            End If
            If ComboBoxVille2.Text = "Carcassonne" Then
                Labela2.Text = 259
                Labelb2.Text = 0.364
            End If
            If ComboBoxVille2.Text = "Montpellier" Then
                Labela2.Text = 310
                Labelb2.Text = 0.362
            End If
            If ComboBoxVille2.Text = "Nîmes" Then
                Labela2.Text = 199
                Labelb2.Text = 0.198
            End If
            If ComboBoxVille2.Text = "Perpignan" Then
                Labela2.Text = 234
                Labelb2.Text = 0.356
            End If
            If ComboBoxVille2.Text = "Metz" Then
                Labela2.Text = 327
                Labelb2.Text = 0.617
            End If
            If ComboBoxVille2.Text = "Gourdon" Then
                Labela2.Text = 216
                Labelb2.Text = 0.418
            End If
            If ComboBoxVille2.Text = "Millau" Then
                Labela2.Text = 302
                Labelb2.Text = 0.514
            End If
            If ComboBoxVille2.Text = "Ossun" Then
                Labela2.Text = 364
                Labelb2.Text = 0.55
            End If
            If ComboBoxVille2.Text = "Toulouse" Then
                Labela2.Text = 327
                Labelb2.Text = 0.494
            End If
            If ComboBoxVille2.Text = "Lille" Then
                Labela2.Text = 323
                Labelb2.Text = 0.499
            End If
            If ComboBoxVille2.Text = "Alençon" Then
                Labela2.Text = 359
                Labelb2.Text = 0.699
            End If
            If ComboBoxVille2.Text = "Caen" Then
                Labela2.Text = 320
                Labelb2.Text = 0.542
            End If
            If ComboBoxVille2.Text = "Rouen" Then
                Labela2.Text = 241
                Labelb2.Text = 0.426
            End If
            If ComboBoxVille2.Text = "Angers" Then
                Labela2.Text = 293
                Labelb2.Text = 0.52
            End If
            If ComboBoxVille2.Text = "Le Mans" Then
                Labela2.Text = 210
                Labelb2.Text = 0.441
            End If
            If ComboBoxVille2.Text = "Nantes" Then
                Labela2.Text = 129
                Labelb2.Text = 0.352
            End If
            If ComboBoxVille2.Text = "Abbeville" Then
                Labela2.Text = 252
                Labelb2.Text = 0.469
            End If
            If ComboBoxVille2.Text = "St-Quentin" Then
                Labela2.Text = 246
                Labelb2.Text = 0.492
            End If
            If ComboBoxVille2.Text = "Angoulême" Then
                Labela2.Text = 297
                Labelb2.Text = 0.511
            End If
            If ComboBoxVille2.Text = "Cognac" Then
                Labela2.Text = 242
                Labelb2.Text = 0.431
            End If
            If ComboBoxVille2.Text = "Poitiers" Then
                Labela2.Text = 272
                Labelb2.Text = 0.437
            End If
            If ComboBoxVille2.Text = "Ajaccio" Then
                Labela2.Text = 299
                Labelb2.Text = 0.376
            End If
            If ComboBoxVille2.Text = "Bastia" Then
                Labela2.Text = 291
                Labelb2.Text = 0.308
            End If
            If ComboBoxVille2.Text = "Marignane" Then
                Labela2.Text = 159
                Labelb2.Text = 0.257
            End If
            If ComboBoxVille2.Text = "Nice" Then
                Labela2.Text = 216
                Labelb2.Text = 0.24
            End If
            If ComboBoxVille2.Text = "Salon" Then
                Labela2.Text = 302
                Labelb2.Text = 0.349
            End If
            If ComboBoxVille2.Text = "Brétigny" Then
                Labela2.Text = 226
                Labelb2.Text = 0.499
            End If
            If ComboBoxVille2.Text = "Paris-Montsouris" Then
                Labela2.Text = 362
                Labelb2.Text = 0.491
            End If
            If ComboBoxVille2.Text = "Challes-les-Eaux" Then
                Labela2.Text = 285
                Labelb2.Text = 0.469
            End If
            If ComboBoxVille2.Text = "Grenoble" Then
                Labela2.Text = 273
                Labelb2.Text = 0.397
            End If
            If ComboBoxVille2.Text = "Lyon" Then
                Labela2.Text = 311
                Labelb2.Text = 0.436
            End If
            If ComboBoxVille2.Text = "Montélimar" Then
                Labela2.Text = 249
                Labelb2.Text = 0.379
            End If
        End Sub
     
        Private Sub ButtonCalcul2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCalcul2.Click
     
            If Verification() Then
                Me.DataGridView2.Rows(0).Cells("debits").Value = CalculCaquot(1).ToString("0.0#")
                Me.DataGridView2.Rows(1).Cells("debits").Value = CalculCaquot(2).ToString("0.0#")
     
            Else
                Me.erreur2.Visible = True
            End If
        End Sub
     
     
     
        Function Verification() As Boolean
            Dim Bon As Boolean = True
            If Me.Labela2.Text Is Nothing Or Not IsNumeric(Me.Labela2.Text) Then
                MessageBox.Show("Entrez une valeur numérique pour a")
                Bon = False
            Else
                Select Case CType(Me.Labela2.Text, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour a")
                        Bon = False
                End Select
            End If
            If Me.Labelb2.Text Is Nothing Or Not IsNumeric(Me.Labelb2.Text) Then
                MessageBox.Show("Entrez une valeur numérique pour b")
                Bon = False
            Else 
                Select Case CType(Me.Labelb2.Text, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour b")
                        Bon = False
     
                    Case Is > 1
                        MessageBox.Show("Entrez une valeur entre 0 et 1 pour b")
                        Bon = False
                End Select
            End If
            If Me.DataGridView1.Rows(0).Cells("Surfacetotale").Value Is Nothing Or Not IsNumeric(Me.DataGridView1.Rows(0).Cells("Surfacetotale").Value) Then
                MessageBox.Show("Entrez une valeur numérique pour S")
                Bon = False
            Else
                Select Case CType(Me.DataGridView1.Rows(0).Cells("Surfacetotale").Value, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour S")
                        Bon = False
                End Select
            End If
            If Me.DataGridView1.Rows(0).Cells("longueur").Value Is Nothing Or Not IsNumeric(Me.DataGridView1.Rows(0).Cells("longueur").Value) Then
                MessageBox.Show("Entrez une valeur numérique pour L")
                Bon = False
            Else
                Select Case CType(Me.DataGridView1.Rows(0).Cells("longueur").Value, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour L")
                        Bon = False
                End Select
            End If
            If Me.DataGridView1.Rows(0).Cells("Coefficientimpermeabilisation").Value Is Nothing Or Not IsNumeric(Me.DataGridView1.Rows(0).Cells("Coefficientimpermeabilisation").Value) Then
                MessageBox.Show("Entrez une valeur numérique pour C")
                Bon = False
            Else
                Select Case CType(Me.DataGridView1.Rows(0).Cells("Coefficientimpermeabilisation").Value, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour C")
                        Bon = False
                End Select
            End If
            If Me.DataGridView1.Rows(0).Cells("pente").Value Is Nothing Or Not IsNumeric(Me.DataGridView1.Rows(0).Cells("pente").Value) Then
                MessageBox.Show("Entrez une valeur numérique pour p")
                Bon = False
            Else
                Select Case CType(Me.DataGridView1.Rows(0).Cells("pente").Value, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour p")
                        Bon = False
                End Select
            End If
            Return Bon
        End Function
     
        Function CalculCaquot(ByVal i) As Double
            Dim a2 As Double = Convert.ToDouble(Me.Labela2.Text)
            Dim b2 As Double = Convert.ToDouble(Me.Labelb2.Text)
            Dim LabelQmaxi As Double
            Dim ValeurSi As Double = Convert.ToDouble(Me.DataGridView1.Rows(i - 1).Cells("Surfacetotale").Value)
            Dim ValeurLi As Double = Convert.ToDouble(Me.DataGridView1.Rows(i - 1).Cells("longueur").Value)
            Dim ValeurCi As Double = Convert.ToDouble(Me.DataGridView1.Rows(i - 1).Cells("Coefficientimpermeabilisation").Value)
            Dim ValeurPi As Double = Convert.ToDouble(Me.DataGridView1.Rows(i - 1).Cells("pente").Value)
     
            i = 1
            While i < 100
                LabelQmaxi = ((((a2 / 60) / 6.6) * (0.28 * (ValeurLi / 100) ^ 0.84 * (ValeurSi / 10000) ^ -0.42) ^ -b2) ^ (1 / (1 - 0.287 * b2))) * (ValeurCi ^ (1 / (1 - 0.287 * b2))) * ((ValeurPi / 100) ^ (0.41 * b2 / (1 - 0.287 * b2))) * ((ValeurSi / 10000) ^ ((0.95 - 0.507 * b2) / (1 - 0.287 * b2))) * 1000
                i += 1
            End While
            Return LabelQmaxi
     
        End Function
     
     
     
    End Class
    Je précise que je construis un logiciel de dimensionnement d'ouvrages hydrauliques en se basant sur la formule de Caquot.

  2. #2
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Bonjour,

    alors avant de commencer:
    • merci de poster les réponses quand tu les as
      je pense bien sur à ton post précédent, parceque le
      j'ai finalement trouvé une autre solution. Merci.
      c'est vraiment pas terrible


    ensuit il faut montrer le code qui te bloque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Private Sub ButtonCalcul2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCalcul2.Click
     
            If Verification() Then
                Me.DataGridView2.Rows(0).Cells("debits").Value = CalculCaquot(1).ToString("0.0#")
                Me.DataGridView2.Rows(1).Cells("debits").Value = CalculCaquot(2).ToString("0.0#")
     
            Else
                Me.erreur2.Visible = True
            End If
        End Sub
    Mais même avec ça, on a du mal a comprendre le rapport avec
    les valeurs ValeurS1, ValeurP1, etc
    je pense qu'il serait bien que tu prenne le temps de faire un topic propre,
    en te posant les bonnes question.

    PS: mon avis sur ton code, tu va trop vite, et tu te perd.
    PPS: ton code est pas clair, il pourrais largement être optimisé
    PPPS: Je ne vois pas pourquoi dans ton calcul caquot tu fait Rows(i - 1)
    PPPPS: Rows(i) suffit largement avec CalculCaquot(0) quand tu l'appel
    PPPPPS: d'ou l'erreur de ton ancien post a mon avis
    PPPPPPPPS: etc.

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2011
    Messages : 115
    Par défaut
    une petite base de données ne serait pas mieux pour tes listbox ?
    Au moins pas besoin de retoucher au code si tu veux ajouter quelque chose...

  4. #4
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Tout dépend de la quantité de données qu'il a à traiter, et surtout s'il y a besoin de les archiver.

    Mais je partage ton avis, un DataGridView est un objet d'affichage.
    il est peu judicieux de passer par lui pour traiter les données. *sans parler que ça alourdi le code...*

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut
    En fait, j'ai utiliser le DataGridView, car c'est ce qu'il paraissait le plus simple.

    Ensuite, c'est vrai que mon code pourrait evidemment être optimisé mais je n'ai pas les compétences pour le faire, j'ai débuté il y a peu, je ne suis pas un expert.

    Pour le post précédent, c'est vrai, j'aurais du mettre la solution, mais j'ai bien fait de ne pas la mettre car elle a fonctionné au départ, puis ensuite ca ne fonctionnait plus.

    En ce qui concerne les valeurs:

    -ValeurP1, S1, etc sont rentrées dans la première ligne de mon DataGridView,
    -ValeurP2, S2, etc sont rentrées dans la deuxième ligne de mon DataGridView

    ces valeurs correspondent à une pente, une longueur, un coefficient et une surface.
    Le i correspond à la ligne de mon DataGridView.

    Il faut donc que je mette Rows(i) et que je fasse démarrer mon i à 0, c'est bien ca?

    Je vais me renseigner sur la base de données.

  6. #6
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    Bah je ne sais pas,
    il faudrait déjà comprendre ce que doit faire ton "CalculCaquot"

    peu tu nous expliquer, rapidement le principe?
    les lignes représentent les régions, et pour chaque régions tu dois calculer un Caquot?

    PS: pas besoin d'être expert pour coder proprement
    PPS: juste de la rigueur, et des tuyaux

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut
    L'utilisateur doit tout d'abord entrer les valeurs des coefficients a et b, soit directement dans les textbox, soit grace au coix de région et ville.

    Ensuite, dans chaque ligne du DataGridView, l'utilisateur va entrer les valeurs d'une pente, d'une longueur, d'un coefficient et d'une surface. C'est pour cela que je dis que le i dans ma boucle while correspond à la ligne du tableau.

    Il va alors appuyer sur le bouton calcul. Les résultats s'affichent alors dans la dernière colonne.

    Est-ce plus clair?

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,
    En concervant ton principe de programmation.

    Citation Envoyé par babass-77 Voir le message
    L'utilisateur doit tout d'abord entrer les valeurs des coefficients a et b, soit directement dans les textbox, soit grace au coix de région et ville.

    Ensuite, dans chaque ligne du DataGridView, l'utilisateur va entrer les valeurs d'une pente, d'une longueur, d'un coefficient et d'une surface.
    Les vérifications.
    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
    23
    24
    25
    26
    27
    28
    29
    30
        Function Verificationab() As Boolean
     
            If Me.Labela2.Text Is Nothing Or Not IsNumeric(Me.Labela2.Text) Then
                MessageBox.Show("Entrez une valeur numérique pour a")
                Return False
            Else
                If CType(Me.Labela2.Text, Double) < 0 Then
                    MessageBox.Show("Entrez une valeur positive pour a")
                    Return False
                End If
            End If
     
            If Me.Labelb2.Text Is Nothing Or Not IsNumeric(Me.Labelb2.Text) Then
                MessageBox.Show("Entrez une valeur numérique pour b")
                Return False
            Else
                Select Case CType(Me.Labelb2.Text, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour b")
                        Return False
     
                    Case Is > 1
                        MessageBox.Show("Entrez une valeur entre 0 et 1 pour b")
                        Return False
                End Select
            End If
     
            Return True
     
        End Function
    Note, il n'est pas judicieux de nommer des textbox 'Label...', il est préférable de les appeler 'txt...'

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
        Function VerificationSLCP(ByVal i As Integer) As Boolean
            Dim Bon As Boolean = True
            If Me.DataGridView1.Rows(i).Cells("Surfacetotale").Value Is Nothing Or Not IsNumeric(Me.DataGridView1.Rows(i).Cells("Surfacetotale").Value) Then
                MessageBox.Show("Entrez une valeur numérique pour S")
                Bon = False
            Else
                Select Case CType(Me.DataGridView1.Rows(i).Cells("Surfacetotale").Value, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour S")
                        Bon = False
                End Select
            End If
            If Me.DataGridView1.Rows(i).Cells("longueur").Value Is Nothing Or Not IsNumeric(Me.DataGridView1.Rows(i).Cells("longueur").Value) Then
                MessageBox.Show("Entrez une valeur numérique pour L")
                Bon = False
            Else
                Select Case CType(Me.DataGridView1.Rows(i).Cells("longueur").Value, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour L")
                        Bon = False
                End Select
            End If
            If Me.DataGridView1.Rows(i).Cells("Coefficientimpermeabilisation").Value Is Nothing Or Not IsNumeric(Me.DataGridView1.Rows(i).Cells("Coefficientimpermeabilisation").Value) Then
                MessageBox.Show("Entrez une valeur numérique pour C")
                Bon = False
            Else
                Select Case CType(Me.DataGridView1.Rows(i).Cells("Coefficientimpermeabilisation").Value, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour C")
                        Bon = False
                End Select
            End If
            If Me.DataGridView1.Rows(i).Cells("pente").Value Is Nothing Or Not IsNumeric(Me.DataGridView1.Rows(i).Cells("pente").Value) Then
                MessageBox.Show("Entrez une valeur numérique pour p")
                Bon = False
            Else
                Select Case CType(Me.DataGridView1.Rows(i).Cells("pente").Value, Double)
                    Case Is < 0
                        MessageBox.Show("Entrez une valeur positive pour p")
                        Bon = False
                End Select
            End If
            Return Bon
        End Function
    Il vaudrait mieux vérifier au moment de la saisie de l'utilisateur.



    Citation Envoyé par babass-77 Voir le message
    C'est pour cela que je dis que le i dans ma boucle while correspond à la ligne du tableau.

    Il va alors appuyer sur le bouton calcul. Les résultats s'affichent alors dans la dernière colonne.
    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 ButtonCalcul2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCalcul2.Click
            Dim i As Integer = 0
     
            If Verificationab() Then
                While i < DataGridView1.Rows.Count - 1
                    If VerificationSLCP(i) Then
                        Me.DataGridView2.Rows(i).Cells("debits").Value = CalculCaquot(i).ToString("0.0#")
                        i += 1
                    Else
                        Me.erreur2.Visible = True
                        i = DataGridView1.Rows.Count ' force la sortie du while en cas d'erreur. A voir suivant les besoins
                    End If
                End While
            Else
                Me.erreur2.Visible = True
            End If
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Function CalculCaquot(ByVal i) As Double
            Dim a2 As Double = Convert.ToDouble(Me.Labela2.Text)
            Dim b2 As Double = Convert.ToDouble(Me.Labelb2.Text)
            Dim ValeurST As Double = Convert.ToDouble(Me.DataGridView1.Rows(i).Cells("Surfacetotale").Value)
            Dim ValeurL As Double = Convert.ToDouble(Me.DataGridView1.Rows(i).Cells("longueur").Value)
            Dim ValeurCI As Double = Convert.ToDouble(Me.DataGridView1.Rows(i).Cells("Coefficientimpermeabilisation").Value)
            Dim ValeurP As Double = Convert.ToDouble(Me.DataGridView1.Rows(i).Cells("pente").Value)
            Return ((((a2 / 60) / 6.6) * (0.28 * (ValeurL / 100) ^ 0.84 * (ValeurST / 10000) ^ -0.42) ^ -b2) ^ (1 / (1 - 0.287 * b2))) * _
                   (ValeurCI ^ (1 / (1 - 0.287 * b2))) * _
                   ((ValeurP / 100) ^ (0.41 * b2 / (1 - 0.287 * b2))) * _
                   ((ValeurST / 10000) ^ ((0.95 - 0.507 * b2) / (1 - 0.287 * b2))) * 1000
        End Function


    Citation Envoyé par babass-77 Voir le message
    Ensuite, dans chaque ligne du DataGridView, l'utilisateur va entrer les valeurs d'une pente, d'une longueur, d'un coefficient et d'une surface. ... Les résultats s'affichent alors dans la dernière colonne.
    Tu indiques que les résultats vont s'afficher dans la dernière colonne de ton datagridview, mais dans ton code tu as 2 datagridviews, il y a une incohérence là.

    As-tu lu le cours vb-net par Philippe Lasserre?

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut
    Oui pardon, c'est bien dans un deuxième DataGridView, j'ai encore l'habitude de mon ancienne version ou je n'avais qu'un seul DataGridView, c'est pour ca j'ai confondu.

    J'ai testé ce que vous m'avez proposé, ce la me semble clair, mais j'ai exactement la même erreur qu'avec ma version de code.

    Lorsque je débogue, il n'y a pas de problème, je remplis les 2 premières lignes de mon DataGridView pour tester sans oublier de selectionner a et b et lorsque j'appuie sur Calcul, on me renvoie sur le programme et cette ligne est surlignée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DataGridView2.Rows(i).Cells("debits").Value = CalculCaquot(i).ToString("0.0#")
    avec un message d'erreur me disant ceci:

    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    Nom du paramètre : index
    Je ne comprends pas cette erreur.

    Sinn, oui j'ai lu une partie du cours de Philippe Lassere mais pas la totalité.

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Tel que tu l'as fait, il doit exister le même nombre de lignes pour les 2 datagrid, puisque les calculs par rapport au premier sont inscrit dans le deuxième.
    Avec le débogeur vérifie 'DataGridView1.Rows.Count' et 'DataGridView2.Rows.Count'
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut
    Comment fait-on pour vérifier ca? Quand je remplie mon DataGridView1, les lignes s'ajoutent au fur et à mesure. Mais le DataGridView2 lui n'evolue pas au fur et à mesure.

    Maintenant ca fonctionne mais il faut que l'utilisateur développe le DataGridView2 pour avoir le même nombre de lignes que dans le DataGridView1
    . Pour cela il faut entrer une valeur dans la première ligne pour faire apparaitre une seconde ligne, puis effacer cette valeur. Et recommencer autant de fois cette manoeuvre jusqu'à obtenir le nombre de lignes voulues. Puis il faut bloquer les deux dataGridView en cliquant sur l'étoile.

    Ce n'est pas vraiment évident, le logiciel doit être vraiment simple d'utilisation. Il faudrait que je trouve une solution plus simple et plus évidente pour l'utilisateur.

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Pourquoi ne places tu pas le résultat sur une colonne en fin de ton "DataGridView1" ?

    Parceque la tu vas avoir du mal.
    - Si l'utilisateur supprime une ligne dans le "DataGridView1". Pas répercuté sur le 2 + décalage des données.
    - Quand il va descendre avec l'ascenseur dans le "DataGridView1" le 2 ne bougera pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Private Sub AjouteLignes()
            Dim i As Integer = DataGridView2.Rows.Count
            While DataGridView2.Rows.Count < DataGridView1.Rows.Count
                DataGridView2.Rows.Add()
                i += 1
            End While
        End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Private Sub ButtonCalcul2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCalcul2.Click
            Dim i As Integer = 0
     
            Call AjouteLignes()
     
            If Verificationab() Then
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut
    C'est ce que j'avais fait au départ, mais la même erreur s'affichait. Mon code était différent. Il faudrait que je reessaye.

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Une fois ta colonne rajoutée, il suffit de remplacer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        Me.DataGridView2.Rows(i).Cells("debits").Value = CalculCaquot(i).ToString("0.0#")
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        Me.DataGridView1.Rows(i).Cells("debits").Value = CalculCaquot(i).ToString("0.0#")
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Par défaut
    En tout cas votre méthode fonctionne très bien. Merci. Je vais quand même essayer de revenir à un seul DataGridView.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer les valeurs de textbox à chaque incrément d'une boucle while
    Par cclleemmeenntt dans le forum Macros et VBA Excel
    Réponses: 34
    Dernier message: 31/03/2015, 08h38
  2. Incrémenter un Array par une boucle While
    Par Misoss dans le forum Langage
    Réponses: 3
    Dernier message: 09/08/2010, 21h38
  3. Boucle while sans incrémentation
    Par Jcpan dans le forum Langage
    Réponses: 2
    Dernier message: 24/02/2009, 16h35
  4. probléme d'incrémentation dans la boucle while
    Par cmoi_doudi dans le forum Langage
    Réponses: 3
    Dernier message: 28/05/2008, 10h19
  5. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo