J'ai également un Combo avec les valeures 100, 101 et 110.
Et enfin une collection qui contient :
Vlan 100
Vlan 101
Vlan 110
J'aimerai que, lorsque je sélectionne "Vlan 101" par exemple, la ligne "Vlan 101 : Adresse 192.168.101.1 Mask 255.255.255.0" soit effacée.
J'ai fait le morceau de code suivant, qui ne fonctionne que sur la dernière ligne c'est à dire sur "Vlan 110".
Suppr As String est "Vlan xxx"
Et Corres est la collection dans laquelle il y a "Vlan xxx : Addresse xxx Mask www" comme ci dessus
Private Function SupprimerIPSpecial(ByVal Suppr As String)
For i = 1 To Corres.Count
Rep = InStr(Corres.Item(i), Suppr)
If Rep > 0 Then
Corres.Remove i
End If
Next i
End Function
cs_Jack
Messages postés14007Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 nov. 2009 à 19:56
Salut
Comme expliqué dans l'aide à propos des Collection et de sa méthode Remove :
Quand tu Remove l'enregistrement n° 3, tous les enregistrements suivants se décalent et le n°4 devient le n°3.
Conséquence dans ton For-Next :
- la borne de fin de For n'est pas recalculée à chaque tour, uniquement au premier passage
- il arrivera forcement un moment où tu taperas vers la fin sur un Index qui n'existe pas
- après un Remove de 3, 4 devient 3. Tu fais ensuite un Next, le prochain index sera donc 4. Tu n'auras pas testé l'ancien 4 devenu 3.
Comme expliqué dans l'aide, donc, il faut :
- soit commencer par la fin (For avec Step -1)
- soit ne pas faire de Next après un Remove (bof)
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)
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 9 nov. 2009 à 18:49
Bonjour,
aucune raison (sauf des parenthèses à mettre autoir de l'index)
preuve
Dim toto As New Collection
Private Sub Form_Initialize()
toto.Add Item:="aaa : voilà"
toto.Add Item:="bbb: coucou"
End Sub
Private Sub Command1_Click()
titi = "coucou"
For i = 1 To toto.Count
MsgBox toto(i)
If InStr(toto(i), titi) Then toto.Remove (i)
Next
End Sub
lance clique une fois sur command1 ==> regarde
clique une seconde fopis ===>> regarde
Lokomass
Messages postés191Date d'inscriptionjeudi 7 janvier 2010StatutMembreDernière intervention15 mai 20131 9 nov. 2009 à 19:12
Peut être que mon erreur vient d'ailleurs alors...
Comme le code est assez compliqué et que y'en a beaucoup, je ne sais pas, mais ce qui est sur c'est que ça ne fonctionne pas pour les autres valeurs, juste la dernière.
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 9 nov. 2009 à 19:41
Je n'en sais rigoureusement rien, n'ayant pas ton code sous les yeux et n'étant pas au_dessus de ton épaule...
Les hypothèses, dans ces conditions ? ===>> on peut en faire à l'infini !
On va tout de même passer par la plus évidente : la déclaration de ta collection : où et comment ?
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 9 nov. 2009 à 19:56
Hello,
et si l'index commençais à 0 et non pas 1...
je pense que tout le pb viens de là ;) mais un debug nous dirais exactement quelle ligne..
A mon humble avis tout viens de la ligne de l'instr. : tu ne peux sélectionner le dernier caractère car le dernier est le -1
si tu me suis tu trouvera
Chris...
- La vérité n'est pas ailleurs, elle est sous le nez de chacun, quelques mouvements neuronale permettent de l'entrevoir -
MCPD (webform-winform) / MCSA / MCDST / MCT