Supprimer ligne avec condition

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ketzakoalt

XLDnaute Nouveau
Bonjour,

j'ai créé ce code pour supprimer les lignes avec cellules non vides dans les colonnes H, I et K.(à partir de la 2ème ligne)
Quand je le teste ça me supprime uniquement les lignes paires.

Savez-vous pourquoi ?

Et SVP, comment remplacer 20 par "derniere ligne non vide".

Public Sub supprimer()

Dim i As Integer
Sheets("espace").Select
For i = 2 To 20
If (Cells(i, 8) <> "") And (Cells(i, 9) <> "") And (Cells(i, 11) <> "") Then Rows(i).Delete

Next i

End Sub


merci pour votre aide
 
Bonjour,

j'ai créé ce code pour supprimer les lignes avec cellules non vides dans les colonnes H, I et K.(à partir de la 2ème ligne)
Quand je le teste ça me supprime uniquement les lignes paires.

Savez-vous pourquoi ?

Et SVP, comment remplacer 20 par "derniere ligne non vide".

Public Sub supprimer()

Dim i As Integer
Sheets("espace").Select
For i = 2 To 20
If (Cells(i, 8) <> "") And (Cells(i, 9) <> "") And (Cells(i, 11) <> "") Then Rows(i).Delete

Next i

End Sub


merci pour votre aide
Bonjour,
Pour supprimer des lignes sur une feuille il faut commencer par la fin et remonter vers le début
Cela pourrait ressembler à ici
VB:
Sub supprimer()
Dim i&, Derlg&
Application.ScreenUpdating = False
With Sheets("espace")
  Derlg = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
  For i = Derlg To 2 Step -1
    If .Cells(i, "h") & .Cells(i, "i") & .Cells(i, "k") <> "" Then .Rows(i).Delete
  Next i
End With
Application.ScreenUpdating = True
End Sub
 
Merci Jacky, ca marche bien. Je garde

Mais j'aurais quand même bien aimé savoir pourquoi mon code supprime une ligne sur 2
Re..
Ne voyant pas ton classeur, je dirais….
En commençant par le début, si deux lignes à supprimer sont consécutives on ne voit plus la deuxième puisque i=i+1 et la ligne i est supprimée.
Il faudrait plusieurs passages pour trouver le bon résultat.
 
Dernière édition:
Bonsoir le fil, le forum, ketzakoalt, Jacky67

Une autre voie (sans boucle)
VB:
'NB: Plage à adapter
'Dans cet exemple: ligne 1= ligne d'entête
'Plage avec des données : colonne A à O
Sub SupprimerBIS()
With Sheets("espace")
  Derlg = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
   With .Range("P2:P" & Derlg)
   .Formula = "=1/((COUNTA(H2,I2,K2)=3))"
   .SpecialCells(xlCellTypeFormulas, 1).EntireRow.Delete
   End With
   .Columns("P:P").Delete
End With
End Sub
 
Re..
Parce que les cellules concernées en colonne h-i-k ne sont pas vides mais contiennent 0

*Si ces cellules devaient toujours contenir 0 au lieu d'être vides
Remplace cette ligne
If .Cells(i, "h") & .Cells(i, "i") & .Cells(i, "k") <> "" Then .Rows(i).Delete
par
If Not IsNumeric(.Cells(i, "h") & .Cells(i, "i") & .Cells(i, "k")) Then .Rows(i).Delete
 
Dernière édition:
Bonjour @ketzakoalt, @Jacky67 🙂, @Staple1600😉,

Pour le fun, un essai sans boucle :
VB:
Sub Supprimer()
  With Worksheets("espace").Range("a1").CurrentRegion
    On Error Resume Next
    Union(.Columns(8), .Columns(9), .Columns(11)).Replace 0, "", xlWhole
    Intersect(.Columns(8).SpecialCells(xlCellTypeBlanks).Offset(, 3), _
      .Columns(9).SpecialCells(xlCellTypeBlanks).Offset(, 2), _
      .Columns(11).SpecialCells(xlCellTypeBlanks)).EntireRow.Delete xlShiftUp
  End With
End Sub
 
Bonjour @ketzakoalt, @Jacky67 🙂, @Staple1600😉,

Pour le fun, un essai sans boucle :
VB:
Sub Supprimer()
  With Worksheets("espace").Range("a1").CurrentRegion
    On Error Resume Next
    Union(.Columns(8), .Columns(9), .Columns(11)).Replace 0, "", xlWhole
    Intersect(.Columns(8).SpecialCells(xlCellTypeBlanks).Offset(, 3), _
      .Columns(9).SpecialCells(xlCellTypeBlanks).Offset(, 2), _
      .Columns(11).SpecialCells(xlCellTypeBlanks)).EntireRow.Delete xlShiftUp
  End With
End Sub

Bonjour mapomme

Jolie...mais je crois que c'est l'inverse qui doit être supprimé...
 
Bonsoir @Jacky67 😉,

Bonjour mapomme
Jolie...mais je crois que c'est l'inverse qui doit être supprimé...

C'est pas faux 😛. Bon une p'tite correction. On remplace les zéros par des vides puis on supprime les lignes dont toutes les cellule en colonnes I, J et K sont non vides.
VB:
Sub Supprimer()
  On Error Resume Next
  With Worksheets("espace").Range("a1").CurrentRegion
    With .Offset(1).Resize(.Rows.Count - 1)
      Union(.Columns(8), .Columns(9), .Columns(11)).Replace 0, "", xlWhole
      Intersect(.Columns(8).SpecialCells(xlCellTypeConstants).Offset(, 3), _
        .Columns(9).SpecialCells(xlCellTypeConstants).Offset(, 2), _
        .Columns(11).SpecialCells(xlCellTypeConstants)).EntireRow.Delete xlShiftUp
    End With
  End With
End Sub
 
Bonsoir le fil, le forum, ketzakoalt, Jacky67, mapomme🙂

@ketzakoalt
Bon alors je reviens dans le fil avec ma macro modifiée 😉
VB:
Sub SupprimerTER()
With Sheets("espace")
  Derlg = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
  .Range("H:I,K:K").Replace "0", ""
   With .Range("P2:P" & Derlg)
   .Formula = "=1/((COUNTA(H2,I2,K2)=3))"
   .SpecialCells(xlCellTypeFormulas, 1).EntireRow.Delete
   End With
   .Range("P2:P" & Derlg) = Empty
End With
End Sub
P/S: Une cellule qui n'affiche pas le zéro qu'elle contient n'est pas pour autant vide... 🙄

NB: @mapomme
D'habitude, c'est moi le gars aux endives 😀
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
179
  • Question Question
Power Query Power Query
Réponses
26
Affichages
574
Retour