Recherche de l'ecart minimal ou de l'egalite entre 2 valeurs affichées
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:
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, :cry::cry::cry:
que pensez vous du code ????
Merci bien