VBA :suppression de lignes si

Bonjour à tous,

Nouveau dans l'univers de VBA après une formation intensive,

J'ai créé une macro d’historisation de commentaires qui fonctionne parfaitement hormis la fin, à savoir la suppression de toutes les lignes copiées ne commençant pas par "A00*".

Voici la macro écrite (et qui ne fonctionne pas):

Dim L As Range

For Each L In Selection

If L.Value <> "A00*" Then

Rows(L).Delete / testé également avec Entirerow.delete

End If

ActiveCell.Offset(1, 0).Select

Next

Je dois faire une erreur basique mais je sèche.

Merci d'avance.

Bonjour,

Essaye comme ceci:

Dim L As Range
LigSup = ""
For Each L In Selection
    If not L.Value Like "A00*" Then
        LigSup = LigSup & Iif(LigSup="", "", ",") & L.Row & ":" & L.Row
    End If
Next
If LigSup <> "" Then
    Range(LigSup).EntireRow.Delete
End If

Etant donné que je n'ai pas testé le programme, c'est possible que tu aies des erreurs au lancement, si c'est le cas, n'hésites pas à me le dire

Bonjour

Pourquoi mettre ceci dans la boucle ?

ActiveCell.Offset(1, 0).Select

cela doit probablement modifier ensuite son fonctionnement.

Sinon, mets un bout de fichier simplifié.

Pour ma part, quand j'ai à supprimer des lignes, je pars à l'envers de la dernière ligne vers la première.


edit : Bonjour Ausecour, ta fonction est très intéressante !

Bonjour,

Après pas mal de tests, j'ai trouvé mon bonheur.

Certes pas optimisé, mais ça marche nickel!

'Suppression de toutes les lignes de commencant pas par "A00" et vidage du presse-papier

drl = Worksheets("Historique commentaires").Range("A100000").End(xlUp).Row 'variable dernière ligne

'boucle de suppression

For ligne = drl To 2 Step -1

If Left$(Worksheets("Historique commentaires").Cells(ligne, 1).Value, 3) <> "A00" Then

Worksheets("Historique commentaires").Rows(ligne).Select

Selection.Delete

End If

Next ligne

Pour ceux que ça interresse.

Merci des réponses ci-dessus

Bonjour, salut Ausecour, salut Steelson !

Ton code légèrement modifié :

Sub SuppressionConditionnelle()

Dim drl As Long, ligne As Long

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

With Sheets("Historique commentaires")
   drl = .Range("A" & .Rows.Count).End(xlUp).Row 'variable dernière ligne
   'boucle de suppression
   For ligne = drl To 2 Step -1
      If Not .Range("A" & ligne) Like "A00*" Then .Rows(ligne).Delete
   Next ligne
End With

Application.Calculation = xlCalculationAutomatic

End Sub

Après pas mal de tests, j'ai trouvé mon bonheur.

For ligne = drl To 2 Step -1

Pourquoi "pas mal de tests" ? la réponse était donnée :

Pour ma part, quand j'ai à supprimer des lignes, je pars à l'envers de la dernière ligne vers la première.

Après pas mal de tests, j'ai trouvé mon bonheur.

For ligne = drl To 2 Step -1

Pourquoi "pas mal de tests" ? la réponse était donnée :

Pour ma part, quand j'ai à supprimer des lignes, je pars à l'envers de la dernière ligne vers la première.

Ca ne me parlait pas.

Je suis nouveau dans le monde de VBA...

Autant pour moi alors, désolé.

N'hésite jamais à demander d'éclaircir une réponse ...

Rechercher des sujets similaires à "vba suppression lignes"