J'essaie donc de parcourir une feuille de calcul dans une feuille de calcul Excel à l'aide de VBA. Je souhaite parcourir chaque ligne, puis chaque colonne et malgré le fait de googler, je ne trouve pas de façon intuitive de le faire.
Je suppose que la première cellule d'une ligne doit être remplie, sinon ce doit être la fin. Je peux appliquer cela
Mon approche actuelle consiste à parcourir les lignes, puis à essayer d'obtenir la valeur de la première cellule, mais je n'arrive pas à le comprendre. J'ai rencontré quelques questions ici et ailleurs qui utilisent des plages et autres, mais rien qui ne m'aide à écrire du code.
L'approche actuelle est la suivante:
Set sh = ActiveSheet
RowCount = 0
For Each rw In sh.Rows
'If Row.Cells(1, 1).Value = "" Then Exit For
RowCount = RowCount + 1
Next rw
MsgBox (RowCount)
Maintenant, lorsque je lance ceci, j'obtiens un nombre énorme, ce qui est faux car la table ne contient qu'environ 25 lignes. J'ai commenté la première ligne car elle ne fonctionnait pas.
Que puis-je changer dans la première ligne de la boucle For pour qu'elle se brise correctement lorsqu'elle trouve une ligne où la première cellule est vide?
Il semble que vous veniez de coder en dur la ligne et la colonne; sinon, quelques petites modifications, et je pense que vous êtes là:
Dim sh As Worksheet
Dim rw As Range
Dim RowCount As Integer
RowCount = 0
Set sh = ActiveSheet
For Each rw In sh.Rows
If sh.Cells(rw.Row, 1).Value = "" Then
Exit For
End If
RowCount = RowCount + 1
Next rw
MsgBox (RowCount)
Pour le bénéfice de ceux qui recherchent un produit similaire, voir la fiche de travail .UsedRange
,
par exemple. ? ActiveSheet.UsedRange.Rows.Count
et des boucles telles queFor Each loopRow in Sheets(1).UsedRange.Rows: Print loopRow.Row: Next
Je vais faire quelques hypothèses dans ma réponse. Je suppose que vos données commencent en A1 et qu'il n'y a pas de cellules vides dans la première colonne de chaque ligne contenant des données.
Ce code va:
Ce n'est pas une méthode rapide, mais itérera à travers chacun individuellement, comme vous l'avez suggéré.
Sub iterateThroughAll()
ScreenUpdating = False
Dim wks As Worksheet
Set wks = ActiveSheet
Dim rowRange As Range
Dim colRange As Range
Dim LastCol As Long
Dim LastRow As Long
LastRow = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row
Set rowRange = wks.Range("A1:A" & LastRow)
'Loop through each row
For Each rrow In rowRange
'Find Last column in current row
LastCol = wks.Cells(rrow, wks.Columns.Count).End(xlToLeft).Column
Set colRange = wks.Range(wks.Cells(rrow, 1), wks.Cells(rrow, LastCol))
'Loop through all cells in row up to last col
For Each cell In colRange
'Do something to each cell
Debug.Print (cell.Value)
Next cell
Next rrow
ScreenUpdating = True
End Sub