Suppresion ligne lorsqu´une colonne contient une certaine valeur

Résolu
camcam -  
camcam1404 Messages postés 68 Statut Membre -
Bonjour,

J'utilise le code suivant mais je ne comprends pas pourquoi il ne fonctionne pas pour certaines feuilles de calcul alors que pour d'autre oui...

Sub supression_ligne()
Dim Num_Ligne As Long
Dim Last_line As Integer

Last_line = Range("A1").End(xlDown).Row

For Num_Ligne = 1 To Last_line

If Cells(Num_Ligne, 4).Value = "0" Then Cells(Num_Ligne, 4).EntireRow.Delete

Next Num_Ligne

End Sub

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    re,

    inutile de boucler sur toutes les lignes même en remontant! ! !

    et ne pas oublier de figer l'écran

    Option Explicit
    '---------------------------------------------
    Sub destroy()
    Dim Nbre As Long, Cptr As Long

    Application.ScreenUpdating = False
    With ActiveSheet
    Nbre = Application.CountIf(.Columns("A"), 0) 'ou "0" ???
    For Cptr = 1 To Nbre
    .Rows(.Columns("A").Find(0, Cells(Cells.Rows.Count, "A")).Row).Delete
    'ou ....Find("0"........
    Next
    End With
    End Sub


     Michel
    1
    1. camcam1404 Messages postés 68 Statut Membre
       
      Merci pour la réponse !
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour,
    "0"= texte ou chiffre ?
    Combien de lignes ?
    0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 833
     
    Bonjour,
    Lorsque tu supprimes une ligne... les lignes d'en dessous remontent ... ce qui fausse la boucle.
    Pour palier à ça il faut faire la boucle en partant du bas puis en remontant.

    Essaye ça :
    
    Sub supression_ligne() 
    Dim Num_Ligne As Long 
    Dim Last_line As Integer 
    
    Last_line = Range("A1").End(xlDown).Row 
    
    For Num_Ligne = Last_line to 1 Step -1 
    
    If Cells(Num_Ligne, 4).Value = "0" Then Cells(Num_Ligne, 4).EntireRow.Delete 
    
    
    Next Num_Ligne 
    
    End Sub 
    

    0