InStr dans une boucle [Résolu]

Signaler
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
-
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
68
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)
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013

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

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.
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013

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
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
4
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 ?
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
8 janvier 2014
14
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
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
15 mai 2013

Merci beaucoup, ça fonctionne parfaitement avec le for et step -1.

Merci à vous aussi pour votre aide