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

  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
    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

  6. #6
    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...

  7. #7
    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 ?

  8. #8
    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
    Aucun problème !
    Je veux juste savoir si il existe une syntaxe permettant de faire une sorte de "next cell" directement. C'est tout !

    Âpres je suis d'accord qu'en faisant avec ta méthode cela marche très bien.

  9. #9
    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.

  10. #10
    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
    Comme signalé pour sauter quelque chose, il faut un filtre donc le 1er code de Yoyo57 est bon, sinon,il faudrait passer par une boucle for I =... et l'avancer de 1 au moment voulu, mais ce n'est pas recommandé du tout et bien plus lourd.

    Amélioration possible, s'il n'y a qu'une ligne de test, passer par un Select Case à l'intérieur du IF cell.value<>3 car le code sortirait à la première occurrence rencontrée... Sinon ajouter un exit for en fin de ligne sur les If intérieurs..

    cordialement,

    Didier

  11. #11
    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
    Merici à tous pour vos réponses.
    La solution du Goto est celle qui me parait la plus adaptée à mon problème même si ce n'est pas très propre..

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, 19h55
  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, 13h42
  3. apply-templates et for-each
    Par d'Oursse dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 14/05/2004, 09h38
  4. utilisation de for each
    Par billoum dans le forum ASP
    Réponses: 5
    Dernier message: 19/03/2004, 16h30
  5. [VB6] For Each ... In ...
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/02/2003, 13h56

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