Calculs affinés par succession de listbox. Comment s'en sortir ?

Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 - 20 déc. 2010 à 19:29
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 - 25 déc. 2010 à 19:48
Bonsoir

Mon appli en vb6, qui effectue des calculs, est, a un moment donné, dependante d'une listbox contenant les valeurs : 0.0; -0.1;-0.2;-0.3 ... -1.5
jusque la, en fonction de la valeur selectionnée, le logiciel effectuait des calculs qui fonctionnaient.

Dim nombre As Single 
If List2.ListIndex = -1 Then
nombre = -1 ' valeur par défaut à modifier si nécessaire
Else
nombre = Val(List2.List(List2.ListIndex)) ' valeur sélectionnée
End If
Select case nombre
Case -0.1
mon calcul pour cette valeur
Case -0.2
'idem pour la suite
mon calcul pour cette valeur
Case ......

Case -1.5
End Select


Mainenant je dois affiner mon calcul a savoir :
pour chaque cas, effectuer un calcul au centieme par listbox

exemple : pour case -0.1 je dois afficher une listbox contenant les valeurs : -0.10;-0.11;-0.12; ....;-0.19 (que j'appelle ListboxA) et effectuer les calculs (les mêmes que dans la premiere listbox) avec ces nouvelles valeurs.

J'ai crée 9 Listbox ue je fais afficher selon le "case" selectionné
Jusque la tout va bien mais je m'embrouille un peu dans les boucles et cela me fait 81 cas a traiter si je ne me gourre pas. N'y a t'il pas quelque chose de moins lourd (je ne dois pas mettre toutes les valeurs dans une seule listbox)
qui ferait par exemple en shematisant

- cas -0.1 ==> effectuer les calculs avec la valeur -0.1 et afficher la tesxboxA
selectionner la valeur affinée a la main puis
avec un bouton "calcul affiné" ==> effectuer le calcul avec la valeur de la listboxA

- cas -0.2 ==> effectuer les calculs avec la valeur -0.2 et afficher la tesxboxB (de 0.20 à 0.29)
selectionner la valeur affinée a la main puis
avec un bouton "calcul affiné" ==> effectuer le calcul avec la valeur de la listboxB

Etc ...

du genre :
Dim nombre As Single 
If List2.ListIndex = -1 Then
nombre = -1 ' valeur par défaut à modifier si nécessaire
Else
nombre = Val(List2.List(List2.ListIndex)) ' valeur sélectionnée
End If
Select case nombre
Case -0.1
mon calcul pour cette valeur
ListA.Show = True
    ListB.Show = False
    'idem pour toutes les sous liste
    Dim nombre As Single 
    If ListA.ListIndex = -1 Then
    nombre = -0.10 ' valeur par défaut à modifier si nécessaire
    Else
    nombre = Val(ListA.List(ListA.ListIndex)) ' valeur sélectionnée
    End If
   Select case nombre
   Case -0.10
   mon calcul pour cette valeur
   Case -0.11
   mon calcul pour cette valeur
   etc
   End select

Case -0.2
mon calcul pour cette valeur
Case ......

Case -1.5
End Select



Merci bien

22 réponses

bouchaibkiki Messages postés 2 Date d'inscription lundi 7 juin 2010 Statut Membre Dernière intervention 20 décembre 2010
20 déc. 2010 à 22:08
po mal
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
21 déc. 2010 à 00:32
Salut

pourquoi as tu besoin de 9 listbox
tu les montres tous en meme temps ?
je n'ai pas vu ton code j'ai l'impression que tu
t'es compliqué
0
Profil bloqué
21 déc. 2010 à 01:48
Salut Attila54

si tes calculs aux centièmes ( -0.10, -0.11, -0.12, etc...) sont identiques à ceux au dixième ( -0.1) pourquoi ne pas mettre ces calculs dans un sous-programme que tu appellerais quand tu en as besoin

une autre astuce : quand tu fais le calcul au dixième ( -0.1) fais les 9 autres calculs aux centièmes ( de -0.11 à - 0.19) et affiche les 10 calcule effectués. Dans ce cas là nullement besoin de 9 listbox suplémentaires


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Profil bloqué
21 déc. 2010 à 01:53
Dans ma seconde astuce au lieu d'afficher un calcul tu en afficheras 10 mais vu que c'est les 10 mêmes avec des valeurs de -0.1 à -0.19 un sous programme s'impose et tu l'appelles 10 fois avec les 10 valeurs différentes

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0

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

Posez votre question
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
21 déc. 2010 à 12:05
Bonjour a tous

pourquoi as tu besoin de 9 listbox
tu les montres tous en meme temps ?


Non, pas toutes en même temps,
- pour la valeur -0.1 de ma listbox principale, j'affiche une listbox allant de 0.10 à 0.19
- pour la valeur -0.2 de ma listbox principale, j'affiche une listbox allant de 0.20 à 0.29
et je cache la listbox allant de 0.10 à 0.19
.... etc

si tes calculs aux centièmes ( -0.10, -0.11, -0.12, etc...) sont identiques à ceux au dixième ( -0.1) pourquoi ne pas mettre ces calculs dans un sous-programme que tu appellerais quand tu en as besoin


Sur environ 25 calculs concernant une valeur de la listbox principale (mettons, pour -0.1)
j'en ai 22 qui sont les mêmes et 3 qui différent puisqu'ils ont comme coefficient multiplicateur la valeur de la listbox

Pour le "sous programme", j'avoue ne pas avoir bien compris

Merci
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
21 déc. 2010 à 12:50
Salut
Le plus simple serait d'écrire une sub qui
calcule tous les centiemes selon la valeur choisi dans la première listbox et introduire les résultats dans une listbox
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
21 déc. 2010 à 13:21
bizarre, je vois ce topic en double dans l'index du forum ...... je ne l'ai pourtant posté qu'une fois
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
21 déc. 2010 à 14:57
une autre astuce : quand tu fais le calcul au dixième ( -0.1) fais les 9 autres calculs aux centièmes ( de -0.11 à - 0.19) et affiche les 10 calcule effectués. Dans ce cas là nullement besoin de 9 listbox suplémentaires


J'ai à peu pres 25 lignes de calcul par valeur et du coup, je ne vois pas vraiment comment "integrer mes calculs au centieme et surtout comment les afficher ....

exemple :
Dim nombre As Single ' variable qui contient la valeur
If ListQ.ListIndex = -1 Then
nombre = -1 ' valeur par défaut
Else
nombre = Val(ListQ.List(ListQ.ListIndex)) ' valeur sélectionnée
End If
Select Case nombre
Case -0.1       
       A.Text = moncalcul1      
       B.Text = moncalcul2
       C.Text = unevaleur * (0.1), "0.00")
       D.Text = moncalcul4            
       E.Text = moncalcul5       
       F.Text = moncalcul6       
       G.Text = moncalcul7
       H.Text = moncalcul8
       I.Text = moncalcul9
       J.Text = moncalcul10
       K.Text = uneautrevaleur * (0.1), "0.00")
       L.Text = "-0.1"
