Récupérer le numéro de la dernière ligne non vide

Bonjour Forum,

Tout est dans le titre : je souhaite récupérer dans une cellule le numéro de la dernière ligne non vide d'une feuille, mais je ne sais pas comment faire...

Quelqu'un pourrait-il m'aider ?

Merci !

Bonjour,

Par formule ou par macro ?

Par macro, pas le plus simple, mais permet la portabilité du fichier sous les différentes versions d'Excel :

Dim DernLigne As Long 
DernLigne = Range("A" & Rows.Count).End(xlUp).Row

En remplaçant le A par la colonne souhaitée.

Par formule, il faudra attendre qu'un "pro" passe par là

Cordialement,

Merci pour ta réponse en 5 minutes chrono !

Effectivement, je préférerais une formule, mais à défaut, une macro fera l'affaire.

Bonjour,

Si tu cherche la dernière ligne de la colonne A par exemple, alors tu peut mettre ce code dans un module et l'affecter à un bouton.

Sub Derniereligne()
MsgBox Range("A" & Rows.Count).End(xlUp).Row
End Sub

Si tu à télécharger Morefunc, alors la formule suivante:

=EQUIV(DERCELL(A:A);A:A;0)

Cdt

Bonjour,

pour la colonne "A" çà semble fonctionner, les puristes corrigerons

=MAX(EQUIV(9^9;A:A;1);EQUIV("zzz";A:A;1))

Bonne journée

Claude

Merci à tous les 2 pour vos contributions.

@ gestionnaire_rh :

Je préfère éviter une macro affectée à un bouton, pour ne pas avoir à cliquer pour rafraichir le calcul.

Y a-t-il un moyen pour que la macro s’exécute automatiquement (par exemple, à chaque fois qu’on ajoute ou on supprime une ligne) sans avoir à cliquer sur un bouton ?

Sinon, malheureusement, quand j’essaie de charger Morefunc, ça beugue (msg : « Fichier inaccessible »).

@dubois :

La formule me renvoie une erreur #NOM ? (je suppose à cause du « zzz »)…

Pour que la macro s'exécute automatiquement, tu peux très bien la déclencher lors d'une procédure évènementielle sur un changement sur la feuille de type :

Private Sub Worksheet_Change(ByVal Target As Range)

' ton code

End Sub

Après si tu ne veux pas que cela se déclenche lors de tous les changements, tu peux très bien définir une plage précise :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range(taplage)) Is Nothing And Target.Count = 1 Then
     ' ton code
end if

End Sub

Cordialement,

Bonjour,

voilà j'ai adapter la formule de notre ami dubois:

=MAX(SIERREUR(EQUIV(9^9;A:A;1);0);SIERREUR(EQUIV("zzz";A:A;1);0))

Cordialement

Gestionnaire_rh

Merci de persévérer à m'aider.

Ta formule me renvoie une erreur #NOM?

Je suppose que ça vient de SIERREUR() qui n'est pas une fonction répertoriée sur mon Excel 2003....

Il me semble que la fonction SIERREUR() n'est disponible qu'à partir d'Excel 2010 voir 2007 mais pas avant.

Peut-être en feintant avec un SI(ESTERREUR()) ?

RE,

désolais pour cette erreur, mais celle ci doit fonctionner:

=SI(MAX(EQUIV(9^9;A:A;1);0)>MAX(EQUIV("zzz";A:A;1));MAX(EQUIV(9^9;A:A;1));MAX(EQUIV("zzz";A:A;1)))

Cdt

Gestionnaire_rh

Merci pour tes réponses.

Pour la formule avec SIERREUR(), j'ai essayé avec :

=MAX(SI(ESTERREUR(EQUIV(9^9;A:A;1));0);SI(ESTERREUR(EQUIV("zzz";A:A;1));0))

Je n'ai plus de message d'erreur, mais le résultat est invariablement 0...

Pour ta proposition de 11h24, j'obtiens une erreur #N/A

J'avoue ne pas comprendre la base de la méthode avec EQUIV(), donc je ne sais pas trop comment analyser les raisons de l'échec.

Et la macro évènementielle non ?

Bonjour tou(te)s,

Avec une formule VBA c'est automatique

dans le module de la feuille coller

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    [C2] = Range("A1").SpecialCells(xlCellTypeLastCell).Row
    Application.EnableEvents = True
End Sub

Adapter C2 à la cellule où tu veux..

A+

Merci.

Ça fonctionne impec quand on ajoute des données.

...en revanche, si on en supprime, la compteur reste bloqué à la valeur maximale atteinte jusque-là.

Je ne sais pas comment y remédier.

Bon cela sera ma dernière intervention sur ce post vu qu'apparement je parle dans le vide :

Cela marche très bien avec dans la macro :

=Range("A" & Rows.Count).End(xlUp).Row

comme je l'ai proposé dès le départ...

Cordialement.

Merci Zirab.

Mon problème est que je ne sais pas insérer ton code dans une macro qui marche...

Zirak a écrit :

Pour que la macro s'exécute automatiquement, tu peux très bien la déclencher lors d'une procédure évènementielle sur un changement sur la feuille de type :

Private Sub Worksheet_Change(ByVal Target As Range)

' ton code

End Sub

Sinon en modifiant le code de lermite qui ne t'allait pas :

    Private Sub Worksheet_Change(ByVal Target As Range)
        Application.EnableEvents = False
        [C2] = Range("A" & Rows.Count).End(xlUp).Row
        Application.EnableEvents = True
    End Sub

Et quand tu ne sais pas l'intégrer, dis le simplement, ce n'est pas une honte

Cordialement,

gloub a écrit :

Merci.

Ça fonctionne impec quand on ajoute des données.

...en revanche, si on en supprime, la compteur reste bloqué à la valeur maximale atteinte jusque-là.

Je ne sais pas comment y remédier.

Pour ça il n'y a rien à faire, il faut sauver le classeur et le réouvrir, c'est un bug d'Excel connu. il garde la dernière ligne en mémoire même si ont la supprime.

A+

@lermite : merci pour ta réponse.

Comme Zirak m'a fourni une solution sans bug d'Excel, donc je l'adopte !

Mais merci de m'avoir aidé.

@Zirak : merci, ça marche !

Sinon détrompe-toi, ce n'est pas la honte de ne pas savoir qui m'a orienté vers les formules (au minimum, mon pseudo m'en préserve), c'est juste que je maîtrise mieux les formules que le vba.

Dernier truc, dans une des feuilles où je veux mettre en oeuvre ton code, il y a déjà une macro qui fait beuguer ton code.

Tu pourrais m'aider à les rendre compatibles ?

Merci !!!

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 8 Then

With Target

Select Case Len(.Value) - Len(Replace(.Value, Chr(10), ""))

Case 1

.Font.Size = 7

Case 2

.Font.Size = 5

Case 1

.Font.Size = 7

End Select

End With

End If

End Sub

Rechercher des sujets similaires à "recuperer numero derniere ligne vide"