Extraire dernière ligne d'un filtre

  • Initiateur de la discussion Initiateur de la discussion aph
  • Date de début Date de début

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 !

A

aph

Guest
Bonjour,

Je sollicite votre aide sur mon problème

En feuil1 j'ai une base, je voudrais en feuil2 afficher les 30 dernières lignes selon le filtre exécuté en feuil1

Exemple, je désire filtrer en feuil1 le numéro 7 en colonne A. Cela doit me faire apparaître les 30 dernières lignes du filtre en feuil2

Merci d'avance !
 

Pièces jointes

Dernière modification par un modérateur:
Re : Extraire dernière ligne d'un filtre

[Bonjour aph,

Voyez le fichier joint avec cette macro :

Code:
Sub CopierDenièresLignesVisibles()
Dim nombre&, derlig&, i&, n&, P As Range
nombre = 30 'les dernières lignes à afficher
With Feuil1 'CodeName de la feuille source
  derlig = .Cells.Find("*", , xlValues, , xlByRows, xlPrevious).Row
  For i = derlig To 2 Step -1
    If Not .Rows(i).Hidden Then
      n = n + 1
      Set P = Union(IIf(P Is Nothing, .Rows(i), P), .Rows(i))
      If n = nombre Then Exit For
    End If
  Next
End With
With Feuil2 'CodeName de la feuille de restitution
  If Not P Is Nothing Then P.Copy .[A2]
  .Rows(n + 2 & ":" & .Rows.Count).Delete 'RAZ
  .Activate
End With
End Sub
A+
 

Pièces jointes

Re : Extraire dernière ligne d'un filtre

Bonjour,

bonjour Job 🙂

Une autre solution, via Filtre élaboré...

Code:
Sub Macro1()
Dim Plg As Range, PlgCrit As Range
Application.ScreenUpdating = False
With Sheets("Feuil1")
    Set Plg = .Range("$A$1:$O$" & .Cells(Rows.Count, 1).End(xlUp).Row)
    .Range("Z1") = .Range("A1"): .Range("Z2") = 7
    Set PlgCrit = .Range("Z1:Z2")
End With
With Sheets("Feuil2")
    Plg.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=PlgCrit, CopyToRange:=.Range("A1:O1")
    .Rows("2:" & .Cells(Rows.Count, 1).End(xlUp).Row - 30).Delete
End With
PlgCrit.Clear
End Sub

Bonne soirée
 
Re : Extraire dernière ligne d'un filtre

Bonsoir,

Une autre proposition

Code:
Sub essai()
Feuil1.Select
last = 1
While Cells(last, 1) <> ""
    last = last + 1
Wend
last = last - 1
nbl = 0
l2 = 2
While nbl < 30
    If Rows(last).Hidden = False Then 'masqué
        nbl = nbl + 1
        Feuil1.Rows(last).Copy Destination:=Feuil2.Rows(l2)
        l2 = l2 + 1
    End If
    last = last - 1
Wend
End Sub
 
Re : Extraire dernière ligne d'un filtre

Bonjour à tous,

HomePyrof53 : Si tu souhaites automatiser l'abonnement à une discussion à laquelle tu participes :

Capture 1.jpg

A+ à tous
 

Pièces jointes

  • Capture 1.jpg
    Capture 1.jpg
    16.5 KB · Affichages: 80
  • Capture 1.jpg
    Capture 1.jpg
    16.5 KB · Affichages: 71
Re : Extraire dernière ligne d'un filtre

Bonjour,

N'apporte rien à la discussion ; juste exprimer le très grand plaisir de voir passé en coup de vent bh².
Je n'oublie pas mon ami JC🙂 ni Job🙂 bien sûr.

A+ à tous
 
Re : Extraire dernière ligne d'un filtre

Bonsoir,

Effectivement, JB, ton code est bien plus court....

Cependant, en gain de temps, je n'en suis pas convaincu...

Pour moi, un filtre élaboré restera toujours plus rapide qu'un filtre auto.

PS, attention, on ne parle que de quelques centièmes de seconde, donc, tout est relatif...😉😉

Bonne soirée
 
Re : Extraire dernière ligne d'un filtre

Bonsoir à tous,

Pour Boisgontier : ta macro, qui copie toute la plage filtrée, posera problème s'il y a beaucoup de zones disjointes à copier.

Voir fichier joint avec filtrage sur les valeurs 1 ou 2.

Edit : en fait bug sur Excel 2003 mais pas sur Excel 2010...

A+
 

Pièces jointes

Dernière édition:
Re : Extraire dernière ligne d'un filtre

Re,

Tiens très curieux, la méthode Find de ma macro ne permet pas de trouver la dernière ligne 😕

[Edit] sur Excel 2003 du moins, car sur Excel 2010 ça fonctionne bien.

Avec la fonction Match pas de problème :

Code:
Sub CopierDernièresLignesVisibles()
Dim nombre&, derlig&, i&, n&, P As Range
nombre = 30 'les dernières lignes à afficher
With Feuil1 'CodeName de la feuille source
  'derlig = .Cells.Find("*", , xlValues, , xlByRows, xlPrevious).Row
  derlig = Application.Match(9 ^ 9, .[A:A])
  For i = derlig To 2 Step -1
    If Not .Rows(i).Hidden Then
      n = n + 1
      Set P = Union(IIf(P Is Nothing, .Rows(i), P), .Rows(i))
      If n = nombre Then Exit For
    End If
  Next
End With
With Feuil2 'CodeName de la feuille de restitution
  If Not P Is Nothing Then P.Copy .[A2]
  .Rows(n + 2 & ":" & .Rows.Count).Delete 'RAZ
  .Activate
End With
End Sub
Fichier (2).

@ bhbh : vraiment très heureux de te croiser, alors maintenant tu es à Brest, ça doit te changer de la Nouvelle-Calédonie ?

A+
 

Pièces jointes

Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour