Boucle sur 2 listBox [Résolu]

cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 23 juil. 2013 à 11:08 - Dernière réponse : cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention
- 25 juil. 2013 à 08:25
Bonjour,

J'ai fait une boucle qui parcourt 2 litBox pour afficher les items ayant une différence dans une 3ème listBox. Cela fonctionne très bien. Mais peut-on affiner la recherche pour qu'elle ne m'affiche que l'item ayant la plus grande différence.

[code=vb]
For i = lsttaille.Items.Count - 1 To 0 Step -1
If Not lsttaillecopy.Items.Contains(lsttaille.Items(i)) Then
'MessageBox.Show("Item trouvé")
Dim TempStr As String
TempStr = CStr(lsttaille.Items.Item(i))
lstresult.Items.Add(TempStr)
lsttaille.SetSelected(i, True)
Else
' MessageBox.Show("Item non trouvé")
End If
Next i/code

Merci d'avance

@+ Le Pivert
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 23 juil. 2013 à 13:35
3
Merci
Bonjour Le Pivert.

Je vous propose la solution suivante. Vous stockez le premier item qui apparaît dans une variable (soit Dif son nom). À chaque item qui suit, vous le comparez à Dif, et vous remplacez Dif par cet item s'il est strictement supérieur à Dif.
En fin de boucle, il ne vous reste plus qu'à récolter Dif.

Cordialement.

Étant illettré, je signe d'une croix : ×

Merci Zermelo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Zermelo
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 23 juil. 2013 à 14:55
3
Merci
Bonjour, Zermeloi,
oui, mais pas seulement.
- Une listbox contient du texte (string)
- j'ai bien vu (bien qu'il n'en parle point) que la comparaison était faite sur des "nombres" (le cstr utilisé).
- or, "110" est par exemple plus petit que "21" alors que 110 est plus grand que 21
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de ucfoutu
cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 25 juil. 2013 à 08:25
1
Merci
J'ai enfin réussi, pour le cas particulier qui me préoccupait. Vous m'avez bien mis sur la voie. Je cherchais la plus grande différence et c'était simple finalement:

[code=vb] 'vérifier les fichiers cachés
For i = lsttaille.Items.Count - 1 To 0 Step -1
If Not lsttaillecopy.Items.Contains(lsttaille.Items(i)) Then
'MessageBox.Show("Item trouvé")
Dim dif As Long
Dim TempStr As Long
TempStr = CLng(lsttaille.Items.Item(i))
Dim item As Long
item = CLng(lsttaillecopy.Items.Item(i))
dif = TempStr - item
If dif > 60 Then 'à modifier si necessaire
lstresult.Items.Add(TempStr)
End If
Else
'MessageBox.Show("Item non trouvé")
End If
Next i/code

Je vais pouvoir faire une mise à jour de mon programme:

http://www.vbfrance.com/codes/DETECTER-FICHIERS-CACHES_55265.aspx

Merci à vous 2

@+ Le Pivert
Commenter la réponse de cs_Le Pivert
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 23 juil. 2013 à 14:36
0
Merci
Bonjour,
l'item ayant la plus grande différence.

nécessite une explication parfaitement claire sur la manière d'apprécier la valeur de la "différence".


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 23 juil. 2013 à 14:40
0
Merci
Bonjour ucfoutu.

Tu as parfaitement raison. Cela n'a de sens que pour les valeurs absolues des items.

Cordialement.


Étant illettré, je signe d'une croix : ×
Commenter la réponse de Zermelo
cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 23 juil. 2013 à 15:12
0
Merci
Merci à tous les 2 pour vos réponses

ucfoutu, la différence on ne la connait pas. C'est la plus grande différence entre 2 items se trouvant sur le même index dans les 2 listBox

zermelo, jai suivi ton conseil, cela réduit la liste, mais je ne dois pas avoit fait ma boucle correctement car il ne devrait me rester q'un item

[code=vb] For i = lsttaille.Items.Count - 1 To 0 Step -1
If Not lsttaillecopy.Items.Contains(lsttaille.Items(i)) Then
'MessageBox.Show("Item trouvé")
Dim TempStr As String
Dim item As String
TempStr = CStr(lsttaille.Items.Item(i))
If item < TempStr Then
lstresult.Items.Add(TempStr)
End If
item = TempStr
lsttaille.SetSelected(i, True)
Else
' MessageBox.Show("Item non trouvé")
End If
Next i/code
If item < TempStr Then
item est souligné car pas de valeur, comment faire pour le garder en mémoire pour la prochaine boucle?

Encore merci

@+ Le Pivert
Commenter la réponse de cs_Le Pivert
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 23 juil. 2013 à 15:24
0
Merci
Bonjour, Le Pivert,
ucfoutu, la différence on ne la connait pas

