InStr dans une boucle [Résolu]

Lokomass 191 Messages postés jeudi 7 janvier 2010Date d'inscription 15 mai 2013 Dernière intervention - 9 nov. 2009 à 18:05 - Dernière réponse : Lokomass 191 Messages postés jeudi 7 janvier 2010Date d'inscription 15 mai 2013 Dernière intervention
- 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
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 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é 88 internautes ce mois-ci

Commenter la réponse de cs_Jack
Lokomass 191 Messages postés jeudi 7 janvier 2010Date d'inscription 15 mai 2013 Dernière intervention - 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
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 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
Lokomass 191 Messages postés jeudi 7 janvier 2010Date d'inscription 15 mai 2013 Dernière intervention - 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
Lokomass 191 Messages postés jeudi 7 janvier 2010Date d'inscription 15 mai 2013 Dernière intervention - 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
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 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
cboulas 2641 Messages postés mercredi 2 juin 2004Date d'inscription 8 janvier 2014 Dernière intervention - 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
Lokomass 191 Messages postés jeudi 7 janvier 2010Date d'inscription 15 mai 2013 Dernière intervention - 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.