VBA Boucle If et utiliser une cellule comme variable

Bonsoir,

désolé de vous embêter avec ça, j'ai un petit soucis avec mon petit programme VBA. Il va surement vous paraître rédibitoire mais j'ai commencé VBA que depuis hier matin et quelque chose bloque dans ma formule. J'ai beau surfer sur les divers fourms je n'ai pas trouvé de solutions...

Pour résumer rapidement mon fichier excel:

J'ai un tableau avec 11 colonnes et 300 lignes environ. J'ai envie d'extraire les lignes dont la colonne J répond à un critère. C'est à dire que toutes les lignes dont la valeur de la cellule en colonne J est un "A" j'ai envie de copier cette ligne, de la coller dans une autre feuille nommée "Feuil3" en insérant une ligne (pour pas écraser d'éventuelles données"). De retourner ensuite dans ma feuille initiale "Données" où il y a le tableau et de supprimer la ligne que je viens de copier/coller.

Mon programme est le suivant. Il marche mais le problème c'est qu'il ne déplace qu'une ligne sur 2 qui se suivent avec le critère A parce que comme je supprime une ligne ça décale de 1... Une idée pour les faire toutes d'un coup ?

Sub enlever_depart()

Dim Ligne As Integer

Ligne = 1

Sheets("Données").Activate

'Feuille où j'ai mon tableau

For Ligne = 1 To 500

'Je commence ma boucle

Range("J" & Ligne).Select

'Je sélectionne la cellule J1

If ActiveCell.Value = "A" Then

'Si la valeur de la cellule est A - mon critère

Rows(Ligne).Select

Selection.Copy

Sheets("Feuil3").Select

Rows(Ligne).Select

Selection.Insert Shift:=xlDown

Selection.PasteSpecial

Sheets("Données").Select

Rows(Ligne).Select

Selection.Delete

'ca marche mais le soucis c'est qu'il recommence sur la ligne 2 hors comme j'ai supprimé une ligne ça a tout décalé

End If

Next

Sheets("Données").Select

Range("A6").Select

Sheets("Organigramme").Select

End Sub

Des idées pour faire tout d'un coup dans la boucle ? car au final ça marche si je lance plusieurs fois ma macro, à la fin toutes les lignes ont été déplacées mais j'aimerais le faire d'un coup.

Je vous remercie pour vos retours ou vos conseils,

je vous souhaite un bon week end

P-S: j'ai essayé de déclarer une cellule comme une variable (la variable c'est A)

mon idée était que Set A = Cells(Ligne, 10) puis plus tard dans ma boucle à la fin du if

Set A = Cells(Ligne-1, 10)

pour que le nouveau A respecte la ligne supprimée (enfin c'est pas clair mais dans tous les cas ça marchait pas).

Bonsoir,

C'est un problème de boucle avec suppression de ligne. Il faut un boucle à l'envers. Essaye de modifier la ligne suivante :

For Ligne = 1 To 500

par :

For Ligne = 500 To 1 Step -1

Magie, ça marche !

Que signifie step -1 ? Je suis très intéressé de savoir la différence avec ma formule

merci beaucoup en tout cas

Re,

La progression du boucle par pas de -1 (décrémentation). Pour ce faire, il faut préciser Step - 1 explicitement. Dans le cas de pas à 1 (incrémentation) on ne précise pas Step 1, c'est par défaut. Bien entendu, on peut aussi fixer en personnalisant le pas comme ceci : Step 2 ou Step -3.

D'accord je comprends mieux, encore merci !

Bonne journée

Rechercher des sujets similaires à "vba boucle utiliser comme variable"