SUPPRIMER LIGNES TABLEAU EN VBA EN PASSANT PAR UN FILTRE

Charles78

XLDnaute Nouveau
Bonjour,

Je souhaite supprimer des lignes d'un tableau à partir de la ligne 2 si la cellule en colonne H contient OUI (à savoir que le OUI est obtenu suite à une formule). Quand je me retrouve avec des lignes dont la cellule en colonne H contient OUI et d'autres contiennent NON, cela fonctionne car ça supprime bien toutes les lignes dont la cellule en colonne H contenait OUI et je me retrouve bien qu'avec les lignes dont les cellules en colonne H contiennent NON. Idem si je me retrouve avec que des lignes dont la cellule en colonne H contient NON, ça fonctionne aussi car ça ne me supprime pas les lignes.

En revanche, si je me retrouve qu'avec des lignes dont la cellule en colonne H contient OUI, les lignes ne sont pas supprimées et c'est bien là le problème.

Ci-dessous mon code:

VB:
 For i = Range("A65536").End(xlUp).Row To 2 Step -1
            If Cells(i, 8) Like "*OUI*" Then Rows(i).Delete
        Next i

Aussi, je pense que pour être plus rapide je souhaiterais un code VBA (avec la syntaxe If Then Else) qui indique la condition suivante: Si "toute" la Colonne C à partir de la ligne 2 (donc ne pas prendre en compte l'en-tête) a ses cellules vides, alors il faut supprimer toutes les lignes du tableau. Je ne vois pas comment je peux formuler ce code étant débutant en VBA (j'insiste bien sur le fait que toutes les cellules de la colonne C doivent être vides).

Merci beaucoup pour votre aide.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Charles78, fanfan38

Une autre méthode (sans filtre, sans boucle)
VB:
Sub SupprLignes()
Dim dl&: dl = Cells(Rows.Count, 1).End(3).Row
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
  With Cells(2, Columns.Count).Resize(dl - 1)
    .Formula = "=IF(H2=""OUI"",""$"",0)"
    .SpecialCells(xlCellTypeFormulas, 2).EntireRow.Delete
    .Clear
  End With
Application.Calculation = xlCalculationAutomatic
End Sub
NB: Test OK sur mon propre fichier exemple (avec mes propres formules qui renvoient OUI en colonne H)
 

Charles78

XLDnaute Nouveau
Bonjour le fil, Charles78, fanfan38

Une autre méthode (sans filtre, sans boucle)
VB:
Sub SupprLignes()
Dim dl&: dl = Cells(Rows.Count, 1).End(3).Row
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
  With Cells(2, Columns.Count).Resize(dl - 1)
    .Formula = "=IF(H2=""OUI"",""$"",0)"
    .SpecialCells(xlCellTypeFormulas, 2).EntireRow.Delete
    .Clear
  End With
Application.Calculation = xlCalculationAutomatic
End Sub
NB: Test OK sur mon propre fichier exemple (avec mes propres formules qui renvoient OUI en colonne H)
Bonjour Staple,

Merci également. Je vais tester votre code et vous tiens au courant.

Merci.
 

Staple1600

XLDnaute Barbatruc
Re

Voilà sur quoi j'ai testé
Sur une feuille vierge, lancer la macro ci-dessous
VB:
Sub CréationTEST()
Application.ScreenUpdating = False
Range("A1") = "=""ITEM_""&COLUMN()"
Range("A1:P1").FillRight
Range("A2:P30") = "=ADDRESS(ROW(),COLUMN(),4)"
Range("A2:P30") = Range("A2:P30").Value
Range("H2:H30").FormulaR1C1 = "=IF(MOD(RIGHT(RC[-4])*1,5)=0,""OUI"",""NON"")"
End Sub
Tu as une erreur chez toi quand tu lances SupprLignes ?
Moi, non ;)
(Test sur Excel 2013)
 

Staple1600

XLDnaute Barbatruc
Re

Faire le test avec le code du message#11
(A exécuter sur une feuille vierge)
Puis quand l'exemple est créé
Lancer la macro SupprLignes
Normalement pas de message d'erreur, et les lignes avec OUI ont été supprimées.

En tout cas, c'est ce qui se passe sur mon PC.

PS: On ne joint pas le fichier original mais un fichier allégé pour illustrer la question
Ou comme je l'ai fait une macro qui créé l'exemple ;)
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 179
Membres
112 677
dernier inscrit
Justine11