Et ?
Ca, c'était évident ! Et ça ne me dit toujours pas comment elle est appréciée !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 23 juil. 2013 à 15:36
0
Merci
La boucle fonctionne très bien si tous les items sont égaux, elle me renvoie les items inégaux. C'est là le problème je ne veux conserver que l'item le plus grand des 2 items situés sur la même ligne ayant la plus forte différence.

- or, "110" est par exemple plus petit que "21" alors que 110 est plus grand que 21

suivant cela, je pense que ça va poser problème!

@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 23 juil. 2013 à 16:34
0
Merci
Les items des ListeBox doivent être préalablement convertis en nombres, par exemple par CLng. Par ailleurs le item qui est dans la boucle (et qui devra donc être aussi un nombre) doit être défini hors de la boucle, par une déclaration du genre
[code=vb]Private Item As Long = 0/code

Bon courage.


Étant illettré, je signe d'une croix : ×
Commenter la réponse de Zermelo
cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 23 juil. 2013 à 17:18
0
Merci
Merci zermelo,

Cela fonctionne. Pour n'avoir que le dernier item, il faut nettoyer la listBox à chaque passage. Maintenant suivant les conseils de ucfoutu, je vais vérifier si c'est bien le bon item!

voici le code:

[code=vb]Dim item As Long = 0
For i = lsttaille.Items.Count - 1 To 0 Step -1
If Not lsttaillecopy.Items.Contains(lsttaille.Items(i)) Then
'MessageBox.Show("Item trouvé")
Dim TempStr As Long
TempStr = CLng(lsttaille.Items.Item(i))
If item < CLng(TempStr) Then
lstresult.Items.Clear()
lstresult.Items.Add(TempStr)
End If
item = CLng(TempStr)
lsttaille.SetSelected(i, True)
Else
' MessageBox.Show("Item non trouvé")
End If
Next i/code

Vous avez certainement deviné que c'était pour ma dernière source, afin d'éviter de faire une recherche manuelle.

Merci à tous les 2


@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 23 juil. 2013 à 17:38
0
Merci
Bonsoir Le Pivert.
Voici un petit programme qui pourra peut-être vous aider.
[code=vb]Imports System.Math
Public Class Accueil
Private Item As Double = 0

Private Sub Accueil_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
lBox1.Items.Add(127.5)
lBox1.Items.Add(22.7)
lBox1.Items.Add(61.05)
lBox2.Items.Add(187.6)
lBox2.Items.Add(322.8)
lBox2.Items.Add(21.05)
End Sub

Private Sub bClc_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bClc.Click
CalculerDifférenceMax()
End Sub

Private Sub CalculerDifférenceMax()
Dim Item1 As Double, Item2 As Double, Diff As Double, i As Integer
For i = 0 To 2
Item1 = CDbl(lBox1.Items(i))
Item2 = CDbl(lBox2.Items(i))
Diff = Abs(Item1 - Item2)
If i = 0 Then
Item = Diff
Else
If Diff > Item Then Item = Diff
End If
Next
MessageBox.Show("La différence maximale est " & Item.ToString)
End Sub

End Class/code

lBox1 et lBox2 sont des ListBox et bClc est un bouton de commande.

Cordialement.


Étant illettré, je signe d'une croix : ×
Commenter la réponse de Zermelo
cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 23 juil. 2013 à 18:11
0
Merci
Merci Zermelo, cela fonctionne, mais ne me donne pas l'index de l'item. J'ai fait des essais avec mon code, cela ne me sort pas l'item concerné.
Ce n'est pas grave, je vais continer à chercher.
Merci à vous 2.
Bonne soirée


@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 23 juil. 2013 à 18:58
0
Merci
Juste une petite modification.
[code=vb]Private Sub CalculerDifférenceMax()
Dim Item1 As Double, Item2 As Double, Diff As Double, i As Integer, Index As Integer
For i = 0 To 2
Item1 = CDbl(lBox1.Items(i))
Item2 = CDbl(lBox2.Items(i))
Diff = Abs(Item1 - Item2)
If i = 0 Then
Item Diff : Index i
Else
If Diff > Item Then Item Diff : Index i
End If
Next
MessageBox.Show("La différence maximale est " & Item.ToString)
MessageBox.Show("L'index de la différence maximale est " & Index.ToString)
End Sub/code


Étant illettré, je signe d'une croix : ×
Commenter la réponse de Zermelo
cs_Le Pivert 5450 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 18 octobre 2018 Dernière intervention - 23 juil. 2013 à 19:20
0
Merci
Merci Zermelo, ça fonctionne impeccable.

@+ Le Pivert
Commenter la réponse de cs_Le Pivert

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.