Case -0.2
.
.
.
Case -1.5
End Select
If KCFP.Text < KPFP.Text Then
   M.Text = moncalcul11
Else
   M.Text = moncalcul12
End If
End Sub


J'ai C; K et L qui dépendant donc de la valeur "cliquée" dans ma listbox. Le reste ne change pas
Au cas précis, je ne vois pas comment "inserer" les calculs pour les valeurs -0.10; -0.11 .... etc et encore moins comment les afficher


Gros merci
0
Profil bloqué
21 déc. 2010 à 18:07
Salut Attila54
Tu as une listbox principale qui t'affiche les valeurs de bases aux dixièmes.
Lorsque tu sélectionnes une valeur tu affiches une seule listbox secondaire avec les centièmes associés à la listbox principale.Cela ne te sert à rien d'avoir à l'écran les 9 listbox supplémentaires. Tu replis ta listbox secondaire en tenant compte de la valeur de bas de la listbox principale. ensuite tu sélectionnes la valeur secondaire que tu désires et tu fais les calculs


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
21 déc. 2010 à 18:29
Ah oui mais non en fait, ce aue j ai fait, c est que j ai cree effectivement 9 textbox secondaires, mais chacune s affiche selon la valeur selectionnee dans la box principale. J aurais bien voulu n avoir qu une box secondaire a creer mais je sais pas faire
0
Profil bloqué
21 déc. 2010 à 21:30
en tenant compte de la valeur de basE de la listbox principale : désolé pour le E dans le précédent message

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Profil bloqué
21 déc. 2010 à 21:38
Salut attila54
Imagine une listbox principale qui contient les nombres 10, 20 , 30 , 40 , etc jusqu'à 90
Imagine une listbox secondaire qui est vide
Tu cliques sur le nombre 30 dans la listbox principale
Tu remplis la listbox secondaire avec 30, 31, 32, 33, 34, 35, 36, 37, 38 et 39
si tu avais cliqué sur 50 dans la listbox principale la listbox secondaire contiendrait 50, 51, 52, 53, etc....
Le remplissage de la listbox secondaire se fait par code
quand tu cliques dans la listbox secondaire tu fais les calculs

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
21 déc. 2010 à 22:18
Bonsoir
Entre temps pour dépanner
Listdixiemevaleur
Listcentiemevaleur sont 2 listbox
Option Explicit

