[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
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
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$
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
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
Sub Macro1()
Range("A1").CurrentRegion.Copy Range("a50000")
ActiveSheet.ShowAllData
Range("A1:a49999").EntireRow.Delete
Range("A1").Select
End Sub
Camille
"HD" fp1nio$2ul7$
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
Magnifique !!!
L'on copie donc les données visibles, on détruit tout, puis on colle...
Astucieux...
Merci à vous tous !!!
@+
HD
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/