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 13 446 fois - Téléchargée 17 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

PtitLouisXIV
Messages postés
4
Date d'inscription
samedi 8 décembre 2007
Statut
Membre
Dernière intervention
5 janvier 2009
-
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 ?
cs_Frederic45
Messages postés
60
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
30 mars 2010
-
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
cs_Joh76
Messages postés
47
Date d'inscription
dimanche 16 mars 2008
Statut
Membre
Dernière intervention
14 octobre 2009
2 -
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...
bigfish_le vrai
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
8 -
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+

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.