web-dev-qa-db-fra.com

Comment déterminer la dernière ligne utilisée dans VBA, y compris les espaces vides entre

Comment puis-je déterminer la dernière ligne d'une feuille Excel, y compris des lignes vides au milieu?

Avec cette fonction:

Function ultimaFilaBlanco(col As String) As Long        
        Dim lastRow As Long
        With ActiveSheet
            lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, col).End(xlUp).row
        End With            
        ultimaFilaBlanco = lastRow          
End Function

Et ces données:

Row 1 : Value
Row 2 : Value
Row 3 : Value
Row 4 : Value
Row 5 : Value
Row 6 : White
Row 7 : Value
Row 8 : Value
Row 9 : Value
Row 10  : White
Row 11  : White
Row 12  : White
Row 13  : Value
Row 14  : White

La fonction retourne 5, et il me faut 13. Tu as une idée de comment faire?

Tu es vraiment proche. Essayez d’utiliser un grand numéro de ligne avec End(xlUp)

Function ultimaFilaBlanco(col As String) As Long

        Dim lastRow As Long
        With ActiveSheet
            lastRow = ActiveSheet.Cells(1048576, col).End(xlUp).row
        End With

        ultimaFilaBlanco = lastRow

End Function
14
fbonetti

Le meilleur moyen d'obtenir le numéro de la dernière ligne utilisée est:

ActiveSheet.UsedRange.Rows.Count Pour le feuille actuelle.

Worksheets("Sheet name").UsedRange.Rows.Count pour un feuille spécifique.

Pour obtenir le numéro de la dernière colonne utilisée:

ActiveSheet.UsedRange.Columns.Count Pour le feuille actuelle.

Worksheets("Sheet name").UsedRange.Columns.Count pour un feuille spécifique.

J'espère que ça aide.

Abdo

59
ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row -1

Court. Sûr. Vite. Renverra la dernière ligne non vide, même s'il y a des lignes vides en haut de la feuille ou ailleurs. Fonctionne également pour une feuille vide (Excel signale 1 ligne utilisée sur une feuille vide afin que l'expression soit 1). Testé et fonctionnel sur Excel 2002 et Excel 2010.

19
manuel

J'utilise les éléments suivants:

lastrow = ActiveSheet.Columns("A").Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row

Il trouvera la dernière ligne d'une colonne spécifique. Si vous voulez la dernière ligne utilisée pour la colonne any, alors:

lastrow = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
16
Sid Holland
LastRow = ActiveSheet.UsedRange.Rows.Count
3
jtorreon

Le problème est le "en tant que chaîne" dans votre fonction. Remplacez-le par "comme double" ou "aussi longtemps" pour le faire fonctionner. De cette façon, cela fonctionne même si la dernière ligne est plus grande que le "grand nombre" proposé dans la réponse acceptée.

Donc cela devrait marcher

Function ultimaFilaBlanco(col As double) As Long        
    Dim lastRow As Long
    With ActiveSheet
        lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, col).End(xlUp).row
    End With            
    ultimaFilaBlanco = lastRow          
End Function
3
user1965813

Si la feuille contient une zone inutilisée en haut, UsedRange.Rows.Count n'est pas la ligne maximale.

C'est le numéro de ligne maximum correct.

maxrow = Sheets("..name..").UsedRange.Rows(Sheets("..name..").UsedRange.Rows.Count).Row
1
JHK

Bien en dehors de tous ceux mentionnés, il existe plusieurs autres moyens de trouver la dernière ligne ou colonne dans une feuille de calcul ou une plage spécifiée.

Function FindingLastRow(col As String) As Long

  'PURPOSE: Various ways to find the last row in a column or a range
  'ASSUMPTION: col is passed as column header name in string data type i.e. "B", "AZ" etc.

   Dim wks As Worksheet
   Dim lstRow As Long

   Set wks = ThisWorkbook.Worksheets("Sheet1") 'Please change the sheet name
   'Set wks = ActiveSheet   'or for your problem uncomment this line

   'Method #1: By Finding Last used cell in the worksheet
   lstRow = wks.Range("A1").SpecialCells(xlCellTypeLastCell).Row

   'Method #2: Using Table Range
   lstRow = wks.ListObjects("Table1").Range.Rows.Count

   'Method #3 : Manual way of selecting last Row : Ctrl + Shift + End
   lstRow = wks.Cells(wks.Rows.Count, col).End(xlUp).Row

   'Method #4: By using UsedRange
   wks.UsedRange 'Refresh UsedRange
   lstRow = wks.UsedRange.Rows(wks.UsedRange.Rows.Count).Row

   'Method #5: Using Named Range
   lstRow = wks.Range("MyNamedRange").Rows.Count

   'Method #6: Ctrl + Shift + Down (Range should be the first cell in data set)
   lstRow = wks.Range("A1").CurrentRegion.Rows.Count

   'Method #7: Using Range.Find method
   lstRow = wks.Column(col).Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row

   FindingLastRow = lstRow

End Function

Note: Veuillez utiliser une seule des méthodes ci-dessus, car elle justifie votre énoncé de problème.

Faites attention au fait que la méthode Find ne voit pas le formatage de cellule mais uniquement des données, par conséquent, recherchez xlCellTypeLastCell si seules les données sont importantes et non le formatage. En outre, les cellules fusionnées (ce qui doit être évité) peuvent vous donner des résultats inattendus car elles vous donneront le numéro de ligne de la première cellule et non la dernière cellule. dans les cellules fusionnées.

1
jainashish
ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.count).row

ActiveSheet peut être remplacé par WorkSheets(1) ou WorkSheets("name here")

0
18C