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)
3
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
0
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
0
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.
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
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
0
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 ?
0
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
0
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
0
Rejoignez-nous