Somme d'une listbox [Résolu]

stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 19 mars 2010 à 10:51 - Dernière réponse :  ucfoutu
- 18 janv. 2013 à 01:10
Bonjour je souhaite faire la somme d'une listbox mais je comprend pas en quoi mon code es faux, alors pouvez vous m'aider svp. Mon code est le suivant :


Dim i, j As Integer
j = Liste.Lstb_pts.ListCount - 1
For i = 0 To j

total = total + Liste.Lstb_pts.List(i, 3)

Next

Label7 = total


Par exemple avec ce code j'obtiens : 10 + 0 + 0 + 0 + 100 = 10000100 alors je ne comprends plus rien...
Afficher la suite 

Votre réponse

30 réponses

Meilleure réponse
lolokun 1241 Messages postés mardi 10 octobre 2006Date d'inscription 27 août 2013 Dernière intervention - 19 mars 2010 à 10:55
3
Merci
Bonjour,

Les éléments d'une listebox sont des chaines de caractères, il faut donc les convertir si tu veux les additionner en tant que chiffres..


L'expérience, c'est une connerie par jour, mais jamais la même..

Merci lolokun 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de lolokun
stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 19 mars 2010 à 11:08
0
Merci
D'accord, merci pour l'information et comment faire alors ?
Commenter la réponse de stick25
stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 19 mars 2010 à 11:23
0
Merci
J'ai essayé le code suivant mais une erreur au niveau de ma conversion.

Dim i, j As Integer
j = Liste.Lstb_dist.ListCount - 1
For i = 0 To j
Dim Nombre As Double
Nombre = CDbl(Liste.Lstb_dist.List(i, 3))

total = total + Nombre

Next


Ca se joue à pas grand chose je sais mais ça me ferait bien avancer. Merci
Commenter la réponse de stick25
lolokun 1241 Messages postés mardi 10 octobre 2006Date d'inscription 27 août 2013 Dernière intervention - 19 mars 2010 à 11:24
0
Merci
Essayes plutôt avec Val, ou Cint

VOici un lien qui pourra t'être utile..


L'expérience, c'est une connerie par jour, mais jamais la même..
Commenter la réponse de lolokun
stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 19 mars 2010 à 11:30
0
Merci
C'est bon ça marche, une tite faute de frappe pour mon dernier code !! ^^

Un grand merci !!!!
Commenter la réponse de stick25
lolokun 1241 Messages postés mardi 10 octobre 2006Date d'inscription 27 août 2013 Dernière intervention - 19 mars 2010 à 11:49
0
Merci
De rien, et penses à valider ton post avec le bouton réponse acceptée sur le ou les posts qui t'ont aidé à résoudre ton problème, cela pourra permettre à d'autres membres rencontrant le même souci de connaître la résolution.


L'expérience, c'est une connerie par jour, mais jamais la même..
Commenter la réponse de lolokun
stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 19 mars 2010 à 14:52
0
Merci
Je profite de ta gentillesse lolokun pour te poser une nouvelle question, du même ordre de difficulté que la précédente : j'ai écris le code suivant mais les conditions de mes if pose pb...si jamais qq'un pouvait me dire où je fais faux !
Dim i, j As Integer
j = Liste.Lstb_pts.ListCount - 1
For i = 0 To j
If Liste.Lstb_pts.List(i, 3) = 0 And Liste.Lstb_pts.List(i - 1, 3) <> 0 Then
tdep = Lstb_pts.List(i - 1, 3)
End If
If Liste.Lstb_pts.List(i, 3) = 0 And Liste.Lstb_pts.List(i + 1, 3) <> 0 Then
tfin = Lstb_pts.List(i + 1, 3)
End If
Next

Label7 = tdep
Label8 = tfin

Merci !
Commenter la réponse de stick25
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 19 mars 2010 à 18:29
0
Merci
Salut stick25
Tout d'abord pour une nouvelle question il est vivement conseillé de créer un nouveau post sur le forum

