Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

7 réponses
Avatar
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

7 réponses

Avatar
Ellimac
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" a écrit dans le message de news:
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




Avatar
HD
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

Avatar
Corto
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



Avatar
Ellimac
Re,

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

Camille

"HD" a écrit dans le message de news:
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





Avatar
HD
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
Avatar
HD
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

Avatar
Michel Angelosanto
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/