Sub Test_PremièreEtDernièreLigne()
Dim PremièreLigne As Long
Dim DernièreLigne As Long
Call PremièreEtDernièreLigne(ActiveSheet.Cells, PremièreLigne, DernièreLigne)
MsgBox "PremièreLigne = " & PremièreLigne & ", DernièreLigne = " & DernièreLigne
End Sub
'------------------------------------------------------------------
'Fonction de recherche de la première et dernière ligne d'une plage
'Les 2 valeurs sont retournées dans les 2 arguments ByRef
'------------------------------------------------------------------
Sub PremièreEtDernièreLigne(ByVal Plage As Range, _
ByRef PremièreLigne As Long, _
ByRef DernièreLigne As Long, _
Optional ByVal Constantes As Boolean = True, _
Optional ByVal Formules As Boolean = True)
'Si Plage non valorisée, exit
If Plage Is Nothing Then Exit Sub
With Plage
On Error Resume Next
'Si recherche sur formules
If Formules Then
With .SpecialCells(xlCellTypeFormulas)
PremièreLigne = .Areas(1).Row
DernièreLigne = .Areas(.Areas.Count).Cells(.Areas(.Areas.Count).Rows.Count).Row
End With
End If
'Si recherche sur constantes
If Constantes Then
With .SpecialCells(xlCellTypeConstants)
If PremièreLigne = 0 Then
PremièreLigne = .Areas(1).Row
Else
PremièreLigne = Application.Min(PremièreLigne, .Areas(1).Row)
End If
DernièreLigne = Application.Max(DernièreLigne, .Areas(.Areas.Count).Cells(.Areas(.Areas.Count).Rows.Count).Row)
End With
End If
On Error GoTo 0
End With
End Sub