Der. Lig réelle

herve62

XLDnaute Barbatruc
Supporter XLD
Re
Il y a qq années j'ai fait une appli ou j'avais eu besoin de pointer à la dernière ligne comme on le fait souvent avec end(XLup) etc
Mais le Hic c'est que avec des formules préparées sur x lignes cela ne fonctionne pas
Il me semble que c'est ici ? (plus sûr) que j'avais eu l'astuce : la Fonction Getderlig
Je viens de la reprendre pour un fichier et ... cela ne marche pas ??
Si quelqu'un sait ... je suis en train de modifier les paramètres de specialcells mais rien !!
LMerci
 

Pièces jointes

  • Classeur1.xlsm
    16.2 KB · Affichages: 28

phlaurent55

Nous a quittés en 2020
Repose en paix
Bonjour Hervé,

Ce code boucle sur la colonne A (en remontant) et donne le numéro de la ligne pour laquelle une valeur a été trouvée en colonne A
Les cellules vides et les cellules contenant des formules sont ignorées

Code:
For i = 200 To 1 Step -1
If IsNumeric(Cells(i, 1)) = True And Cells(i, 1) <> "" Then
MsgBox ("Dernière ligne " & i)
Exit Sub
End If
Next i

à+
Philippe
 

Dranreb

XLDnaute Barbatruc
Bonjour.
J'utilise couramment ces fonctions pour trouver un objet Range représentant une plage allant d'une cellule spécifiée à la dernière renseignée de plus qu'un texte vide.
VB:
Function PlgUti(ByVal PlageDép As Range, Optional ByVal PlagExam As Range = Nothing, _
   Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
Dim LMax As Long, CMax As Long, NbL As Long, NbC As Long
On Error GoTo RienTrouvé
If PlagExam Is Nothing Then Set PlagExam = PlageDép.Worksheet.UsedRange
LMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
CMax = PlagExam.Find("*", PlagExam.Cells(1, 1), xlValues, xlWhole, xlByColumns, xlPrevious).Column
On Error GoTo 0
NbL = LMax - PlageDép.Row + 1: If NbL < LMin Then NbL = LMin
NbC = CMax - PlageDép.Column + 1: If NbC < CMin Then NbC = CMin
If NbL < 1 Or NbC < 1 Then GoTo CEstToutVide
Set PlgUti = PlageDép.Resize(NbL, NbC)
Exit Function
RienTrouvé: Resume CEstToutVide
CEstToutVide: Set PlgUti = Nothing
End Function
Function ColUti(ByVal PlageDép As Range, Optional ByVal LMin As Long, Optional ByVal CMin As Long) As Range
Set ColUti = PlgUti(PlageDép, Intersect(PlageDép.Worksheet.UsedRange, PlageDép.EntireColumn), LMin, CMin)
End Function
 

Lolote83

XLDnaute Barbatruc
Salut HERVE62, PHLAURENT55,
Le code donné par Hervé62 me donne dernière ligne = 20 car c'est bien sur cette ligne que la dernière formule est inscrite.
Le code donné par PhLaurent55 me donne dernière ligne = 1 car c'est bien comme le dit PhLaurent55 "Les cellules vides et les cellules contenant des formules sont ignorées".
Je suis sous XL2016.
Pour moi ton code fonctionne
En ce qui me concerne, j'ai 4 méthode qui me donne la dernière ligne
Code:
Sub DerLigDerCol()
    'Methode 1
        xDerLig1 = Range("A65000").End(xlUp).Row
        xDerCol1 = Range("IV1").End(xlToLeft).Column
    'Methode 2
        xDerLig2 = Cells(Cells.Rows.Count, 1).End(xlUp).Row
        xDerCol2 = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
    'Methode 3
        xDerLig3 = Cells.Find("*", , , , xlByRows, xlPrevious).Row
        xDerCol3 = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
    'Méthode 4
        xDerLig4 = ActiveSheet.UsedRange.Rows.Count
        xDerCol4 = ActiveSheet.UsedRange.Columns.Count
End Sub
@+ Lolote83
 

herve62

XLDnaute Barbatruc
Supporter XLD
Le code donné par Hervé62 me donne dernière ligne = 20 car c'est bien sur cette ligne que la dernière formule est inscrite.
alors pourquoi comme sur l'image j'ai une formule de recopie de nom jusque 1000
et que avec la fonction Getderligtexte cela me donne bien 16 ??
Je l'ai déjà re utilisé , mais là aujourd'hui , ça ne marche plus ??? c'est pas normal !!
 

Pièces jointes

  • dlig.jpg
    dlig.jpg
    113.6 KB · Affichages: 32

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 870
dernier inscrit
Dethomas