Recherche dernier n° de ligne d'un tableau Excel filtré

Résolu
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011 - 24 août 2011 à 18:57
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011 - 25 août 2011 à 20:14
Bonjour,

Je travaille sur un tableau Excel qui se présente de la façon suivante:

1 T1 T2 T3
2 12 28 A
3 45 37 D
4 58 44 E
5 45 24 C
6 67 87 C

Si j'applique un filtre sur la colonne A (par exemple valeur 45) j'obtiens donc ceci:

1 T1 T2 T3
3 45 37 D
5 45 24 C
7

Maintenant si j'utilise Range("A65536").End(xlUp).Row pour connaitre la dernière ligne de mon tableau, j'obtiens la valeur 5 soit la dernière ligne affichée et non 6 (numéro réel de la dernière ligne).

Je pense qu'une solution doit exister sans être obligé de supprimer le filtre. Si vous pouviez m'aider, merci.

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 222
25 août 2011 à 04:41
Ah.
Je comprends. Tu voulais simplement me dire pourquoi tu ne pouvais pas toujours relever à l'avance de manière sure le dernier n° de ligne avant filtrage.
Bon.
Je te suggère alors pour l'instant ceci :
titi = Range("A1:A" & Rows.Count).SpecialCells(xlCellTypeConstants).Address
derlig = Val(Mid(titi, InStrRev(titi, "$") + 1))
MsgBox derlig


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 222
24 août 2011 à 19:08
Bonjour,
Comprends pas le problème.
Si c'est vraiment là cxe que tu cherches : détermine donc d'ABORD la dernière ligne PUIS applique ton filtre !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
24 août 2011 à 19:58
Voilà le problème:

Sur ma sheet Excel, j'ai une zone où sont listées toutes les données. Toutes les cellules de cette zone sont verrouillées et ne peuvent être modifiées que par le code.

J'ai sur cette même sheet, une zone de saisie (non verrouillée) + un bouton de commande qui permettent d'ajouter les données saisies (après vérification de leur validité) dans ma zone de données (dernière ligne + 1).

Si l'utilisateur clique par mégarde sur le bouton de commande alors qu'un filtre est appliqué, les nouvelles données écraseront des données déjà existantes soit ligne 6 dans l'exemple de mon précédent message.

Le filtre peut être appliqué à tout moment suivant la volonté ou les besoins de l'utilisateur.

J'espère avoir été assez clair.
Encore merci.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 222
24 août 2011 à 22:01
Ce que tu nous dis maintenant n'a rien à voir avec ce qui a été exprimé précédemment !
T'en rends-tu bien compte ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

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

Posez votre question
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
24 août 2011 à 23:16
Dans mon premier message, j'évoquais le problème que je rencontrais pour connaitre le N° de la dernière ligne d'un tableau Excel lorsqu'un filtre était appliqué.

A partir du moment où ce problème est résolu, tout le reste ne me pose aucun problème.
Toute la partie vérification et ajout dans la liste des données est déjà en place et fonctionne correctement (sauf évidemment le cas évoqué).

Dans mon 2ème message, j'expliquais les tenant et aboutissant du tableau Excel, et surtout pourquoi je désirais connaître ce fameux n° de ligne.
En effet, l'écrasement des données s'est déjà produit suite au N° de ligne "erroné" renvoyé par End(xlUp) et je voudrais éviter que çà ne se reproduise.

Donc si vous pouviez m'aider, j'en serais plus que ravi.
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
25 août 2011 à 07:22
Bonjour,

Je viens de tester tes lignes de code et ça me semble tout simplement parfait.

Je te suggère alors pour l'instant ceci :

Est-ce à dire que tu peux me proposer encore mieux?

Je vais enfin pouvoir rectifier mon code pour une meilleure sécurité.

En définitive, je trouve pour ma part l'utilisation de End(xlUp) pas très fiable.

Ceci dit, merci beaucoup et peut-être à bientôt.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 222
25 août 2011 à 07:34
Est-ce à dire que tu peux me proposer encore mieux?

Je n'en sais à ce stade rigoureusement rien.
La seule chose que je sais avec certitude (connaissant mon caractère et ma curiosité), est que je vais m'obstiner à chercher si d'autres mécanismes ne pourraient pas être utilisés.
Si j'en trouve d'autres (ce qui n'est pas forcément acquis), je te les ferai connaître.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 222
25 août 2011 à 07:42
Et comme cela va toujours mieux après un bon café, ===>>>
essaye :
derlig = UsedRange.Row + UsedRange.Rows.Count - 1
MsgBox derlig

Je n'en cherche pas d'autres, car celle-ci me parait assez simple d'utilisation.
Bonne journée.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 222
25 août 2011 à 07:55
Attention, cependant :
Ce dernier code sera tout-à-fait adapté dans ton cas actuel.
N'en fais pas pour autant une astuce à utiliser dans tous les cas de figure. Surtout pas.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
25 août 2011 à 08:27
Merci beaucoup pour toutes ces recherches.

Je n'ai pas le temps de tester pour l'instant. Boulot oblige.

Je verrai ça ce soir et je te tiens au courant.

Bonne journée à toi aussi.

Super sympa.
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
25 août 2011 à 20:14
Je viens d'essayer ta 2ème solution.

Ca ne fonctionne pas correctement et pour cause.
J'ai des cellules vides en contenu mais qui comportent bordures et couleur de fond sur plusieurs lignes. Elles font donc partie de UsedRange.

J'ai aussi essayé avec SpecialCells(xlCellTypeLastCell).Row mais le résultat est identique.

Tout ça n'est pas bien grave. Je vais adopter ta première proposition qui elle, fonctionne impeccablement.

Merci encore et bonne soirée.
0
Rejoignez-nous