Vba excel fonction pour déterminer la dernière ligne d'une colonne ou plusieurs

Contenu du snippet

Détermine le numéro de la dernière ligne d'une colonne ou plusieurs colonne en les scrutant une à une pour ne garder la cellule la plus éloignée de TOUTES les versions d'Excel.

Pour plus de détails voir les commentaires du code.

Source / Exemple :


' Recherche du numéro de la dernière ligne (vide) du tableau en partant de la ligne en dessous du titre s'il y a
' Feuille: nom de la feuille. Attention pas celui de l'onglet!!!
' Cellules: mettre entre guillemets Ex:"A2" ou "A2:D2" si A1 et le titre du tableau
' Ex: Feuil2.Range("F2").Offset(Derniere_Ligne(Feuil2, "F2")).Value ("F1" est le titre du tableau)
Public Function Derniere_Ligne(Feuille As Worksheet, Cellules As String)

' Déclaration d'une variable contenant le numéro de la ligne de départ
Dim Ligne_Depart As Long
' Variable d'itération
Dim a As Integer
' Variable contenant le numéro de la dernière ligne de la feuille de calcul
' en fonction de la version de excel (2007 dernière cellule=1048576 alors que 2003=65536)
Dim Fin As Long
' Variable contenant la lettre de la première colonne
Dim PremCol As String
' Variable contenant la lettre de la dernière colonne
Dim DernCol As String
' variable contenant la lettre de la celllule temporaire
Dim TempCol As String
' variable utilisé si cellules contient plusieurs cellules
Dim Premiere As Boolean
'initialisation
Premiere = True
' Test pour rechercher "Fin"
On Error Resume Next
Fin = Feuille.Range("a1048576").Row
If Err <> 0 Then
    Fin = Feuille.Range("a65536").Row
    Err = 0
End If
On Error GoTo 0

' Découpage du contenu de Ligne_Titre pour ne retenir que le nombre de la première cellule (si A1:C1 retient 1)
For a = 1 To Len(Cellules)
    Select Case Mid(Cellules, a, 1)
        Case Is = ":"
        ' Si c'est le premier caractère: mauvaise saisie dans le programme
        If a = 1 Then
            MsgBox "Fonction Derniere_Ligne: Cellules erronées...", vbCritical
            End
        End If
        ' sinon la dernière cellule va être donné
        Premiere = False
        Case Is = IsNumeric(Mid(Cellules, a, 1))
        ' Si c'est un chiffre enregistre dans Ligne_Tire
        If Premiere Then Ligne_Depart = Ligne_Depart & Mid(Cellules, a, 1)
        Case Is <> IsNumeric(Mid(Cellules, a, 1))
        If Premiere Then
            PremCol = PremCol & Mid(Cellules, a, 1)
        Else
            DernCol = DernCol & Mid(Cellules, a, 1)
        End If
    End Select
Next a
    
TempCol = PremCol

' si cellules contient plusieurs cellules, cherche le numéro de la ligne la +
' éloignée en cas de cellule vide
If Premiere = False Then
    For a = Asc(PremCol) To Asc(DernCol)
        If Feuille.Range(TempCol & Fin).End(xlUp).Row < Feuille.Range(Chr(a) & Fin).End(xlUp).Row _
            Then TempCol = Chr(a)
    Next a
End If
' Affecte le numéro de la dernière ligne à Derniere_Linge
    If Feuille.Range(TempCol & Fin).End(xlUp).Row - Ligne_Depart < 0 Then
        Derniere_Ligne = 0
    Else
        Derniere_Ligne = Feuille.Range(TempCol & Fin).End(xlUp).Row - Ligne_Depart
    End If
End Function

Conclusion :


Facilite les nouvelles saisies d'un tableau d'une feuille.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.