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):
mais rien ne fonctionne ni ne bouge,
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
que pensez vous du code ????
Merci bien
Partager