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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 339 fois - Téléchargée 19 fois

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

Ajouter un commentaire Commentaires
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 13
5 janv. 2009 à 22:28
Salut,

tu devrais regarder un peu comment fonctionne ce site car il existe une partie appelé Codyx et qui sert a publier des codes simples qui sont comme tu le dis toi meme souvent utilisés et reutilisés. Honnetement je ne vois pas l'interet de ce code dans les sources.

A+
cs_Joh76 Messages postés 47 Date d'inscription dimanche 16 mars 2008 Statut Membre Dernière intervention 14 octobre 2009 3
5 janv. 2009 à 20:04
Oui, c'est possible.
Il y a toujours plusieurs façons d'écrire un programme et de méthodes pour exécuter une tache.
Après cela dépend où l'on veut en arriver...
cs_Frederic45 Messages postés 60 Date d'inscription vendredi 26 octobre 2007 Statut Membre Dernière intervention 30 mars 2010
5 janv. 2009 à 19:48
Bonsoir

Une autre solution :
Sub Macro1()
Dim Ligne As Long
Dim Colonne As String
Ligne = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
Colonne = ActiveCell.SpecialCells(xlCellTypeLastCell).Column 'colonne en nombre
Colonne = Chr(ActiveCell.SpecialCells(xlCellTypeLastCell).Column + 64) 'colonne en lettre
End Sub
A+
Eric
PtitLouisXIV Messages postés 4 Date d'inscription samedi 8 décembre 2007 Statut Membre Dernière intervention 5 janvier 2009
5 janv. 2009 à 18:28
Bonjour,
Il y a peut-être plus simple :
Sub Macro1()
Dim Ligne As Long
Dim Colonne As String
Selection.SpecialCells(xlCellTypeLastCell).Activate
Ligne = ActiveCell.Row
Colonne = Left$(ActiveCell.Address(0, 0), (ActiveCell.Column < 27) + 2)
End Sub
Non ?

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.