Supprimer une ligne en fonction du libellé

Bonjour as tous,

j'essaye de supprimer la ligne qui fait référence (Ventilation/Plusieurs catégories) dans la colonne C.je n'arrive pas à la sélectionner correctement et passer à la suivante. Ça me supprime les lignes qui ne faut pas.

ci joint se que j'ai écrit , mais je pense que je suis à coté de la plaque. Pas

26test-vba.xlsm (23.44 Ko)

Facile sans formation

Sub Macro3()

 Dim ligne As String
 ligne = 2

Do While Cells(ligne, 2).Value <> "" 
If Cells(ligne, 4).Value = "Ventilation/Plusieurs catégories" Then
ActiveCell.EntireRow.Select
Selection.Delete
End If
18test-vba.xlsm (23.44 Ko)
ligne = ligne + 1
Loop
End Sub

Merci de votre aide par avance

philippe

Bonjour philippe87
Voici ma participation. Il faut partir de la dernière ligne non vide et remonter ligne par ligne.
cdt
Papy Henri

12test-vba1.xlsm (23.24 Ko)

Bonjour AFEH,

je viens de faire le test , ça fonctionne et je n'ai plus qu'a modifier mon VBA.

merci pour ton aide.

cordialement

philippe

Bonjour philippe87, AFEH,

On peut conserver votre boucle "do while..." du haut vers le bas.

Il faut juste tenir compte que :

  • Si on supprime la ligne N alors les lignes du dessous remontent toutes d'un cran. La ligne N+1 avant la suppression devient la ligne la ligne N après la suppression. Cela signifie que lorsque qu'on supprime la ligne N, la ligne suivante à traiter sera la ligne N (ex ligne N+1). Il ne faut donc pas incrémenter le compteur ligne.
  • Si on ne supprime pas la ligne N alors la ligne suivante à examiner sera bien la ligne N+1. Il faut donc incrémenter le compteur ligne.

Le code sera donc:

Sub Macro3()
   Dim ligne As Long
   ligne = 2
   Do While Cells(ligne, 2).Value <> ""
      If Cells(ligne, 4).Value = "Ventilation/Plusieurs catégories" Then Rows(ligne).Delete Else ligne = ligne + 1
   Loop
End Sub

nota : c'est similaire au fait que si dans une course on dépasse le deuxième alors on devient deuxième (et non pas premier) .

Les méthodes qui suppriment les lignes une à une sont particulièrement lentes surtout quand il s'agit de supprimer des milliers de lignes. D'autres méthodes existent avec un codage un peu plus long.

Re,

Un classeur pour comparer la méthode ligne par ligne et une méthode par array.

Pour 50 000 lignes à traiter, la procédure ligne par ligne s'exécute sur mon PC en environ 15,5 s et la procédure par array s'exécute en environ 0,45 s.

nota : le nombre de lignes à initialiser est paramétré via la constante NbrData dans la procédure init.

Re,

J'ai ajouté une procédure via formule et tri qui pour 50 000 lignes est la plus rapide des trois : environ 0,25 s.

Rechercher des sujets similaires à "supprimer ligne fonction libelle"