Bonjour,

Voici mon souci
Dans un formulaire, j'ai une listbox appellée listQ comprenant des valeurs que j'appelle "nombre" allant de +1.00 à -2.00 au pas de 1/100 (donc, 1.00; 0.99; 0.98; ...; -2.00)
lorsque je clique sur une valeur de la listbox, ceci declenche une sub calcul ayant pour fonction de trouver et d'afficher dans une textbox appelée TS une valeur decimale au 1/100.
Ce calcul fonctionne tres bien et on voit donc que "nombre" et valTS sont liés par la sub "calcul" et si l'un bouge, l'autre bouge aussi.

J'ai parallèlement, et issue d'une autre sub "calculadjust", une textbox appelée TSA qui affiche une valeur decimale au 1/100

Mon but final est que ValTS et ValTSA soient egaux ou au pire les plus proches possibles, c'est à dire que ValTS varie pour s'approcher de ValTSA (qui, elle, ne bouge pas)
Jusque maintenant, je procède manuellement, a savoir :
exemple : j'ai ValTS = -2.04 et ValTSA = -2.69
- je clique sur "nombre" de la listbox, ce qui fait varier ValTS jusqu'à avoir les deux valeurs au plus proche.
- Je regarde alors la valeur de "nombre" dans la listbox et j'affiche celle ci dans une textbox resultat

Je voudrais faire cela de maniere automatique via un button "calculate" qui declencherait l'operation

j'ai essaye ceci en introduisant la notion d'ecart (pour l'instant sans afficher le resultat dans une textbox):

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
Private Sub Automatique()
        Dim i As Integer, trouve As Boolean
        Dim ecartqfmin As Double ' plus petit écart
        Dim ecartqfactuel As Double  ' ecart actuel
        Dim indexecart As Integer ' index de l'écart dans ListQ
 
        ListQ.Visible = False
        trouve = False
        For i = 0 To ListQ.Items.Count - 1
            nombre = Convert.ToDouble(ListQ.Items(i).ToString)
            If Convert.ToDouble(TS.Text) = Convert.ToDouble(TSA.Text) Then
                trouve = True
                ListQ.TopIndex = i
                ListQ.SelectedIndex = i
                Exit For
            Else
                ' on calcule l'écart entre TS et TSA
                ecartqfactuel = Math.Abs(Math.Abs(Convert.ToDouble(TS.Text)) - Math.Abs(Convert.ToDouble(TSA.Text)))
                If i = 0 Then
                    ' on calcule l'écart actuel en valeur  absolue. Comme c'est le premier écart il est automatiquement l'écart minimum
                    ecartqfmin = ecartqfactuel
                    indexecart = 0
                Else
                    ' si ecartqfactuel < ecartqfmin alors ecartqfactuel devient ecartqfmin
                    If ecartqfactuel < ecartqfmin Then
                        ecartqfmin = ecartqfactuel
                        indexecart = i
                    End If
                End If
            End If
        Next
        If trouve = False Then
            ' on n'a pas trouvé TS = TSA donc on prend au plus proche
            ListQ.TopIndex = indexecart
            ListQ.SelectedIndex = indexecart
            ' on relance le calcul avec la valeur de ListQ pointée par indexecart ( c'est le plus petit écart)
           calcul()            
nombre = Convert.ToDouble(ListQ.Items(indexecart).ToString)
            End If
        ListQ.Visible = True
          End Sub
 
 Private Sub Buttoncalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttoncalculate.Click
Automatique()
End Sub
mais rien ne fonctionne ni ne bouge,
que pensez vous du code ????

Merci bien