Bonjour,
Y aurait-il des personnes qui pourraient me confirmer que ça marche ?
Je confirme mais je suppose que tu l'as testée déjà mais pour ma part, je préfère cette syntaxe (dans un bloc With..End..With) plus simple à lire comme dans l'exemple ci-dessous.
1 2 3 4 5
| Dim FirstOfRowFilter As Long
With Range("dBase")
FirstOfRowFilter = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Row
End With
MsgBox "La première ligne filtrée est " & FirstOfRowFilter |
Et également d'autres qui pourraient m'expliquer exactement le fonctionnement de la commande.
Extrait de l'aide en ligne
Range.SpecialCells, méthode
La méthode SpecialCells d'un objet Range renvoie un objet Range qui représente toutes les cellules correspondant au type et à la valeur spécifiés
Syntaxe
expression.SpecialCells(Type, Value)
expression Variable qui représente un objet Range.
donc
Range("dBase").SpecialCells(xlCellTypeVisible)
Renvoie un objet Range représentant les cellules visibles de la plage nommée dBase
la propriété Row, renvoie la première ligne de cet objet or comme la première ligne de cette plage de données filtrée contient les étiquettes de colonnes, elle ne répond pas aux critères du filtre et est donc visible.
Ce qui fait que Row renverrait 1.
C'est la raison pour laquelle on doit ajouter la propriété Offset avec comme valeur de l'argument RowOffset le chiffre 1 afin de se déplacer d'une ligne sur la plage de données visible.
La prochaine ligne visible est donc bien la première des lignes filtrées
.Offset(1).Resize(.Rows.Count - 1)
Et pour être complet, on ajoute la propriété Resize pour enlever une ligne de trop suite au décalage de une ligne d'Offset
CQFD
Partager