[VBA] Sélectionner une ligne après un filtre [Résolu/Fermé]

Signaler
-
 Schtroumpf_Wiki -
Bonjour,

Je fais actuellement une appli excel qui traite des données dans un tableau de plusieurs milliers de lignes. Je dois souvent filtrer pour extraire telle ou telle ligne.
Le problème c'est qu'après un filtre, le code "Cells(3,1).Value" va me donner la valeur de la cellule A3 et non de la première cellule de la troisième ligne visible à l'écran après le filtre.

Je le faisais jusqu'à présent en bidouillant un max mais mon appli rame pas mal. Du coup je me suis dit qu'il devait y avoir un code pour directecment prendre la valeur dont j'ai besoin.

Merci pour votre aide !

2 réponses

Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 495
Bonjour,
ma question est la suivante : Pourquoi veux tu récupérer la valeur de la cellule 3ème ligne visible, et surtout comment sais tu que cette valeur est contenue dans cette cellule?
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 495
Un petit exemple de code qui te donne le numéro de la première ligne "visible" après filtre :
Sub test()
Dim DrLig As Long, Lig As Long
DrLig = Sheets("Feuil1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
For Lig = 2 To DrLig
    If Rows(Lig).Hidden = False Then
        MsgBox "première ligne visible = " & Lig
        Exit For
    End If
Next
End Sub

Pour faire simple, c'est une base de données de bobinnes de film. Je filtre la base avec un type de film précis, puis je trie les différentes bobinnes avec ce type de film par longueur. Je veux alors sélectionner les deux lignes contenant les infos sur les bobinnes ayant les deux plus petites longueurs.
C'est-à-dire sélectionner des infos sur les deux première lignes visibles à l'écran. La référence de la bobinne étant sur la première colonne, Si je tape Cells(2,1).Value va me donner la ref de la première bobinne de la base de données mais pas de celle qui est visible. Ce que je cherche, je ne sais pas si ça existe, c'est un code du genre :

CellsVisible(2, 1).Value (bon celui là ne marche pas ^^)

Voilà, j'espère avoir été assez clair

Merci !
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 495
As tu essayé mon code ci-dessus?
Sub test()
Dim DrLig As Long, Lig As Long
DrLig = Sheets("Feuil1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
For Lig = 2 To DrLig
    If Rows(Lig).Hidden = False Then
        MsgBox "première ligne visible = " & Lig
        Exit For
    End If
Next
End Sub

Après pour ta cellule suffit de l'appeler comme ceci :
Cells(Lig, 1)
Tu dis...

Effectivement ça marche ! C'est un petit plus compliqué que ce à quoi je m'attendais mais c'est déjà plus propre que ma grosse bidouille pleine de .Select partout ^^

Merci beaucoup