Cherche fonction supprimant lignes masquées par filtre

TooFatBoy

XLDnaute Barbatruc
Bonjour,

J'ai une feuille de mon classeur dans laquelle il y a un tableau.
Dans une macro, je filtre ce tableau avec un filtre automatique et il me reste à l'écran uniquement les lignes m'intéressant.
Jusque là, tout est normal et tout me convient parfaitement. ;)

Si je fais un "copier/coller" de cette feuille après filtrage, seules les lignes visibles au moment du "copier" sont collées sur la nouvelle feuille.
Là aussi tout est parfait, ou plutôt devrais-je dire était parfait... car maintenant (suite à une contrainte que j'essaye de contourner) je voudrais obtenir le même effet, c'est-à-dire ne garder que les lignes visibles après filtrage, mais sans faire un "copier/coller" vers une nouvelle feuille, autrement dit directement sur la feuille d'origine.

Avec une macro, je pourrais tester chaque ligne une par une et la supprimer si elle ne convient pas, mais j'ai peur que ce soit un peu long et comme généralement les fonctions Excel sont hyper rapides, je me demandais s'il n'existait pas une fonction, utilisable dans ma macro, à appliquer au tableau filtré permettant de supprimer toutes les lignes non affichées (du tableau en question et non de toute la feuile si possible).


J'espère avoir été à peu prés clair.
Merci par avance aux gens qui voudront bien m'aider à résoudre ce petit problème; ;)
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Cherche fonction supprimant lignes masquées par filtre

Bonjour à tous,

Une fonction ne pourra pas supprimer les lignes, il faut passer par un code
Sous réserve d'être contredit par plus averti que moi...

A + à tous
 

TooFatBoy

XLDnaute Barbatruc
Re : Cherche fonction supprimant lignes masquées par filtre

Merci JCGL pour ta réponse.
Je n'étais pas passé depuis pas mal de mois, mais je vois que tu es bien sûr toujours fidèle au poste. :cool:

Toutefois, ta réponse me rend bien triste... :(
Je vais donc m'atteler de suite à générer un bout de code supprimant ligne par ligne les lignes indésirables.


Merci tout de même pour ta réponse rapide.
Bonne soirée.
 

TooFatBoy

XLDnaute Barbatruc
Re : Cherche fonction supprimant lignes masquées par filtre

Merci pour cette réponse encourage pour l'avenir. ;)
J'avais fait une recherche sur ce forum mais ça ne m'avait rien trouvé.
Je vais regarder cela de plus prés.

Merci encore.
Bonne soirée.
 

JNP

XLDnaute Barbatruc
Re : Cherche fonction supprimant lignes masquées par filtre

Bonjour le fil :),
A tester
Code:
Sub test()
Dim Plage As Range, I As Long
For I = 1 To 1000
If Rows(I).Hidden = True Then
If Plage Is Nothing Then
Set Plage = Rows(I)
Else
Set Plage = Union(Plage, Rows(I))
End If
End If
Next I
Plage.Delete
End Sub
Seul petit soucis, c'est pour calculer la hauteur de plage car End(xlUp) ne fonctionne pas sur les cellules masquées :eek:...
Bonne journée :cool:
 

Efgé

XLDnaute Barbatruc
Re : Cherche fonction supprimant lignes masquées par filtre

Bonjour Marcel32, klin89, Bonjour JNP:),
Suite à ce fil, et en particulier au lien du post 19 donné par kiki89, on peux essayer ça avec la proposition de JNP:
VB:
Sub test()
Dim Plage As Range, I As Long, DerLig As Long
DerLig = Split(Worksheets("feuil1").UsedRange.Address, "$")(4)
For I = 1 To DerLig
    If Rows(I).Hidden = True Then
        If Plage Is Nothing Then
            Set Plage = Rows(I)
        Else
            Set Plage = Union(Plage, Rows(I))
        End If
    End If
Next I
Plage.Delete
End Sub
Cordialement

Edit oups, j'ai zappé l'ami JCGL :), toutes mes excuses :eek:
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Re : Cherche fonction supprimant lignes masquées par filtre

Merci pour vos réponses.

Aujourd'hui j'ai posé mon problème à un collègue qui m'a, comme vous, conseillé d'essayer de ne faire qu'une seule suppression afin d'éventuellement gagner un peu de temps.

Puis je lui ai expliqué qu'après le filtrage automatique, qui est hyper rapide puisque fait par Excel lui-même, on pouvait facilement supprimer les lignes affichées (sans toucher aux lignes masquées) avec
SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp et que par conséquent si on arrivait à faire le filtre inverse du filtre actuellement utilisé, il suffirait d'appliquer cette fonction aux lignes restant affichées après le "filtrage inverse de l'actuel" et en suite supprimer le filtrage pour qu'il ne reste que les lignes désirées.

Il m'a alors montré un truc que je qualifierai de basique, que je ne connaissais pourtant pas (shame on me !!!) : on peut modifier le filtre qui est habituellement fait sur une égalité et ainsi faire le filtrage sur une "non égalité".

Ainsi la solution est de remplacer le filtrage AutoFilter Field:=8, Criteria1:=Mon_Critere par
AutoFilter Field:=8, Criteria1:="<>" & Mon_Critere


C'était tout bête, mais il fallait le savoir.
Grâce à la mise en commun de mes connaissances et de celles de mon collègue, nous avons pu trouver la solution et enrichir nos connaissances.
De même, grâce à vous ce soir j'ai découvert Union qui, bien que "limité" à 30 arguments, risque bien de m'être fort utile dans l'avenir.


Merci à tous et bonne continuation.
:cool:
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia