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.
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.