Les conditions des if te posent problème
1) si i 0 ( en début de boucle) Liste.Lstb_pts.List(i - 1, 3) pose problème car i -1 -1 : les index dans une liste vont de 0 à Liste.Listcount -1
2) Le même problème se posera dans le second if lorsque i sera = à Liste.Listcount - 1 ( en fin de liste) : Liste.Lstb_pts.List(i + 1, 3) n'existera pas
en espérant t'avoir éclairé

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
Commenter la réponse de cs_Galain
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 19 mars 2010 à 18:30
0
Merci
Que veux-tu faire exactement ?

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
Commenter la réponse de cs_Galain
stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 22 mars 2010 à 09:03
0
Merci
Mon problème est le suivant : dans la 4ième ligne de ma listbox "Liste.Lstb_pts" j'ai par exemple les valeurs suivantes :
...
t1
0
0
0
0
t2
...
j'aimerais alors pouvoir récupérer les valeurs t1 et t2.

Merci d'avance.
Commenter la réponse de stick25
stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 22 mars 2010 à 09:12
0
Merci
J'écris le code suivant, mais toujours un problème avec mes if !

Dim i, j As Integer
j = Liste.Lstb_pts.ListCount
For i = 1 To j
If Liste.Lstb_pts.List(i, 3) = 0 And Liste.Lstb_pts.List(i - 1, 3) <> 0 Then
tdep = Liste.Lstb_pts.List(i - 1, 3)
End If
Next

Dim u, v As Integer
v = Liste.Lstb_pts.ListCount - 1
For u = 0 To v
If Liste.Lstb_pts.List(u, 3) = 0 And Liste.Lstb_pts.List(u + 1, 3) <> 0 Then
tfin = Lstb_pts.List(u + 1, 3)
End If
Next
Commenter la réponse de stick25
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 22 mars 2010 à 09:46
0
Merci
si je comprends bien ta listbox est remplie de valeurs 0 sauf deux lignes qui contiennent les valeurs début et fin
J'ai un doute car quelque chose me dit que ta listbox est à plusieurs colonnes
donc sur la 4° ligne tu as plusieurs valeurs sur un certains nombre de colonnes et seulement 2 de ces valeurs sont différentes de 0 et c'est celles-ci que tu veux récupérer
Est-ce bien cela ?


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
Commenter la réponse de cs_Galain
stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 22 mars 2010 à 09:51
0
Merci
Merci Galain pour ton intéret à mon problème.
En fait j'ai une listbox avec 4 colonnes. Chaque ligne correspond à un point connu en coordonnées et temps de passage (X,Y,Z,t). Dans la 4ième colonne je peux avoir des valeurs à 0 (du à des calcul préalables). Par exemple je peux avoir les valeurs suivante :

30700
30701
30703
0
0
0
0
30741
30750

J'aimerais alors récupérer dans cet exemple tdep=30703 et tfin=30741 !
Merci de ton aide.

(Quand j'arriverai à procéder ainsi, j'aimerais pouvoir gérer plusieurs succession de 0 mais on en est pas encore là...)
Commenter la réponse de stick25
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 22 mars 2010 à 10:35
0
Merci
donc résumons
tu as une listbox à 4 colonnes : les colonnes sont X,Y,Z et t
Le problème se situe sur la 4° colonne : celle des t

Dim i As Integer, j As Integer
    For i = 0 To Liste.Lstb_pts.ListCount - 1
        ' on cherche tdep
        If Liste.Lstb_pts.List(i, 3) = 0 And i > 0 Then
            tdep = Liste.Lstb_pts.List(i - 1, 3)
            Exit Do
        End If
    Next i
    ' on cherche tfin
    For j = i + 1 To Liste.Lstb_pts.ListCount - 1
        If Liste.Lstb_pts.List(j, 3) <> 0 Then
            tfin = Liste.Lstb_pts.List(j, 3)
            Exit Do
        End If
    Next j



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
Commenter la réponse de cs_Galain
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 22 mars 2010 à 10:43
0
Merci
Il y a 2 contraintes
la première valeur t de la 4° colonne ainsi que la dernière valeur t de cette même colonne ne peuvent pas être des 0
- pour la première valeur = à 0 cela signifierait qu'il n'y a pas de tdep avant les premiers 0
- pour la dernière valeur = à 0 cela signifierait qu'il n'y a pas de tfin après les derniers 0


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
Commenter la réponse de cs_Galain
stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 22 mars 2010 à 10:56
0
Merci
Merci Alain mais deux problèmes persistent :

