68 votes

Comment trouver la dernière ligne contenant des données dans la feuille Excel avec une macro?

Comment trouver la dernière ligne contenant des données dans une colonne spécifique et sur une feuille spécifique?

46voto

Fionnuala Points 67259

Que diriez-vous:

  Sub GetLastRow(strSheet, strColum)
 Dim MyRange As Range
 Dim lngLastRow As Long

    Set MyRange = Worksheets(strSheet).Range(strColum & "1")

    lngLastRow = Cells(65536, MyRange.Column).End(xlUp).Row
 End Sub
 

Re Comment

Cette

   Cells.Find("*",SearchOrder:=xlByRows,SearchDirection:=xlPrevious).Row
 

Renverra le numéro de ligne de la dernière cellule, même si une seule cellule de la dernière ligne contient des données.

21voto

Jon Fournier Points 2435

Vous devriez utiliser le .End(xlup) mais au lieu d'utiliser 65536, vous voudrez peut-être utiliser:

 sheetvar.Rows.Count
 

De cette façon, cela fonctionne pour Excel 2007 qui, je crois, a plus de 65 536 lignes.

7voto

GSerg Points 33571
 function LastRowIndex(byval w as worksheet, byval col as variant) as long
  dim r as range

  set r = application.intersect(w.usedrange, w.columns(col))
  if not r is nothing then
    set r = r.cells(r.cells.count)

    if isempty(r.value) then
      LastRowIndex = r.end(xlup).row
    else
      LastRowIndex = r.row
    end if
  end if
end function
 

Usage:

 ? LastRowIndex(ActiveSheet, 5)
? LastRowIndex(ActiveSheet, "AI")
 

3voto

Dick Kusleika Points 15230
 Public Function LastData(rCol As Range) As Range    
    Set LastData = rCol.Find("*", rCol.Cells(1), , , , xlPrevious)    
End Function
 

Utilisation: ?lastdata(activecell.EntireColumn).Address

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X