Extraire dernière ligne d'un filtre

aph

XLDnaute Nouveau
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

  • test4.xlsx
    666.7 KB · Affichages: 64
  • test4.xlsx
    666.7 KB · Affichages: 73
  • test4.xlsx
    666.7 KB · Affichages: 66
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Afficher les dernières lignes filtrées(1).zip
    220.2 KB · Affichages: 25

Cousinhub

XLDnaute Barbatruc
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
 

homepyrof53

XLDnaute Occasionnel
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
 

JCGL

XLDnaute Barbatruc
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: 75
  • Capture 1.jpg
    Capture 1.jpg
    16.5 KB · Affichages: 65
G

Guest

Guest
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
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Extraire dernière ligne d'un filtre

Bonsoir,


Code:
Sub Transfert()
  Sheets.Add
  Sheets("feuil1").Range("_FilterDataBase").SpecialCells(xlCellTypeVisible).Copy [A1]
  Rows("2:" & [A65000].End(xlUp).Row - 30).EntireRow.Delete
End Sub

Cf Copie zone filtrée

JB
 

Pièces jointes

  • Copie de test4 (2).zip
    236.3 KB · Affichages: 23
Dernière édition:

Cousinhub

XLDnaute Barbatruc
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
 

job75

XLDnaute Barbatruc
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

  • Transfert(1).zip
    317.2 KB · Affichages: 29
  • Transfert(1).zip
    317.2 KB · Affichages: 26
  • Transfert(1).zip
    317.2 KB · Affichages: 28
Dernière édition:

job75

XLDnaute Barbatruc
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 :confused:

[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

  • Transfert(2).zip
    320.6 KB · Affichages: 32
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 584
Messages
2 089 995
Membres
104 331
dernier inscrit
xdream