VBA excel For Each trouver élément suivant

Résolu
Paninak Messages postés 30 Statut Membre -  
Paninak Messages postés 30 Statut Membre -
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

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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,
    0
  2. Paninak Messages postés 30 Statut Membre
     
    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
    0
  3. Paninak Messages postés 30 Statut Membre
     
    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
    0
  4. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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,
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Paninak Messages postés 30 Statut Membre
     
    Merci Pilas pour tes explications
    0