InStr dans une boucle

Résolu
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 - 9 nov. 2009 à 18:05
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 - 9 nov. 2009 à 20:25
Bonsoir à tous,

Je galère sur un problème depuis ce matin.
J'ai 3 lignes dans ma collection par exemple comme ceci :

Vlan 100 :  Adresse 192.168.100.1 Mask 255.255.255.0
Vlan 101 :  Adresse 192.168.101.1 Mask 255.255.255.0
Vlan 110 :  Adresse 192.168.110.1 Mask 255.255.255.0


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

8 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
9 nov. 2009 à 18:13
Si je veux modifier les 2 premières lignes j'ai un message :

"Indice en dehors de la plage"

Rep = InStr(Corres.Item(i), Suppr)

LA dessus.

Merci
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
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és 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
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 ?

Posez votre question
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
9 nov. 2009 à 19:20
J'ai pourtant tout passer au peigne, mais je vois pas d'ou ça peut venir, puisqu'il me redirige bien sur cette ligne en me donnant cette erreur
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
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és 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
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
Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 1
9 nov. 2009 à 20:25
Merci beaucoup, ça fonctionne parfaitement avec le for et step -1.

Merci à vous aussi pour votre aide
Rejoignez-nous