Comparer 2 Listbox

sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 6 août 2009 à 01:00
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012 - 8 août 2009 à 02:23
Bonjour à tous,

Pourriez-vous m?aider à résoudre un problème, je l'expose.


Comment fait on pour comparer 2 Listbox.


· La List1 reste la référence elle ne bouge jamais( Référence de produit)
· La List2 elle bouge, on peut ajouter et enlever des produits

Tout cela fonctionne, mais voilà j'aimerais pouvoir comparer ces 2 listes et mettre dans une List3 tous les produits qui ne sont pas présent dans la list2 mais qui sont dans la liste 1 ( référence)


Exemple :

List1 :

Test.aa-
Test123.bb-
Test789987.bc-

List2 :

Test.aa-123654
Test123.bb-324654


J'aimerais faire apparaître dans la list3 :

Test789987.bc-

Car c'est le produit manquant dans la list2.

J'espère que j'ai été clair.

Merci d'avance.

8 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 août 2009 à 08:56
tu vides List3
tu parcoure un a un les elements de ta list1
pour chacun, tu fais une recherche dans la list2
si l'element n'est pas trouvé, tu l'ajoutes à List3

pour la recherche, le plus efficace sera d'utiliser l'API SendMessage, avec un LB_FINDSTRING (gaffe, pas LB_FINDSTRINGEXACT puisque tu as des 123654 ou 324654 qui apparraissent dans List2...)


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
6 août 2009 à 10:45
Merci pour ta réponse,

As-tu un exemple concret ou un morceau de code, car je ne vois pas par ou commencer.

1- Comment parcourir la list1 ?
2- Pour la recherche de la list 2 je vais essayer de prendre ta méthode.
3- Comment faire afficher la différence, entre les 2 list( list1 et 2), dans la list3.


Merci.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 août 2009 à 17:48
par où commencer ?

Dim i As Long
For i = 0 To List1.ListCount -1
[...]
Next




Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
7 août 2009 à 01:51
Bonjour à toi,

J'ai vraiment besoin d'aide si tu veux bien.

Initialement :
· La List1 reste la référence elle ne bouge jamais( Référence du produit)
· La List2 elle bouge, on peut ajouter et enlever des produits

Aujourd'hui :
A ce jour, j'ai réuni dans un seul list1, la liste des références du produit qui ne bougent pas + la références du produit qui peut changer.
Pour cela c'est OK.

Le code ci dessous permet de supprimer les doublons,mais il en reste toujours 1, je voudrais directement supprimer dans le list1 tous les produits qui portent les mêmes noms.

Cette méthode me permet de comptabiliser directement le nombre de produits manquant.

Peux-tu m?aider en modifiant ce code car je n'y arrive pas.
Ce code supprime les doublon.
------------------------------------------------------
Private Sub SupDoubles(lst As ListBox)
Dim iPos As Integer
iPos = 0
'Si la listbox est vide il quitte la fonction
If lst.ListCount < 1 Then Exit Sub
Do While iPos < lst.ListCount
lst.Text = lst.List(iPos)
'Verifie si le text existe deja
If lst.ListIndex <> iPos Then
'Si c'est le cas il supprime et garde la position iPos...
lst.RemoveItem iPos
Else
'Si ce n'est pas le cas il change la position iPos...
iPos = iPos + 1
End If
Loop
'Utiliser pour désélectionner la dernière ligne
lst.Text = "-"
End Sub
-------------------------------------------------------------

Concernant les chiffres après le ? (Test.aa-123654 ou Test123.bb-324654) j'ai également un code qui permet d'effacer ou de ne pas tenir compte de ce qu'il y a après le -. Mais je n'arrive pas également à le modifier( code récupérer sur Vbfrance). Le voici :



------------------------------------------------------------
Private Function getSqlLike(ByVal sText As String, Optional bFirst As Boolean = False) As String
Dim iPos As Integer
' fonction qui permet a partir du - de ne pas tenir compte du reste que l'on écrit


' cherche le - et nettoie si trouvé
iPos = InStr(1, sText, "-")
If iPos Then sText = Left$(sText, iPos)

' première ou toutes les lettres
If bFirst Then sText = Left$(sText, 1)

' renvoie avec %
getSqlLike = sText & "%"


End Function
------------------------------------------------------------------


Comment l'adapter à mon problème ? Car idéalement tous doit ce faire en même temps a savoir la suppression des - + la suppression totale des produits qui portent les mêmes noms.

J'espère que tu pourras m?aider, car j'ai déjà passé beaucoup d'heure et de jour sans trop de résultat.


Merci bien.

A+
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
7 août 2009 à 05:50
Sans vouloir te vexer, c'est un peu du n'importe quoi, ton code...

pourquoi supprimer ces doublons, d'ou proviennent ces elements ?
il est assurément plus simple de ne pas ajouter de doublon, plutot que de les enlever...

regarde par exemple:
http://www.codyx.org/snippet_ajouter-elements-dans-zones-liste-combobox-sans-doublons_615.aspx

ca te donnera de bons elements de départ.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
7 août 2009 à 10:15
Bonjour, tu ne me vexe pas, mais je vais t?expliquer.

Ces éléments viennent d'une base de stock de produit nommée list_stock(classé par référence ex : test.zz-321654) et d'une base base de référence( référence que je devrai avoir dans mon stock ex :test.zz-).
Dans mon programme à l'heure actuelle, j'interdis déjà les doublons au moment de l'intégration du produits dans le stock(tout cela fonctionne)

Le fait de supprimer les éléments qui portent le même nom, dans un list1 qui est différent du list_stock qui me permet de voir le produit en stock, me permettrai de connaître :
· Le nombre de produits manquant.
· Le nom des produits manquant.

C'est pour cette raison que j'aimerai pouvoir supprimer dans list1 ( list1 = list_stock + base de référence) supprimer tout ce qui à après le ? ( dans test.zz-321654 supprimer 321654 ) et également supprimer les produits qui portent le même nom.


J'espère que je me suis bien exprimé.

A+.
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
8 août 2009 à 02:19
Bonjour,

Peux-tu m?aider avec mon code.

Il permet normalement de supprimer dans un listbox tout ce qui se trouver après le -.Dans mon cas transformer Test.aa-123654 en Test.aa- .
Cela marche très bien avec un textbox mais je n'arrive pas à le faire fonctionner avec un listbox.

Voici le code :

-----------------------------------------------------

Private Sub Command2_Click()
Dim i As Long

Dim iPos As Integer

iPos = InStr(1, List3.Text, "-")

'Si la listbox est vide il quitte la fonction
If List3.ListCount < 1 Then Exit Sub


For i = 0 To List1.ListCount ? 1

If iPos Then List3.Text = Left$(List3.Text, iPos)

Next
End Sub

-----------------------------------------------------



Merci par avance.
A+
0
sancho12345 Messages postés 131 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 18 mars 2012
8 août 2009 à 02:23
Petite correction:


Non pas
For i = 0 To List1.ListCount ? 1

mais
For i = 0 To List3.ListCount ? 1


A+
0
Rejoignez-nous