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

Macros et VBA Excel Discussion :

For each , saut itération


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut For each , saut itération
    Bonjour,
    Je souhaiterai savoir si il est possible dans une boucle For Each de forcer le passage à la cellule suivante
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For Each Cell in .Range(.Cells(2,4),.Cells(10,4))
    If Cell.Value = "100" Then Msgbox "ok" 'ici faire une sorte de faire un next Cell pour ne pas executer le code en dessous
    Cell.Offset(1,0).value = ok
    next Cell
    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Par défaut
    Bonjour iperkut,

    Pourquoi ne pas écrire tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each Cell in .Range(.Cells(2,4),.Cells(10,4))
        If Cell.Value = "100" Then
            Msgbox "ok"
        Else
            Cell.Offset(1,0).value = ok
        End If
    Next Cell

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    Bonjour,
    Je suis d'accord ceci marche très bien.
    Mais je voulais savoir si il n'existe pas une syntaxe permettant de passer à la cellule suivante dans une boucle for each sans avoir à joué avec des if.

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Citation Envoyé par iperkut Voir le message
    Mais je voulais savoir si il n'existe pas une syntaxe permettant de passer à la cellule suivante dans une boucle for each sans avoir à joué avec des if.
    Et le code saura comment l'élément qu'il doit sauter

    cordialement,

    Didier

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 99
    Par défaut
    Citation Envoyé par Ormonth Voir le message
    Et le code saura comment l'élément qu'il doit sauter

    cordialement,

    Didier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for each cell in .range(.cells(1,1),.cells(5,1))
     
    if cell.value = 2 and cell.offset(1,0).value =3 then i = 100
    if cell.value = 1 and cell.offset(1,0).value =3 then i = 200
     
    msgbox ok
    next cell
    avec ce code, nous somme d'accord que cela va parcourir les cellules du range A1:A5
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    A1 = 1
    A2 = 3
    A3 = 1
    A4 = 2
    A5 = 3
    le code va alors s'exécuter comme ceci :
    pour A1 : i=200, msgbox "ok"
    pour A2 : msgbox "ok"
    pour A3 : msgbox "ok"
    pour A4 : i=100, msgbox "ok"
    pour A5 : msgbox "ok"

    Ce que je souhaite maintenant faire c'est par exemple si la cellule est égale à 3 "passer a la cellule suivante" / ne pas tester cette cellule
    cela pourrait se traduire par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    for each cell in .range(.cells(1,1),.cells(5,1))
     
    if cell.value = 3 then next cell 
    if cell.value = 2 and cell.offset(1,0).value =3 then i = 100
    if cell.value = 1 and cell.offset(1,0).value =3 then i = 200
     
    msgbox "ok"
    next cell
    et l'exécution du code donnerait :
    pour A1 : i=200, msgbox "ok"
    pour A2 : rien
    pour A3 : msgbox "ok"
    pour A4 : i=100, msgbox "ok"
    pour A5 : rien

    j'espère être plus clair...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Par défaut
    Ben je continue à te proposer ma solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each cell In .Range(.Cells(1,1),.Cells(5,1))
        If cell.value <> 3 then
            If cell.value = 2 and cell.offset(1,0).value =3 then i = 100
            If cell.value = 1 and cell.offset(1,0).value =3 then i = 200
            msgbox "ok"
        End If
    next cell
    En quoi ce code pose-t-il problème ?

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    je ne sais pas ce que tu veux fabriquer (c'est ton affaire)

    regarde ce que fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Static nonok As Boolean
        For Each cell In .Range(.Cells(2, 4), .Cells(10, 4))
          If cell.Value = "100" And nonok = False Then
            nonok = True: MsgBox "ok" & " " & cell.Address  'ici faire une sorte de faire un next Cell pour ne pas executer le code en dessous
            cell.Offset(1, 0).Value = ok
          Else
            nonok = False
          End If
     
        Next cell

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Par défaut
    Une autre solution serait d'utiliser un GoTo avec une étiquette, mais ce n'est pas très propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for each cell in .range(.cells(1,1),.cells(5,1))
     
    if cell.value = 3 then Goto etiquette
    if cell.value = 2 and cell.offset(1,0).value =3 then i = 100
    if cell.value = 1 and cell.offset(1,0).value =3 then i = 200
     
    msgbox "ok"
    etiquette:
    next cell

    Je ne connais pas de commande qui puisse faire ce que tu demandes, mais mes connaissances en VBA sont limitées.

Discussions similaires

  1. For each avec objet d'itération variable
    Par Natedogg21 dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/12/2014, 18h55
  2. [XL-2007] For Each c In plage, saute d' 1 ligne a chaque boucle.!
    Par p0m12 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/07/2010, 12h42
  3. apply-templates et for-each
    Par d'Oursse dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/05/2004, 08h38
  4. utilisation de for each
    Par billoum dans le forum ASP
    Réponses: 5
    Dernier message: 19/03/2004, 15h30
  5. [VB6] For Each ... In ...
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2003, 12h56

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