'----------------------------------------------------------------------
'Calcul de la dernière ligne non vide d'une colonne avec fonction Match
'DernièreLigne = DernièreLigneEnColonne(ActiveSheet.Columns(1))
'IgnoreNullStringConstant = Ignore les valeurs de chaine vide
' en tant que valeurs constantes
'IgnoreNullStringFormula = Ignore les valeurs de chaine vide
' en tant que valeurs de formules
'----------------------------------------------------------------------
Function DernièreLigneEnColonne(ByVal Colonne As Range, _
Optional IgnoreNullStringConstant As Boolean = False, _
Optional IgnoreNullStringFormula As Boolean = False) As Long
Const ChaineMax As String = "zzzzzzzzzzzzzzzzzzzz"
Const NombreMax As Double = (2 ^ 53 - 1) * 2 ^ 971
Dim Cel As Range
If Not Colonne Is Nothing Then
With Application
DernièreLigneEnColonne = .Max(.IfError(.Match(ChaineMax, Colonne.Columns(1), 1), 0), _
.IfError(.Match(NombreMax, Colonne.Columns(1), 1), 0))
End With
'Ignorer les cellules dont la valeur constante ou formule est une chaine vide
If IgnoreNullStringConstant Or IgnoreNullStringFormula Then
Do While DernièreLigneEnColonne > 0
Set Cel = Colonne.Parent.Cells(DernièreLigneEnColonne, Colonne.Column)
'Ne pas grouper les tests (cas VarType(Cel.Value) = vbError)
If VarType(Cel.Value) <> vbString Then Exit Do
If Len(Cel.Value) > 0 Then Exit Do
If Not (IgnoreNullStringFormula And Len(Cel.Formula) > 0) _
And Not (IgnoreNullStringConstant And Len(Cel.Formula) = 0) Then Exit Do
'Cellule contenant une chaine vide
DernièreLigneEnColonne = DernièreLigneEnColonne - 1
Loop
End If
End If
End Function
'-------------------------------------------------------------
'Calcul de la dernière colonne non vide d'une ligne par Match
'DernièreColonne = DernièreColonneEnLigne(ActiveSheet.Rows(1))
'IgnoreNullStringConstant = Ignore les valeurs de chaine vide
' en tant que valeurs constantes
'IgnoreNullStringFormula = Ignore les valeurs de chaine vide
' en tant que valeurs de formules
'-------------------------------------------------------------
Function DernièreColonneEnLigne(ByVal Ligne As Range, _
Optional IgnoreNullStringConstant As Boolean = False, _
Optional IgnoreNullStringFormula As Boolean = False) As Long
Const ChaineMax As String = "zzzzzzzzzzzzzzzzzzzz"
Const NombreMax As Double = (2 ^ 53 - 1) * 2 ^ 971
Dim Cel As Range
If Not Ligne Is Nothing Then
With Application
DernièreColonneEnLigne = .Max(.IfError(.Match(ChaineMax, Ligne.Rows(1), 1), 0), _
.IfError(.Match(NombreMax, Ligne.Rows(1), 1), 0))
End With
'Ignorer les cellules dont la valeur constante ou formule est une chaine vide
If IgnoreNullStringConstant Or IgnoreNullStringFormula Then
Do While DernièreColonneEnLigne > 0
Set Cel = Ligne.Parent.Cells(Ligne.Row, DernièreColonneEnLigne)
'Ne pas grouper les tests (cas VarType(Cel.Value) = vbError)
If VarType(Cel.Value) <> vbString Then Exit Do
If Len(Cel.Value) > 0 Then Exit Do
If Not (IgnoreNullStringFormula And Len(Cel.Formula) > 0) _
And Not (IgnoreNullStringConstant And Len(Cel.Formula) = 0) Then Exit Do
'Cellule contenant une chaine vide
DernièreColonneEnLigne = DernièreColonneEnLigne - 1
Loop
End If
End If
End Function