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
Re

C'est parce que tes cellules n'étaient pas vraiment vides
(Il devait y avoir des espaces qui traînaient dans les cellules)
Après nettoyage des cellules vides (chose que j'ai faite manuellement sur ton fichier), la macro fonctionne.
VB:
Sub Suppr_LignesVides_COLC()
Dim dl&, f As Worksheet
Set f = Sheets("PRODUCTION")
dl = f.Cells(Rows.Count, "F").End(3).Row
Application.ScreenUpdating = False
On Error Resume Next
f.Range("C2:C" & dl).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
 

Charles78

XLDnaute Nouveau
Re

C'est parce que tes cellules n'étaient pas vraiment vides
(Il devait y avoir des espaces qui traînaient dans les cellules)
Après nettoyage des cellules vides (chose que j'ai faite manuellement sur ton fichier), la macro fonctionne.
VB:
Sub Suppr_LignesVides_COLC()
Dim dl&, f As Worksheet
Set f = Sheets("PRODUCTION")
dl = f.Cells(Rows.Count, "F").End(3).Row
Application.ScreenUpdating = False
On Error Resume Next
f.Range("C2:C" & dl).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Staple,

Effectivement, encore une fois tu as réussis à trouver mon problème.

Je te remercie beaucoup ainsi que Fanfan pour le temps que vous m'avez consacré.

Bonne semaine à vous deux.
 

benoitoleron

XLDnaute Nouveau
Bonsoir à tous,

Je suis un débutant en macro et j'ai essayé d'adapté la macro de Staple1600 à mon cas mais je n'y arrive pas.

Je voudrai via un bouton supprimer des lignes dont la valeur de la colonne J est égale à :
NEW
CST
CTSR

Ou ne garder que les lignes de la condition CTSA

Cette macro serait intégrée à une autre macro qui vient coller des data dans la feuille DEVIS ACCEPTE

Le nombre de ligne est variable à chaque import de données (imports tous les jours)

Je vous mets mon fichier d'exemple.

Enfin sans vouloir vous embeter, j'aimerai comprendre ce code donc vous pouviez me guider dans les instruction je suis preneur :)
 

Pièces jointes

  • 2020_03_19 Macro Tri DATA.xlsm
    168.8 KB · Affichages: 5

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Beno17000

•>Beno17000
L'usage, c'est de créer sa propre discussion pour créer sa question.
Mais puisque tu l'as posée ici, alors je réponds ici.
VB:
Sub KeepOnly_CSTA()
Dim Plg As Range, pf As Range
Set Plg = Cells(1).Resize(Cells(Rows.Count, "J").End(3).Row, 13)
Plg.AutoFilter 10, "<>CSTA", xlAnd: Set pf = Range("_FilterDataBase")
Application.ScreenUpdating = False
pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12).EntireRow.Delete: Plg.AutoFilter
End Sub
NB: test OK sur ton fichier exemple.
 
Dernière édition:

benoitoleron

XLDnaute Nouveau
Bonjour Staple 1600,

Pour le fil j'ai hésité car ma question était identique avec seulement des paramètres différents.

La prochaine fois, car il y aura une prochaine fois, je ferai un nouveau fil.

Merci d'avoir pris le temps de me répondre.
Je test et je te dis ça
 

benoitoleron

XLDnaute Nouveau
Bon tu as raison je fais faire un nouveau sujet en effet :

Lorsque j'intègre ton code à mon fichier d'origine cela ne fonctionne pas car j'ai plusieurs onglet (comme un imbécile j'ai oublié de te le signaler)​
J'ai d'autre choses à réaliser et j'aurai surement besoin encore d'aide sur le fichier.​

J'aurai du m'écouter lorsque je me suis dit il faut faire un nouveau fil, quel c.. franchement.
 

Discussions similaires

Statistiques des forums

Discussions
298 010
Messages
1 965 113
Membres
200 852
dernier inscrit
Cés39