Private Sub BuildListdixiemevaleur()
Dim iter As Integer
Dim value As Double
 Me.Listdixiemevaleur.Clear
For iter = 0 To -15 Step -1
  value = iter / 10
  If Int(Abs(value)) = 0 Then
    If value = 0 Then
      Me.Listdixiemevaleur.AddItem "0." & Trim(str(value))
    Else
     Me.Listdixiemevaleur.AddItem "-0" & Trim(str(Abs(value)))
    End If
  Else
    Me.Listdixiemevaleur.AddItem Trim(str(value))
  End If
Next iter

End Sub

Private Sub Form_Load()
Me.Listcentiemevaleur.Visible = False
BuildListdixiemevaleur
End Sub


Private Sub Listdixiemevaleur_Click()
Me.Listcentiemevaleur.Visible = True

BuildListcentiemevaleur (Me.Listdixiemevaleur.Text)
End Sub

Private Sub BuildListcentiemevaleur(valuedixieme As String)
Dim iter As Integer
Dim value As Double


Me.Listcentiemevaleur.Clear


For iter = 0 To 9
  value = iter / 100
  If Int(value) = 0 Then
    If value = 0 Then
      Me.Listcentiemevaleur.AddItem valuedixieme & value
    Else
     Me.Listcentiemevaleur.AddItem valuedixieme & Mid(value, 3)
    End If
 
  End If
Next iter
End Sub

0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
21 déc. 2010 à 22:29
Je corrige le code
Option Explicit

Private Sub BuildListdixiemevaleur()
Dim iter As Integer
Dim value As Double
 Me.Listdixiemevaleur.Clear
For iter = 0 To -15 Step -1
  value = iter / 10
  If Int(Abs(value)) = 0 Then
    If value = 0 Then
      Me.Listdixiemevaleur.AddItem "0." & Trim(str(value))
    Else
     Me.Listdixiemevaleur.AddItem "-0" & Trim(str(Abs(value)))
    End If
  Else
    If value = -1 Then
     Me.Listdixiemevaleur.AddItem "-1.0"
    Else
     Me.Listdixiemevaleur.AddItem Trim(str(value))
    End If
  End If
Next iter

End Sub

Private Sub Form_Load()
Me.Listcentiemevaleur.Visible = False
BuildListdixiemevaleur
End Sub


Private Sub Listdixiemevaleur_Click()
Me.Listcentiemevaleur.Visible = True

BuildListcentiemevaleur (Me.Listdixiemevaleur.Text)
End Sub

Private Sub BuildListcentiemevaleur(valuedixieme As String)
Dim iter As Integer
Dim value As Double


Me.Listcentiemevaleur.Clear


For iter = 0 To 9
  value = iter / 100
  If Int(value) = 0 Then
    If value = 0 Then
      Me.Listcentiemevaleur.AddItem valuedixieme & value
    Else
     Me.Listcentiemevaleur.AddItem valuedixieme & Mid(value, 3)
    End If
 
  End If
Next iter
End Sub

0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
21 déc. 2010 à 23:05
merci beaucoup shayW

