Problème de boucle

Bonjour,

Alors mon objectif est de sélectionner dans une feuille excel les lignes où le caractère "x" est présent, ensuite de les couper pour les coller sur une autre feuille du même classeur.

Quand il y a qu'une ligne avec "x" tout vas bien en revanche quand il y a plusieurs lignes avec "x" la macro coupe qu'une seule ligne.

J'ai l'impression que la boucle s'arrête à la première ligne contenant le "x" mais je n'arrive pas à corriger le tir

Voici le code :

Sub Archivage()
    Set ts = ThisWorkbook.Sheets("Gestion")
    Der_ligne = ts.Cells(Rows.Count, "A").End(xlUp).Row 'Dernière ligne de la feuille Gestion
    Der_ligneArchivage = Sheets("Archives").Cells(Rows.Count, "A").End(xlUp).Row + 1

        For i = 1 To Der_ligne
             If ts.Cells(i, "F").Value = "x" Then  'Verifie la valeur x dans la colonne
                ts.Range("A" & i & ":E" & i).Cut _
                Destination:=Sheets("Archives").Cells(Der_ligneArchivage, "A")
                ts.Range("A" & i & ":E" & i).EntireRow.Delete
            Else
            End If
         Next  
End Sub

Merci de votre aide

Bonsoir,

essaye comme ceci

Sub Archivage()
    Set ts = ThisWorkbook.Sheets("Gestion")
    Der_ligne = ts.Cells(Rows.Count, "A").End(xlUp).Row 'Dernière ligne de la feuille Gestion
    Der_ligneArchivage = Sheets("Archives").Cells(Rows.Count, "A").End(xlUp).Row + 1

        For i=Der_ligne to 1 step -1
             If ts.Cells(i, "F").Value = "x" Then  'Verifie la valeur x dans la colonne
                    ts.Range("A" & i & ":E" & i).Cut _
                    Destination:=Sheets("Archives").Cells(Der_ligneArchivage, "A")
                    ts.Range("A" & i & ":E" & i).EntireRow.Delete
             End If
        Next i
End Sub

Cordialement

Bonjour,

Ceci devrait aller

Sub Archivage()
  Set ts = ThisWorkbook.Sheets("Gestion")
  Der_ligne = ts.Cells(Rows.Count, "A").End(xlUp).Row   'Dernière ligne de la feuille Gestion
  For i = Der_ligne To 1 Step -1
    If ts.Cells(i, "F").Value = "x" Then           'Verifie la valeur x dans la colonne
    Set Desti = Sheets("archives").Range("A65000").End(xlUp).Offset(1)
      ts.Range("A" & i & ":E" & i).Cut _
          Destination:=Desti
      ts.Range("A" & i).EntireRow.Delete
    End If
  Next
End Sub

oups... pas rafraichi et donc pas vu la réponse de bigdaddy

Bonsoir à tous les 2,

Ci-joint une autre proposition à tester

Bonne soirée

Bouben

Bonsoir à tous les 3

En somme pour résumer :

1) si vous voulez une incrémentation constante de votre boucle de test, il faut partir du bas vers le haut de la feuille car vous faites un Cut de la ligne, pourquoi ?

admettons que vous testiez la ligne 5, il y a un X donc vous coupez la ligne pour l'archiver, votre compteur de test passe à 6, hors du fait du Cut la ligne 6 est en fait la ligne 7 avant le Cut ! Du coup la ligne nouvelle ligne 5 (c'est à dire la 6 avant le Cut) n'est pas testée ! Ce qui engendre une erreur.

D'où le fait de partir du bas : lorsque vous testez la ligne 5, il y a un x donc archivage en la coupant, votre compteur de test passe à 4 et tout va bien car la ligne 6 qui devient 5 après le Cut a déjà été testée et la ligne 4 n'a pas bougé...

2) si une incrémentation ponctuelle ne vous dérange pas, vous incrémentez votre compteur de test seulement s'il n'y a pas de x sur la ligne :

admettons une fois de plus que vous testiez la ligne 5 (ce qui veut dire compteur de test à 5), il y a un x donc on coupe pour archiver, donc on incrémente pas le compteur de test, il reste à 5. Du fait du Cut la ligne 6 passe à 5 et la 7 à 6 etc...

La boucle va refaire le test sur la ligne de la valeur du compteur qui est de 5 car non incrémenté, donc vous testez la ligne 5 qui est en fait la ligne 6 avant le Cut, il n'y a donc pas d'erreur avec cette méthode !

Le choix reste un choix personnel, et peut dépendre de ce que vous avez à faire dans ces boucles.

@ bientôt

LouReeD

Re Bonsoir,

Merci de toutes vos réponses je l'ai ai testé celles de patrick et bouben fonctionnent

Par contre je n'ai pas très bien saisi le Step -1 dans la boucle For .

Merci encore de vos réponses rapides

Danny74100 a écrit :

Re Bonsoir,

Merci de toutes vos réponses je l'ai ai testé celles de patrick et bouben fonctionnent

Par contre je n'ai pas très bien saisi le Step -1 dans la boucle For.

Merci encore de vos réponses rapides

C'est le but de mon 1)...

@ bientôt

LouReeD

Ah oui c'est donc le fait de partir du bas et de décrémenter le compteur de la boucle !

Merci

Rechercher des sujets similaires à "probleme boucle"