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 Next : modifier valeur du compteur dans la boucle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2011
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 22
    Par défaut For Next : modifier valeur du compteur dans la boucle
    Bonjour

    Soit les 11 lignes suivantes dans la colonne A
    test
    a
    b
    a
    b
    b
    a
    a
    b
    a
    a

    Je souhaite que lorsque la valeur = a que la ligne soit copiée/collée sous celle-ci.

    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
    16
    17
    18
    19
    Sub test1()
     
    Dim j As Integer
    For j = 2 To Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1
     
            If Cells(j, 1) = "a" Then
     
                Rows(j).Copy
                Rows(j).Insert
                Cells(j + 1, 2) = "Insertion"
                j = j + 1
            Else
            End If
     
    Next j
    MsgBox j
     
     
    End Sub
    Le code s'arrête avant d'avoir traité toute la colonne A.
    Cells(Columns(1).Cells.Count, 1).End(xlUp).Row est bien mis à jour, par contre on dirait que la boucle FOR ne tient compte que de ses valeurs au départ!?

    Le boucle en While Wend marche:

    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
    16
    17
    18
    19
    20
    21
    22
    Sub test()
     
    derniere_ligne = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
    Dim j As Integer
    j = 2
    While j <= Cells(Columns(1).Cells.Count, 1).End(xlUp).Row + 1
     
            If Cells(j, 1) = "a" Then
     
                Rows(j).Copy
                Rows(j).Insert
                Cells(j + 1, 2) = "Insertion"
                j = j + 2
            Else
                j = j + 1
            End If
     
    Wend
     
    MsgBox j
     
    End Sub
    Avez-vous une explication pourquoi cela bloque dans FOR NEXT?
    Il me semble avoir déjà utilisé cela sans problème.

    Merci d'avance

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    essayes comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim j As Integer
    For j = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row To 2 Step -1
      If Cells(j, 1) = "a" Then
     
                Rows(j).Copy
                Rows(j).Insert
                Cells(j + 1, 2) = "Insertion"
            End If
     
    Next j
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre averti
    Inscrit en
    Mai 2011
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 22
    Par défaut
    Bonjour

    Merci, ça marche bien et on n'a pas besoin de réactualiser la valeur des compteurs de FOR.

    Par contre j'aimerais comprendre pourquoi mon code, même s'il n'est peut être pas vraiment conseillé, ne marche pas.

    Peut-on mettre à jour la valeur du compteur dans une boucle FOR ?

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    oui on peut mais il faut rester logique …

  5. #5
    Membre averti
    Inscrit en
    Mai 2011
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 22
    Par défaut
    Bonjour

    Oui, mais encore ?
    Car une réponse de ce style ne m'aide pas vraiment !
    Si je pose la question, c'est que je n'ai pas trouvé la logique.

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Lorsque tu dois insérer ou effacer des lignes dans une boucle, la meilleure manière d'y arriver est de partir de la fin. À ce moment-là, tu n'as pas à interagir avec le compteur. (Même principe pour des colonnes)

    Si tu utilises une boucle Do While ou Do Until, tu peux jouer plus facilement avec le compteur intégré à ta boucle.

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

Discussions similaires

  1. [TPW] Incrémentation du compteur dans une boucle for
    Par sukhoimk dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 15/07/2011, 17h58
  2. Réponses: 3
    Dernier message: 21/05/2011, 06h33
  3. Compteur dans une boucle for
    Par Auteur dans le forum Windows
    Réponses: 1
    Dernier message: 08/07/2010, 01h55
  4. [Joomla!] Modifier valeur par défault dans publication de contenu
    Par bocherrot dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 09/04/2008, 11h50
  5. Compteur dans une boucle for
    Par lohot dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 28/03/2008, 12h19

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