InStr dans une boucle [Résolu]

Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Dernière intervention
15 mai 2013
- 9 nov. 2009 à 18:05 - Dernière réponse :
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
9 nov. 2009 à 19:56
3
Merci
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)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Dernière intervention
15 mai 2013
9 nov. 2009 à 18:13
0
Merci
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
Commenter la réponse de Lokomass
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Dernière intervention
5 avril 2013
9 nov. 2009 à 18:49
0
Merci
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
Commenter la réponse de jmf0
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Dernière intervention
15 mai 2013
9 nov. 2009 à 19:12
0
Merci
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.
Commenter la réponse de Lokomass
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Dernière intervention
15 mai 2013
9 nov. 2009 à 19:20
0
Merci
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
Commenter la réponse de Lokomass
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Dernière intervention
5 avril 2013
9 nov. 2009 à 19:41
0
Merci
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 ?
Commenter la réponse de jmf0
Messages postés
2641
Date d'inscription
mercredi 2 juin 2004
Dernière intervention
8 janvier 2014
9 nov. 2009 à 19:56
0
Merci
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
Commenter la réponse de cboulas
Messages postés
191
Date d'inscription
jeudi 7 janvier 2010
Dernière intervention
15 mai 2013
9 nov. 2009 à 20:25
0
Merci
Merci beaucoup, ça fonctionne parfaitement avec le for et step -1.

Merci à vous aussi pour votre aide
Commenter la réponse de Lokomass

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.