Trouver la dernière ligne d'une feuille

Hugues

XLDnaute Impliqué
Bonjour Le forum

Je souhaiterais connaitre le code VBA afin de connaître la dernière ligne dans une feuille sachant que je ne peux pas prendre comme référence une colonne précise.
Certaine fois la dernière donnée est dans la colonne A, d'autre fois en B, ... .
La dernière colonne pouvant être renseignée est la H.

Avez vous une idée sur le sujet ?

Merci par avance,

Hugues
 

Dranreb

XLDnaute Barbatruc
Re : Trouver la dernière ligne d'une feuille

Bonjour.
Je m'oriente de plus en plus vers l'utilisation généralisée de cette fonction rendant un objet Range commençant à la cellule spécifiée. Elle n'englobe pas les lignes et colonnes ne comportant que des chaînes vides. Elle rend Nothing si aucune cellule n'est renseignée davantage.
VB:
Function PlageÀPartirDe(ByVal PlageDép As Range) As Range
Dim F As Worksheet, NbL As Long, NbC As Long, V As Variant, N As Long
Set F = PlageDép.Worksheet
With F.UsedRange: NbL = .Row + .Rows.Count - PlageDép.Row
   NbC = .Column + .Columns.Count - PlageDép.Column: End With
    If NbC < 1 Then GoTo CEstToutVide
Do: If NbL < 1 Then GoTo CEstToutVide
   V = PlageDép.Item(NbL, 1).Resize(, NbC).Value
   For N = 1 To NbC: If V(1, N) <> "" Then Exit Do
      Next N
   NbL = NbL - 1: Loop
Do: V = PlageDép.Item(1, NbC).Resize(NbL).Value
   For N = 1 To NbL: If V(N, 1) <> "" Then Exit Do
      Next N: If NbC = 1 Then GoTo CEstToutVide
   NbC = NbC - 1: Loop
Set PlageÀPartirDe = PlageDép.Resize(NbL, NbC)
Exit Function
CEstToutVide: Set PlageÀPartirDe = Nothing
End Function
Cordialement.
 

Efgé

XLDnaute Barbatruc
Re : Trouver la dernière ligne d'une feuille

Bonjour Hugues, Dranreb,
Une proposition:
VB:
Sub Test4()
Dim X As Long, LstRow As Long
For i = 1 To 8
    X = Sheets("Feuil2").Cells(Rows.Count, i).End(xlUp).Row
    If X > LstRow Then LstRow = X
Next i
MsgBox LstRow
End Sub
Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Trouver la dernière ligne d'une feuille

Pour connaître simplement la dernière ligne avec ma solution c'est, bien sûr:
VB:
With PlageÀPartirDe(Feuil1.[B2]): LstRow = .Row + .Rows.Count - 1: End With
Remarque: ma solution ne recherche pas systématiquement depuis la ligne 65536 une cellule renseignée et ce dans plusieurs colonnes. Avec un peu de chances elle se termine tout de suite s'il ne traine pas de bordures au delà de la partie qu'on veut. De plus, elle écarterait de la plage rendue les lignes qui ne contiendraient que des formules rendant des chaînes vides.
À+
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Trouver la dernière ligne d'une feuille

laetitia90,
je dois dire que l'idée est interessante, surtout si on prend UsedRange plutôt que Cells.
Mais je ne comprend pas bien pourquoi What:="*" ne s'arrête pas sur les cellules renseignées d'une chaine vide. "*"ça veut bien dire n'importe quoi non ?
Par ailleurs extrait de l'aide:
Remarques
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.
Quelle sont donc les valeurs de la boîte à appliquer et donc à préciser ?
Mais il y a quelque chances que je base ma prochaine version de ma PlageÀPartirDe sur ce Find, bien qu'il ne fournisse pas directement la dernière colonne.
À+
 

Pierrot93

XLDnaute Barbatruc
Re : Trouver la dernière ligne d'une feuille

Bonjour à tous,

perso j'utilise ceci, en renseignant les différents arguments de la méthode :
Code:
MsgBox = Cells.Find("*", Range("IV65536"), xlValues, , 1, 2, 0).Row

bonne journée
@+
 

laetitia90

XLDnaute Barbatruc
Re : Trouver la dernière ligne d'une feuille

rebonjour Pierrot:):)
si tu l'ecris comme cela tu te limites a excel 2003
Code:
MsgBox Cells.Find("*", Range("IV65536"), xlValues, , 1, 2, 0).Row
de plus je crois pas que cela tiens compte des cellules vide par formule a voir
pour l'ami Dranreb j'ai pas de reponse sorry:(:(
 

Pierrot93

XLDnaute Barbatruc
Re : Trouver la dernière ligne d'une feuille

Re,
@Laetitia:):)

compatible 2007 :
Code:
With Application
    MsgBox Cells.Find("*", Cells(.Rows.Count, .Columns.Count), xlValues, , 1, 2, 0).Row
End With

si formule ne renvoie rien dans la cellule, "find" ne renverra pas le numéro de la ligne en question....
 

Pierrot93

XLDnaute Barbatruc
Re : Trouver la dernière ligne d'une feuille

Re,

A noter si tu veux tout de même le numéro de la dernière ligne comportant une forumule ne renvoyant rien, il faut changer l'argument "lookin" :
Code:
With Application
    MsgBox Cells.Find("*", Cells(.Rows.Count, .Columns.Count),  xlFormulas, , 1, 2, 0).Row
End With
 

juju59

XLDnaute Nouveau
Re : Trouver la dernière ligne d'une feuille

Bonjour,

Moi j'utilise ceci

Code:
     i = 1
    Do While (Sheets("Feuil2").Cells(i, 3) <> "")
    i = i + 1
   Loop

i représente le numéro de la 1er ligne vide et dans ce cas ci à la 3em colonne

Tu peux effectuer la même chose pour d'autres colonne et tu gardes le i le plus grand.

Cordialement
 

Efgé

XLDnaute Barbatruc
Re : Trouver la dernière ligne d'une feuille

Re
Cette foi j'ai bien vérifié...:eek:
VB:
Sub Derniere_ligne()
Dim LstRw As Long, LstCol As Long, LstCel As String
With Sheets("Feuil1")
    LstRw = .Cells.Find("*", Cells(Rows.Count, Columns.Count), xlValues, , 1, 2, 0).Row
    LstCol = .Cells.Find("*", Cells(Rows.Count, Columns.Count), xlValues, , 2, 2, 0).Column
    LstCel = .Cells(LstRw, LstCol).Address
End With
MsgBox "Ligne: " & LstRw & vbLf & _
        "Colonne: " & LstCol & vbLf & _
        "Addresse: " & LstCel
End Sub
A noter, comme l'a dit Pierrot, qu'il suffit de changer xlValues par xlFormulas pour prendre en compte les formules.
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 623
Messages
2 090 277
Membres
104 479
dernier inscrit
Guengant