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

Résolu
bernard03 - 5 oct. 2012 à 19:45
 bernard03 - 9 oct. 2012 à 21:06
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

ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
5 oct. 2012 à 21:36
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
3
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
6 oct. 2012 à 08:25
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
3
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
8 oct. 2012 à 21:23
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
3
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
9 oct. 2012 à 14:51
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
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
9 oct. 2012 à 17:06
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
3
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
5 oct. 2012 à 21:55
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
0
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
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
6 oct. 2012 à 07:47
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
0
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
0
ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
8 oct. 2012 à 21:21
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
0
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.
0
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
0
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
0