Macro pour supprimer des lignes

Bonjour,

J'ai cette macro qui fonctionne :
Sub Macro_2()

'Pour détruire les lignes qui commence par *
Sheets("DATA - Achats").Select

Dim Ligne As Integer

For Ligne = 1 To 10000
If Cells(Ligne, 13) = "Effacer" Then
Rows(Ligne & ":" & Ligne).EntireRow.Delete
End If
Next

End Sub

Toutefois, elle ne semble pas vouloir supprimer plus de deux lignes à la fois ??

Pourtant quand je désire masquer la ligne :
Rows(Ligne & ":" & Ligne).EntireRow.Hidden

ça fonctionne pour tous les lignes ....

Je ne comprends pas pourquoi ?
Y aurait-il un autre moyen pour supprimer mes lignes ?

Merci d'avance,

2 réponses

  1. Bonjour christ.lenoir,

    Pour une suppression de lignes, il faut faire l'opération
    du bas vers le haut => voici ton code VBA modifié :

    
    Sub SupprLigs()
    
      ' pour supprimer les lignes qui commencent par *
    
      Worksheets("DATA - Achats").Select
      Application.ScreenUpdating = False
    
      Dim dlig As Long, lig As Long
    
      ' derrnière ligne, selon la colonne "M"
      dlig = Range("M" & Rows.Count).End(xlUp).Row
    
      For lig = dlig To 1 Step -1
        If Left$(Cells(lig, 13), 1) = "*" Then Rows(lig & ":" & lig).Delete
      Next lig
    
    End Sub
    
    

    Cordialement
     
    1
    1. D'accord merci beaucoup Xavier pour votre réponse.
      Toutefois ça ne fait rien ??
      Juste pour ma compréhension, que veut dire cette partie de la macro:
      For lig = dlig To 1 Step -1
      If Left$(Cells(lig, 13), 1) = "*" Then Rows(lig & ":" & lig).Delete
      Next lig

      Je crois que là que ça bogue ... ou sinon là :
      dlig = Range("M" & Rows.Count).End(xlUp).Row
      0
    2. Je travail avec Excel 2010 ... peut-être ça change quelque chose ??
      0
    3. Edit :

      
      Sub SupprLigs()
      
        ' pour supprimer les lignes qui commencent par *
      
        Dim dlig As Long, lig As Long
      
        Worksheets("DATA - Achats").Select
        Application.ScreenUpdating = False
      
        ' dernière ligne, selon la colonne "M"
        dlig = Range("M" & Rows.Count).End(xlUp).Row
      
        For lig = dlig To 1 Step -1
          If Left$(Cells(lig, 13), 1) = "*" Then Rows(lig).Delete
        Next lig
      
      End Sub
      
      
      0
    4. Ça ne fait toujours rien ...
      0
    5. Je viens de comprendre ce que vous me proposiez...
      J'ai fait une petite modif et ça fonctionné !

      Merci,

      C'est que moi je ne savais pas comment faire la macro avec le Left alors je l'avais fait dans une fonction Si : =SI(GAUCHE(G2;1)="*";"Effacer";"")

      Toutefois avec votre macro, je n'ai plus besoin de cette fonction ...

      Ça fonctionne merci beaucoup !
      0
  2. Bonjour

    Poste un exemple de ton fichier sur monpartage.fr, fais créer un lien que tu copies et reviens coller ici, on regardera

    Cdlmnt
    Via
    0
    1. Je ne peux pas malheureusement, il contient des données confidentielles ...

      Peut-être je peux être plus clair, dans les cellules se trouvant à la colonne 13, j'ai une formule Si qui me dit donne la réponse : Effacer ou"" quand je ne veux pas l'effacer ...
      Alors l'erreur ne provient pas de ce bout là ..
      0