Procédure à lancer plusieurs fois

Bonjour à tous,

J'ai une procédure visant à éliminer d'une grande base de données des lignes qui ne doivent pas être traitées :

For Each c In Sheets(1).Range("P1:P3000")
    If c.Value = "T" Or c.Value = "F" Then
        c.EntireRow.Copy
        Sheets(2).Activate
        Rows(L).Select
        Selection.PasteSpecial
        Sheets(1).Rows(c.Row).Delete
        L = L + 1
    End If
Next

Déjà quelques conseils pour alléger le code (je n'aime pas les ...Select et ...Activate mais je n'arrive pas à trouver sans....

Mon soucis est que je dois lancer une dizaine de fois la procédure pour éliminer toutes les valeurs néfastes (juste exécuter 10 fois la macro en boucle...) et je ne comprends pas pourquoi... Si vous pouviez m'aider ?

Merci !

il faut que tu lui ordone de passer à la cellule suivante avec: Next c

"Next" ne suffit pas étant donné que j'ai qu'une seule boucle ?

La boucle permet de parcourir les éléments d’une collection.

For Each [element] In group

[instructions]

Next [element]

elle répète un groupe d'instructions (ton IF) pour chaque élément (ton c)

Extrait du cours sur les boucles de ce site :

For

Sub boucle_for()
For i = 1 To 5
        'Instructions
    Next

End Sub

La boucle For est répétée ici 5 fois.

A chaque répétition de la boucle, la variable i est automatiquement augmentée de 1 :

Sub boucle_for()

    For i = 1 To 5
        MsgBox i
    Next

End Sub

Je ne pense pas que ce soit ça qui pose mon problème...

j'ai testé ton code mais ça bloque, Rows(L) c'est quoi ton L?

et dèjà pour alléger ton code, tu peux remplacer

        Sheets(2).Activate
        Rows(L).Select
        Selection.PasteSpecial

par

ActiveWorkbook.Sheets("2").Rows(L).PasteSpecial Paste:=xlPasteValues

L est une variable initialisée juste avant la boucle (L=2) qui me permet de passer à la ligne suivante dès que j'ai collé une ligne.

Merci pour l'astuce pour coller sans passer par des Select etc.

Ca marche nickel pour moi

le code élimine toutes les valeurs indésirables d'un seul coup!!

Ah oui c'est bon je viens de voir la fail

qnd il supprime la ligne, la valeur suivante prend la place de celle supprimer et avec next il passe à la cellule suivant etc comme ça il loupe plusieurs valeurs. Donc il faut exécuter le même code à plusieurs reprises

Sub test()
Dim L As String
L = 3
For Each c In Sheets(1).Range("A1:A30")
    If c.Value = "T" Or c.Value = "F" Then
        c.EntireRow.Copy
        ActiveWorkbook.Sheets(2).Rows(L).PasteSpecial Paste:=xlPasteValues
        Sheets(1).Rows(c.Row).Delete
        L = L + 1
    End If
Next
test
test
test
End Sub

voilà, j'espère avoir résolu ton problème

Je vois, merci d'avoir trouvé la réponse.

Je vais peut-être faire une procédure du type :

While WorksheetFunction.Countif(Sheets(1).Columns(1), "test")>0
     Elimination_des_donnees
Wend

Afin de ne pas lancer la procédure pour rien.

Merci.

Rechercher des sujets similaires à "procedure lancer fois"