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

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
 

eriiic

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

Staple1600

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

alexandreb06

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

Staple1600

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

Staple1600

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

Staple1600

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

Discussions similaires

Réponses
0
Affichages
83

Statistiques des forums

Discussions
311 730
Messages
2 081 991
Membres
101 856
dernier inscrit
Marina40