Galain, c est exactement ce que je voulais faire ... sans savoir comment proceder
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
22 déc. 2010 à 22:38
Bon ben apres beaucoup d essais, ce n est pas concluant. Je n arrive pas a enchainer la sequence clic sur listbox1 entraine le remplissage de listbox2
0
Profil bloqué
22 déc. 2010 à 23:09
Salut attila54
Ce n'est pas facile de te donner du code étant donné que toi tu as déjà commencé le projet avec les dixièmes.
D'après ce que tu nous dit voici à mon humble avis comment doit fonctionner ton programme ( je reprends la notion de listbox principale et de listbox secondaire

1) Form_Load de la feuille
- vider les 2 listbox
- remplir la listbox principale avec les dixièmes
- remplir la listbox secondaire avec les centièmes en prenant comme base la valeur par défaut de la listbox des dixièmes
2 ) Sélection dans la listbox principale
- garder la valeur sélectionnée
- vider la listbox secondaire
- remplir la listbox secondaire avec les centièmes en tenant compte de la valeur sélectionnée dans la listbox principale

3) Sélection dans la listbox secondaire
- garder la valeur sélectionnée dans cette listbox ( c'est cette valeur qui ensuite servira pour les calculs)

4) Un bouton de commande pour lancer les calculs
- faire les calculs avec la valeur sélectionnée dans la listbox secondaire ( pensez ici aussi à la valeur par défaut)

Si on ne sélectionne rien dans les 2 listbox les calculs doivent se faire avec la valeur par défaut de la listbox principale.
Si on ne sélectionne rien dans la listbox secondaire les calculs doivent se faire avec la valeur par défaut de la liste secondaire

il est judicieux de mettre un étiquette ( un contrôle label) qui affiche la valeur servant aux calculs.

Je ne peux pas faire mieux. a toi de jouer




La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
23 déc. 2010 à 00:29

Bon ben apres beaucoup d essais, ce n est pas concluant


Ah bon
c'est bizarre chez moi ça marche
je choisis en cliquant un item de lisbox1
j'ai le lisxbox2 qui s'affiche
0
Attila54 Messages postés 409 Date d'inscription jeudi 30 juin 2005 Statut Membre Dernière intervention 21 novembre 2013 1
23 déc. 2010 à 01:20
J ai en fait 2 projets en cours
un avec ma listbox au 10ieme qui fonctionne tres bien, l autre avec les 2 listbox au 10ieme et au 100ieme que j ai archi simplifie et qui se compose de :
- 1 form
- 9 textbox labellisees A,B,C,D,E,F,G,H,I
- 2 listbox labellisees ListQ et listR
- 1 commandButton labellise "calcul"

je rentre des valeurs comprises emtre -10,00 et 50,00 dans les textbox A,B et C

J ai en outre
D = A + B
E = B - C
F = (A + C) / 2

Bien sur jusque la tout va bien

Ma lisQ comporte (et comportera toujours)les valeurs 0,00;-0,1;-0,2;-0,3; ...;-1.5 avec -1,0 valeur par defaut

Ma lisR comportera des valeurs fonction de LiseQ avec aussi une valeur par defaut


G = E * valeur choisie dans listR
H = F - valeur choisie dans listR
I = valeur choisie dans listR

Ca aussi je sais faire

Je que je ne sais pas faire :
afficher et remplir listR en cliquant sur une valeur de listQ (-0,10;-
0,11;-0,12 ...;-0,19 pour Val listQ = -0,1 ... etc pour les autres valeurs de listQ). Ma listQ ne servirait en fait qu a ouvrir une autre liste "plus precise"

Pour finir, je choisirais une valeur dans listR et un bouton "calcul" donnerait G,H et I et meme en tournant et retournant le problene ds tous les sens, je cale
0
Profil bloqué
23 déc. 2010 à 01:39
Salut Attila54
Envoie-moi en privé ton adresse email par le biais de codes-sources ( tu envoies un message en privé à Galain)
J'ai fait la partie que tu ne sais pas faire et je vais y joindre les 9 Textbox ainsi que les calculs
Le code que ShayW fonctionnait à une petite erreur près
Je t'enverrai cela demain soir vers 10 ou 11 heures du soir

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0
Rejoignez-nous