[VBA] Détruire les lignes qui ont été filtrées

Le
HD
Bonjour,

Sur un tableau j'utilise des filtres mais je voudrais que ma macro
supprime toutes les lignes filtrées pour ne plus laisser apparaître que
celle correspondant aux critères de mes filtres

Pour cela je peux bien sûr faire un test sur chaque ligne pour voir si celle
ci est hidden mais Existe-t-il une astuce permettant de sélectionner d'un
coup toutes ces lignes pour les détruire ce qui ferait gagner beaucoup de
temps lorsque le tableau comporte plusieurs dizaines de milliers de lignes.

Excel a peut être une donnée comportant les emplacements de ces lignes ? Car
lorsque l'on désactive un filtre il les fait réapparaître très rapidement
Non ?

Merci d'avance pour votre aide
--
@+
HD
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Ellimac
Le #5276641
Bonjour,

Sub Macro1()
Range("a2").Select
Range(Selection, Selection.End(xlDown)).EntireRow.Select
Selection.SpecialCells(xlCellTypeVisible).Delete
Range("A1").Select
ActiveSheet.ShowAllData
End Sub

Camille


"HD" fp1loe$2u29$
Bonjour,

Sur un tableau j'utilise des filtres... mais je voudrais que ma macro
supprime toutes les lignes filtrées pour ne plus laisser apparaître que
celle correspondant aux critères de mes filtres...

Pour cela je peux bien sûr faire un test sur chaque ligne pour voir si
celle ci est hidden mais... Existe-t-il une astuce permettant de
sélectionner d'un coup toutes ces lignes pour les détruire... ce qui
ferait gagner beaucoup de temps lorsque le tableau comporte plusieurs
dizaines de milliers de lignes.

Excel a peut être une donnée comportant les emplacements de ces lignes ?
Car lorsque l'on désactive un filtre il les fait réapparaître très
rapidement... Non ?

Merci d'avance pour votre aide
--
@+
HD




HD
Le #5276611
Sub Macro1()
Range("a2").Select
Range(Selection, Selection.End(xlDown)).EntireRow.Select
Selection.SpecialCells(xlCellTypeVisible).Delete
Range("A1").Select
ActiveSheet.ShowAllData
End Sub


Désolé Camille... j'ai dû mal m'exprimer, je voudrais en fait supprimer les
lignes cachées... et non celles qui sont visibles...

Je ne connaissais pas cette propriété SpecialCells... Sympa !!!

@+
HD

Corto
Le #5276581
Bonjour HD,
Moi je ferais dans ce gout là :
set XZONE = nothing
For each XXX in ZONEDATA
if XXX.entirerow.hidden then
if XZONE is nothing then
set XZONE = XXX.entirerow
else
set XZONE = union(XZONE, XXX.entirerow)
endif
endif
Next XXX
if not XZONE is nothing then XZONE.delete

Corto

Bonjour,

Sur un tableau j'utilise des filtres... mais je voudrais que ma macro
supprime toutes les lignes filtrées pour ne plus laisser apparaître que
celle correspondant aux critères de mes filtres...

Pour cela je peux bien sûr faire un test sur chaque ligne pour voir s i celle
ci est hidden mais... Existe-t-il une astuce permettant de sélectionn er d'un
coup toutes ces lignes pour les détruire... ce qui ferait gagner beau coup de
temps lorsque le tableau comporte plusieurs dizaines de milliers de lig nes.

Excel a peut être une donnée comportant les emplacements de ces lig nes ? Car
lorsque l'on désactive un filtre il les fait réapparaître très rapidement...
Non ?

Merci d'avance pour votre aide



Ellimac
Le #5276561
Re,

Sub Macro1()
Range("A1").CurrentRegion.Copy Range("a50000")
ActiveSheet.ShowAllData
Range("A1:a49999").EntireRow.Delete
Range("A1").Select
End Sub

Camille

"HD" fp1nio$2ul7$
Sub Macro1()
Range("a2").Select
Range(Selection, Selection.End(xlDown)).EntireRow.Select
Selection.SpecialCells(xlCellTypeVisible).Delete
Range("A1").Select
ActiveSheet.ShowAllData
End Sub


Désolé Camille... j'ai dû mal m'exprimer, je voudrais en fait supprimer
les lignes cachées... et non celles qui sont visibles...

Je ne connaissais pas cette propriété SpecialCells... Sympa !!!

@+
HD





HD
Le #5276541
Ce qui revient à un passage en revue de toutes les lignes... La solution de
Ellimac est beaucoup plus rapide :

Sub Macro1()
Range("a2").Select
Range(Selection, Selection.End(xlDown)).EntireRow.Select
Selection.SpecialCells(xlCellTypeVisible).Delete
Range("A1").Select
ActiveSheet.ShowAllData
End Sub

Mais malheureusement celà détruit les lignes visibles et non les lignes
cachées... Je n'ai pas trouvés de paramètres de SpecialCells permettant de
ne prendre que les lignes cachées... et je ne sais pas comment inverser la
sélection...

@+
HD
HD
Le #5276521
Sub Macro1()
Range("A1").CurrentRegion.Copy Range("a50000")
ActiveSheet.ShowAllData
Range("A1:a49999").EntireRow.Delete
Range("A1").Select
End Sub


Magnifique !!!

L'on copie donc les données visibles, on détruit tout, puis on colle...
Astucieux...

Merci à vous tous !!!

@+
HD

Michel Angelosanto
Le #5163711
J'utilise la méthode suivante:

Je mets l'inverse du filtre recherché par exemple, si je veux afficher
toutes les lignes qui ont un 1 en colonne A, j'affiche toutes les lignes qui
n'ont pas 1 en colonne A puis je supprime les lignes et enfin j'enlève le
filtre.

--
Michel Angelosanto, Bordeaux
http://angelosa.free.fr/
Publicité
Poster une réponse
Anonyme