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
 

eriiiic

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
Merci staple,
Mais quand je fait le test (dans le fichier ci joint) si je lui demande la ligne de la 4eme valeur filtré il me donne comme résultat une ligne masquée
 

Fichiers joints

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?
 

alexandreb06

XLDnaute Nouveau
Parce que la BD peut faire jusqu'a 800 000 lignes, et j'envoie une partie (1000 lignes) sur un autres fichier pour pouvoir y travailler dessus
 

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
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas