Collection Remove en VB6

Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 - 27 oct. 2009 à 11:57
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 - 29 oct. 2009 à 12:58
Bonjour à tous,

Je dispose d'une collection, a laquelle j'ajoute au fur et à mesure des éléments.
Dans une fenêtre je récupère la liste des éléments dans un combobox.
Je veux supprimer à partir de cette combobox les éléments qui sont dans ma collection.
Le soucis est que la fonction fait appel à un index et non à la valeure sélectionnée.



Exemple :

'Ajout d'un numéro de Vlan dans la collection
vLans.Add (VlanADD.Text) 


'Je les met dans ma Combobox
Nbre = vLans.Count
For i = 1 To Nbre
    Combo1.AddItem vLans.Item(i)
Next


'Je veux supprimer de la combobox et de ma collection au bouton Supprimer
Public Sub Supprimer_Click()
Combo1.RemoveItem Combo1.ListIndex
vLans.Remove (???)


Je ne sais pas quoi mettre dans le champ vLans.Remove puisqu'il me demande un index.

Comment puis je récupéré cet index afin qu'il supprime la bonne valeure ??

Merci

10 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 oct. 2009 à 12:45
Salut
L'avantage d'une collection, est l'utilisation des Key. Ceci n'est possible que si tu n'as pas de doublons dans ta collection.
Si tu utilises Key, il t'ai alors possible de retrouver un élément par son contenu au lieu de l'index.
Sinon, il te faut parcourir l'ensemble des éléments de ta collection, faire une boucle de 1 à .Count, pour retrouver l'élément pointé par ta ComboBox.
Une fois que tu auras l'index dans la collection, tu pourras le détruire.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 oct. 2009 à 12:48
PS : Comme tu le verras dans l'aide à propos des collections, Key n'accepte que des chaines comportant au moins une lettre (et en tête de la chaine, il me semble). Si tes données ne sont que numériques, il te faudra ajouter une lettre (qui ne sert à rien), par exemple "K" & Cstr(monChiffre)
Il faudra bien sûr en tenir compte lors des recherches.
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
27 oct. 2009 à 13:48
Je pencherai plus pour cette solution :

Sinon, il te faut parcourir l'ensemble des éléments de ta collection, faire une boucle de 1 à .Count, pour retrouver l'élément pointé par ta ComboBox. 


Cependant, quel code dois je insérer ?
La boucle c'est bon, mais quelle serait en gros son instruction ?
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 oct. 2009 à 16:45
Ah, c'est une autre question.
As-tu regardé dans l'aide de l'objet Collection ?
C'est pourtant la première chose çà faire avant de poser une question sur le forum !

Regarde la propriété Count d'une Collection dans l'aide, il y a un exemple tout cuit, il y a juste à ajouter une condition If-Then !
For r = 1 To maCollection.Count
  If maCollection.Item(r) = "Ce que je cherche" Then
    maCollection.Remove r
    Exit For
  End If
Next r

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
27 oct. 2009 à 16:59
Je l'ai lu oui, désolé, seulement je n'arrive pas (te moque pas stp lol) à remplacer le "ce que je recherche" puisque la variable c'est le champ de mon Combobox.

J'ai fait une fonction :

Private Function DEL(Supprime As String)
Dim Suppr As Integer
For Suppr = 1 To vLans.Count
  If vLans.Item(Suppr) = Supprime Then
    vLans.Remove Suppr
    Exit For
  End If
Next Suppr
End Function


Et je l'appelle en passant en parametre la chaine de caractere de mon Combobox

Call DEL(Combo1.Text)


Mais ça ne marche pas ?
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 oct. 2009 à 21:26
DEL pourrait poser problème car ressemble trop à un mot du langage.
Ca marche pas ne veut rien dire. Erreur ? Laquelle ?
Sais-tu debuguer avec les touches F9, F8 et F5 ?
Ta Function ne renvoie rien --> Sub
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
27 oct. 2009 à 21:31
Désolé, ça ne marche pas, tout simplement ça ne supprime pas le Vlan mais ne me retourne pas d'erreur.
Lorsque je fais :

  If vLans.Item(Suppr) = "13" Then


Cela fonctionne, donc je ne comprend pas qu'en mettant, un champ texte string en paramètre ça ne fonctionne pas.
J'ai aussi essayé avec un autre nom, et même sans fonction, et le problème est le même.
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
28 oct. 2009 à 10:10
J'ai trouvé !!!!
En faisait :

Combo1.RemoveItem Combo1.ListIndex
Call DEL(Combo1.Text)


Donc forcément, il supprimait Combo1.Text, n'existait plus.

Donc j'ai fait :

Call DEL(Combo1.Text)
Combo1.RemoveItem Combo1.ListIndex


Et ça marche, c'est tout con...
Encore merci à toi
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
29 oct. 2009 à 12:57
Bonjour,

Je n'arrive pas a supprimer (vider) toute ma collection.

J'ai fait ce petit code qui me retourne l'erreur "indice en dehors de la plage" alors que quand j'affiche la variable vLans.count elle me renvoi bien le nombre de vlans présent.

Private Function EnleveTout()
For i = 1 To Route.Count
    vLans.Remove i
Next i
End Function


Je ne comprend pas.
Existe t-il une autre méthode plus simple pour tout enlever ?

Merci
0
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
29 oct. 2009 à 12:58
Pardon, c'est avec vLans.Count :


Private Function EnleveTout()
For i = 1 To vLans.Count
    vLans.Remove i
Next i
End Function
0
Rejoignez-nous