Afficher toujours les 20 dernières lignes en partant du bas sur un filtre élabor [Résolu]

Signaler
-
 bernard03 -
Bonjour,

Je suis confronté au problème suivant:
lorsque j'utilise un filtre élaboré, je désire afficher à l'écran les 20 dernières lignes du fichier, quelque soient le nombre de lignes.
En VBA j'ai essayé avec offset(20,0) en partant de la colonne "A"
Offset me décale de 20 lignes, par contre il intègre les lignes cachées. De ce fait, je me retrouve avec un nombre inférieur de lignes que ce que je demande.
Merci pour votre aide

Si quelqu'un peut m'indiquer comment joindre un fichier d'exemple, son aide est la bienvenue


Bernard

13 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour, bernard03,
Si tu es ici, c'est que tu es un développeur.
Un développeur réfléchit.
Quel est donc ton problème, sinon de savoir jusqu'à quel 20ème rang aller en ne comptant pas les rangs cachés ...
Moi (c'est mon habitude), je veux (et y tiens) la réflexion.
Je te propose donc de regarder ce que fait le petit test suivant, de réfléchir, de l'analyser, de le comprendre, de l'adapter à ton cas :
Dim total_visible As Long, a As Range, jusquou As Long
For Each a In Range("A2:A50").SpecialCells(xlCellTypeVisible).Areas
  total_visible = total_visible + a.Rows.Count
Next
jusquou = Range("A2:A50").Row + 20 + Range("A2:A50").Rows.Count - total_visible
MsgBox jusquou


Désolé d'avance, mais : si cela ne te "dit rien", ne compte pas sur moi pour t'expliquer (j'ai perdu mes bûchettes) ce tout petit calcul arithmétique.
Bonne chance.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Maintenant : si tu préfères les méthodes "bourrin" et éviter le calcul des bûchettes, en avant la boucle ! ===>>
Dim total_visible As Long, i As Long, toto As Long
  For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
    If Rows(i).Hidden False Then toto toto + 1
    If toto >= 20 Then Exit For
  Next
  MsgBox "tu dois donc ne garder qu'à partir de la ligne " & i

Attention, toutefois ... il te faut y ajouter une condition, hein ... Allez : devine laquelle (fastoche).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Un petit coup de pouce, va ===>> La ligne 0 ne saurait exister.
Tu ne vois toujours pas ?
Bonne nuit

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bien!
Sinon, voilà également une méthode plus orthodoxe et toujours exacte (sans expression conditionnelle à ajouter) :
Dim i As Long, toto As Long
  For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1
    If Rows(i).Hidden False Then toto toto + 1
    If toto >20 Then i i - 1: Exit For
  Next
  MsgBox "tu dois donc ne garder qu'à partir de la ligne " & i + 1


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Tu as mal testé ou mal compris !
C'est TOUJOURS i + 1, qu'il faut scroller . Dans tous les cas, avec ce dernier code !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
J'espère simplement que tu ne vas pas venir me demander comment, avec ces éléments, partir de la dernière ligne pour arriver à la -20 lignes visibles au-dessus, hein ... Car là ... achète alors des bûchettes.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Bernard

Merci de t'être occupé de mon cas. Par contre ça ne fonctione pas du tout. Si j'adapte le résultat qu'il me donne avec un offset(-jusquou;0), le résultat ne correspond pas à ce que l'on cherche.
Merci quand même
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
avec un offset(-jusquou;0)

Cette seule phrase montre que tu as tout "compris" !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Bernard

Je te remercie de ton aide, ça fonctionne parfaitement quelque soit le nombre de lignes de départ.
Par contre tu parlais au départ de développeur. Je ne me considère pas du tout en tant que tel, j'essaie simplement de créer quelques applis, souvent avec beaucoup de recherche et de nombreuses heures devant l'écran.
merci encore pour ton aide
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Pas de quoi, ami, mais :
ça fonctionne parfaitement quelque soit le nombre de lignes de départ.

Faux !
Et je te rappelle ce que je t'ai dit plus haut :
Attention, toutefois ... il te faut y ajouter une condition, hein ... Allez : devine laquelle (fastoche).

T'as pas deviné, ni réfléchi !
C'est plutôt décourageant.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Bernard

Bonjour et merci.
Effectivement j'avais entré comme formule:
if i<1 then i =1 .
C'est dailleurs pour cette raison que losque je tappe :
ActiveWindow.ScrollRow = i
que le programme ne plante pas.
Je pensai que tu me parlais d'une autre formule concernant hidden (cela fait partie des nombreux mots-clés de VBA que je ne connai pas du tout et dont j'ignore l'existence)
Merci encore.
Bernard

J'ai testé cette autre méthode.
Tant que le nombre de lignes visibles est supérieure à 20 pas de problème.
Par contre si je fait le même test avec comme résultat du filtre 13 lignes + la ligne de titre, le programme plante sur :
ActiveWindow.ScrollRow = i
Je préfère donc la 1ère méthode qui ne plante dans aucun cas de figure.
Merci encore
Bernard

Effectivement j'avais mal compris, ça fonctionne parfaitement.
En te remerciant encore pour le temps passé, et en constatant (mais je le savais déjà), que j'ai encore beaucoup de travail dans mes programmes, et aussi beaucoup d'ignorance.
Cordialement