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
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
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
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.
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)
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?
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