VBA excel For Each trouver élément suivant

[Résolu/Fermé]
Signaler
Messages postés
28
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
9 juillet 2014
-
Messages postés
28
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
9 juillet 2014
-
Bonjour à tous

J'aimerais savoir s'il existe un moyen de passer à l'élément suivant dans un For Each quand la condition est remplie.
exemple:
For Each element In Stat 'Stat est un array à 1 dimension

If Flag = element Then ' trouver l'élément suivant

Next element

Merci aux pros


5 réponses

Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
620
Bonjour,

Le plus simple est d'utiliser un goto comme ceci :


For Each element In Stat
...
If Flag = element Then GoTo SUIVANT
...
SUIVANT:
Next element

A+

Cordialement,
Messages postés
28
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
9 juillet 2014

Bonjour Pilas,

Je ne comprends pas trop l'intérêt du suivant.
Ce que je voudrais c'est avoir l'element qui suit celui qui a été comparé.

Si dans Stat j'ai "lundi, mardi, mercredi" et que Flag = mardi, j'aimerai que element passe à mercredi avant de sortir de la boucle.
Est_ce possible?
Merci pour ton aide
Messages postés
28
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
9 juillet 2014

Ajout explications
j'y arrive avec ce code

For i = 1 To UBound(Stat)
If Flag = Stat(i, 1) Then
If i = UBound(Stat) Then i = LBound(Stat) Else i = i + 1
Flag = Stat(i, 1): i = UBound(Stat)
End If
Next i

Mais j'essaie d'apprendre et je ne vois pas comment faire la même chose avec For Each
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
620
Re Bonjour,

J'ai regardé ton code effectivement, le "for each" n'est pas trés adapté car il n'existe pas d'instruction pour lui dire de "prendre le suivant".

La seule solution que j'ai trouvée c'est d'utiliser un booléén pour dire que l'on a trouvé lors d'une itération et qu'il faudra prendre la valeur à l'itération suivante.

Voila ce que cela donne :

        Dim OK As Boolean 
        OK = False 
        For Each Element In stat 
            If OK Then 
                Flag = Element 
                OK = False 
                Exit For 
            End If 
            OK = Element = Flag 
        Next Element 
        If OK Then Flag = stat(LBound(stat))


si on sort du for avec OK vrai alors c'est le dernier élément qui est trouvé et on reprend le 1°.

PS : Au fait par défaut le Lbound est zéro donc je suppose que dans ta déclaration tu as mis Dim stat (1 to ...)

A+
Cordialement,
Messages postés
28
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
9 juillet 2014

Merci Pilas pour tes explications