SUPPRIMER LIGNES TABLEAU EN VBA EN PASSANT PAR UN FILTRE

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 !

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.
 
Re

Charles78
Je suis invisible ou quoi? 🙄
Faire le test avec le message#11
puis lancer la macro SupprLignes
Les lignes sont supprimées (et pas masquées)
Bonsoir Staple,

Effectivement ton code en message #3 fonctionne sur ton fichier que j'ai pu créer grâce à ton code en message #11 mais je ne comprends pas pourquoi ton code en message #3 ne fonctionne pas sur mon fichier.

Merci.
 
Re

Pour le savoir, faudrait qu'on puisse voir ton fichier
(ou plutôt une copie allégée de celui-ci qui reproduit la structure et les formules de l'original (sans données confidentielles)
Une trentaine de lignes suffiraient pour faire le test.
NB: Tu peux aussi zipper le classeur avant de l'envoyer.
 
Bonsoir Fanfan,

En fait les lignes ne se suppriment pas mais elles sont masquées. Y-a-t-il un moyen de vraiment les supprimer ?

Merci
Bonsoir Fanfan,

Aussi sur ton code il y a les deux conditions en même temps mais par rapport à ma demande je souhaitais avoir deux codes différents dont un pour supprimer les lignes dont la cellule en colonne H contient OUI et un autre code (pour que ce soit plus rapide pour moi) de supprimer les lignes du tableau si toute la colonne C est vide à partir d ela ligne 2 bien sûr. En pièces jpointes les deux fichiers avec vos codes respectifs.
 

Pièces jointes

Re

Charles78
Tu disais dans ton premier message
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)
Or dans le fichier que tu viens de joindre, pas de formule en colonne H !!!

Par conséquent, c'est normal que mon code ne fonctionne pas.
(puisque il a écrit en se basant sur le fait qu'il y avait des formules en colonne H)
 
Bonsoir Fanfan,

Aussi sur ton code il y a les deux conditions en même temps mais par rapport à ma demande je souhaitais avoir deux codes différents dont un pour supprimer les lignes dont la cellule en colonne H contient OUI et un autre code (pour que ce soit plus rapide pour moi) de supprimer les lignes du tableau si toute la colonne C est vide à partir d ela ligne 2 bien sûr. En pièces jpointes les deux fichiers avec vos codes respectifs.
Désolé voilà les deux bons fichiers.

Merci.
 

Pièces jointes

Re

Charles78
Normalement, avec cette petite modif cela doit fonctionner, non?
VB:
Sub SupprLignes()
Dim dl&, f As Worksheet
Set f = Sheets("PRODUCTION")
 dl = f.Cells(Rows.Count, "F").End(3).Row
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
On Error Resume Next
  With f.Cells(2, f.Columns.Count).Resize(dl - 1)
    .Formula = "=IF(H2=""OUI"",""$"",0)"
    .SpecialCells(xlCellTypeFormulas, 2).EntireRow.Delete
    .Clear
  End With
Application.Calculation = xlCalculationAutomatic
End Sub
 
Re

Charles78
Tu disais dans ton premier message

Or dans le fichier que tu viens de joindre, pas de formule en colonne H !!!

Par conséquent, c'est normal que mon code ne fonctionne pas.
(puisque il a écrit en se basant sur le fait qu'il y avait des formules en colonne H)
Staple,

Les deux fichiers avec vos codes respectifs et la formule en colonne H. En fait les fichiers initialement envoyés étaient après l'exécution d'une première macro pour mettre en forme le tableau de l'onglet "PRODUCTION". Maintenant, vous avez les fichiers avec la 1ère macro en incorporant vos codes.

Merci.
 

Pièces jointes

Re

Charles78
Normalement, avec cette petite modif cela doit fonctionner, non?
VB:
Sub SupprLignes()
Dim dl&, f As Worksheet
Set f = Sheets("PRODUCTION")
dl = f.Cells(Rows.Count, "F").End(3).Row
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
On Error Resume Next
  With f.Cells(2, f.Columns.Count).Resize(dl - 1)
    .Formula = "=IF(H2=""OUI"",""$"",0)"
    .SpecialCells(xlCellTypeFormulas, 2).EntireRow.Delete
    .Clear
  End With
Application.Calculation = xlCalculationAutomatic
End Sub
Staple,

Oui effectivement ça fonctionne !!!! Les lignes sont bien supprimées et non masquées.

Aussi, si ce n'est pas trop demandé, peux-tu voir pour un code dans la cas où je souhaite supprimer les lignes du tableau mais cette fois si la colonne C est vide et toujours à partir de la ligne 2 ?

Merci infiniment à vous deux pour votre aide.
 
Re

Essaies cette macro
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
f.Range("C2:C" & dl).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
 
Re

Essaies cette macro
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
f.Range("C2:C" & dl).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
Staple,

En pièce jointe le fichier (pour le coup pas besoin de formule) mais j'ai un message d'erreur sur la dernière ligne.

VB:
f.Range("C2:C" & dl).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Merci.
 

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
3
Affichages
41
Réponses
8
Affichages
92
Retour