IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

comment effacer un element dans un collection dans une boucle for each


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 125
    Points : 128
    Points
    128
    Par défaut comment effacer un element dans un collection dans une boucle for each
    lorsque je parcours une collection avec for each j'aimerais effacer un element s'il repond à un condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for each elt in macollection
       if elt= valeur then ....'effacer elt
    next elt

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour (ton aide en ligne...)
    La méthode Remove a pour syntaxe :
    object.Remove index
    où objet est la collection en cause et index le N° d'index dans la collection ...
    ouvre ton aide en ligne pour plus d'infos...

  3. #3
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 125
    Points : 128
    Points
    128
    Par défaut
    ça je le savais. mais on peut pas l'utiliser dans une boucle for each

    on peut l'utiliser dans une boucle for... to... ou dans un do..loop en prenant certaines précautions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for i = 1 to macollecetion.count
       if i> macollection.count then exit for 
      [set]  elt= macollection(i)
       if elt =valeur then
            macollection.remove (i)
            i=i-1
       end if
    next i
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    i=1
    Do until i> macollection.count
      [set] elt=macollection(i)
      if elt=valeur then
          macollection.remove(i)
      else
         i=i+1
    loop
    mais ce que jevoulais c'est le faire dans une boucle for ...each... parseque je trouve ça plus elegant

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Je coimprends ton, souci d'élégance...
    Il te faut alors alimenter ta collection avec la même élégance et utiliser l'argument Key de la méthode Add , ce qui te permettra ensuite de t'y référer dans la méthode Remove ...

  5. #5
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 125
    Points : 128
    Points
    128
    Par défaut
    A condition de pouvoir recuperer la clé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for each elt in macollection
       if elt=valeur then
           key=?
          macollection.remove(key)
      end if
    next elt
    a moins de se compliquer la vie en créant une classe elt perso et lui ajouter une propriete key (key=elt.key) c'est impossible d'effacer un element d'une collection dans une boucle for each

    je garde la solution peu elegante de for... to...

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Oh ...

    exemple, donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub Command1_Click()
      Dim toto As New Collection ' Create a Collection object.
      toto.Add Item:="membre1", Key:="membre1"
      toto.Add Item:="membre2", Key:="membre2"
      For Each x In toto
        MsgBox x
        If x = "membre1" Then
          toto.Remove x
        End If
      Next
      MsgBox "on va voir, maintenant"
      For Each x In toto
        MsgBox x
      Next
    End Sub
    J'espère qu'il "te parle" un peu...

  7. #7
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 125
    Points : 128
    Points
    128
    Par défaut
    OK. Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/11/2011, 15h41
  2. Réponses: 1
    Dernier message: 14/08/2011, 04h24
  3. [XL-2003] Faire un somme dans une boucle for each
    Par tools dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/01/2011, 08h36
  4. ligne d'unecellule dans une boucle "for each"
    Par JohnNC115 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/01/2011, 14h03
  5. test avant d'entrer dans une boucle For each cell in selection
    Par totoro02 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/01/2009, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo