XL 2016 Trouver le numéro de ligne après un filtre

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 !

alexandreb06

XLDnaute Nouveau
Bonjour à tous j'ai besoin de votre aide sur un problème que je n'arrive pas à résoudre.

Apres avoir filtré, j'aimerais connaitre le numéro de ligne, de la 5ème valeur affiché (5 étant une variable)

Avec ce cette boucle j'arrive à mon résultat, mais quand je recherche une ligne >1000 la recherche commence à prendre beaucoup de temps
VB:
Ligne = Range("A" & premligne, "A" & derligne).SpecialCells(xlCellTypeVisible).Row 
For J = 1 To 5 - 1
Ligne = Range("A" & Ligne + 1, "A" & derligne).SpecialCells(xlCellTypeVisible).Row
 Next J
MsgBox Ligne

Il doit y avoir un moyen plus rapide d'arriver au résultat mais je cale dessus depuis plusieurs heures
 
Bonjour,

tu pourrais t'ajouter une colonne masquée (ici en B) avec :
VB:
=SI(SOUS.TOTAL(3;A2);MAX($B$1:B1)+1;0)
La colonne A doit être une colonne entièrement remplie.
B numérote les lignes affichées. Plus qu'à y rechercher 5 avec un .Find
eric
 
Bonjour le fil

Si ca peut servir,voila ce que je viens de pondre dans mon VBE (après un petit kawa)
VB:
Sub Test()
With ActiveSheet.AutoFilter.Range.Offset(1)
MsgBox "Ligne: " & .SpecialCells(12)(5).Row, 48, "5" '5ième
MsgBox "Ligne: " & .SpecialCells(12)(2).Row, 48, "2" '2ième
End With
End Sub
PS: test OK sur mon PC.
 
De mon coté je continu d'avancer sur le sujet, voici mon code qui me permet d'avoir le bon résultat est assez rapidement

VB:
Sub test()
Set Plage = [_filterdatabase].Offset(1).Resize(, 1)
Set Plage = Plage.Resize(Plage.Count - 1).SpecialCells(xlCellTypeVisible)
premligne = Plage.Row 'Premiere ligne
nbr = 1000 'Nbr de ligne à sélectionné
Application.ScreenUpdating = False

For i = 1 To nbr

While Rows(premligne).Hidden = True
ActiveCell.Offset(1, 0).Select
premligne = premligne + 1
Wend

premligne = premligne + 1
Next i

MsgBox premligne - 1

Application.ScreenUpdating = True
End Sub

Mais bon beaucoup de lignes pour demander pas grand chose lol.
Je pense qu'on peut avoir le même résultat avec un code beaucoup plus court.
 
Re

Ca fonctionne sur mon fichier test
Mais comme je ne comprends pas l'utilité de la chose, je me contenterai de prendre un second kawa 😉
(Parce les numéros de lignes, on les voit bleuis quand le filtre est appliqué, non ? ( tout à gauche de l'écran)

EDITION: Bien le bonjour, eriiiic 😉
 
Re

Si tu veux copier le résultat d'une plage filtrée, utilises le filtre élaboré (qui justement permet la chose)
Logiquement, dans une plage filtrée, toutes les valeurs affichées correspondent au critère du filtre
Donc pourquoi en garder une partie et en exclure une autre?
 
Re

Dans ce cas, on pourrait aussi envisager la piste du TCD
Et quid de ma suggestion du filtre élaboré?
Je viens de faire ce petit test sur 2000 lignes en VBA avec le filtre élaboré (ou AdvancedFilter en VBA)
VB:
Sub Macro1()
Sheets("Feuil2").Select
Sheets("Feuil1").Range("A1:C2000").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("Feuil1").Range("E1:E2"), CopyToRange:=Range("A1"), _
        Unique:=False
End Sub
 
- 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

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
665
Réponses
3
Affichages
590
Réponses
7
Affichages
802
Retour