Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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,
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 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 😀
 
Bonjour à tous,

merci à vous pour toutes ces solutions.

Elles fonctionnent bien avec mon fichier joint mais malheureusement pas avec mon vrai fichier (confidentialité oblige).
Le problème vient peut être des formules.

Donc je vous livre mon "vrai" fichier
 

Pièces jointes

- 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
195
  • Question Question
Power Query Power Query
Réponses
26
Affichages
575
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…