- avec ton code il me met "Exit do pas à l'intérieur d'une boucle do...loop"
- j'ai l'impression que ton code ne peut marcher que pour des données type :
30703
0
30712

et non
30703
0
0
30712

car tu test pas la ligne i-1 pour tdep.

Merci de ton aide
Commenter la réponse de stick25
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 22 mars 2010 à 11:50
0
Merci
1) Désolé pour ma bêtise : remplace les 2 Exit Do par Exit for
2) Pour tdep je teste la première ligne avec la valeur 0. Dès que je la trouve la ligne précédente est la ligne tdep

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
Commenter la réponse de cs_Galain
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 22 mars 2010 à 12:02
0
Merci
Je viens de tester avec un exemple sur une listbox à une seule colonne
37017
37018
37019
0
0
0
0
37020
37021
37022

Cela me donne tdep 37019 et tfin 37020 avec le code précédent et en mettant Exit For ( et non Exit do évidemment)

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
Commenter la réponse de cs_Galain
stick25 64 Messages postés jeudi 4 mars 2010Date d'inscription 17 juin 2010 Dernière intervention - 22 mars 2010 à 16:06
0
Merci
Et bien un grand merci Alain !! Ca marche, c'est super. J'essaierai peut-être plus tard de gérer plusieurs série de 0 mais je ne voie pas encore trop comment m'y prendre donc on verra en temps voulu. Je profite de ta disponibilité pour une autre petite question. Je suis désolé de le faire sous le même sujet de forum mais je profite du fait que tu ais participé à la discussion.

Je souhaiterais ajouter une ligne dans cette même listbox (déjà remplie). J'arrive à ajouter une ligne à la fin de la liste (position par défaut je présume) mais je voudrais l'insérer à une ligne donnée.
Je m'explique : ma listbox est donc formée de 4 colonnes correspondant aux coordonnées X,Y,Z et t (temps) de plusieurs points. J'ajoute alors une ligne en précisant ces 4 paramètres. Mais je n'arrive pas à la faire s'insérer où je veux : je veux qu'elle s'insère en fonction de la valeur de t. Mes points sont déjà classés selon t dans l'ordre croissant.
Par exemple si mon nouveau point a t=38500 je voudrais qu'il s'insère à la ligne suivant t=38499 et précédent t=38505 (par exemple). On suppose qu'il n'y a pas de valeur 0 dans la colonne t.
Et j'ai vraiment beaucoup de mal et rien de concret pour l'instant.
J'avais alors pensé parcourir la liste avec un while, un for en disant tant que t à insérer > aux t de la liste on continue de parcourir la liste et dès que t à insérer devient < aux t de la liste ; on retient la position.
Mais j'arrive pas à traduire ceci en ligne de code, même si je pense que c'est pas trop compliqué. Il faut juste que je récupère la position, après pour l'insertion je sais comment faire.
Pour le point que j'insère, je donne ces valeurs par :
Txtb_x
Txtb_y
Txtb_z
Txtb_t

Ma listbox est Liste.Lstb_pts.

Merci de ta précieuse aide !!
Commenter la réponse de stick25
cs_Galain 1270 Messages postés mardi 11 novembre 2003Date d'inscription 24 juillet 2013 Dernière intervention - 22 mars 2010 à 16:39
0
Merci
Prenons un exemple

37025
37026
37028
37030
37031
37032

On veut insérer 37029

dim insere as string
insere = "37029"
for i = 0 to Liste.listcount -1
if insere > liste.list(i) then
' on insére la nouvelle ligne à la position i (l'ancien i devient i +1)
end if
next i


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
Commenter la réponse de cs_Galain

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.