Je suis sûr que cette fonction est intégrée à une de ces fonctions (on me l'a peut-être déjà dit par le passé), mais je me gratte la tête pour m'en souvenir.
Comment puis-je parcourir chaque ligne d'une plage multi-colonnes à l'aide d'Excel VBA? Tous les tutoriels que j'ai recherchés ne semblent que mentionner le fait de travailler dans une plage unidimensionnelle ...
Dim a As Range, b As Range
Set a = Selection
For Each b In a.Rows
MsgBox b.Address
Next
Quelque chose comme ça:
Dim rng As Range
Dim row As Range
Dim cell As Range
Set rng = Range("A1:C2")
For Each row In rng.Rows
For Each cell in row.Cells
'Do Something
Next cell
Next row
Je suis tombé sur ça et j'ai pensé que je proposerais ma solution. En général, j'aime bien utiliser la fonctionnalité intégrée d'attribution d'une plage à un tableau multi-dim (je suppose que c'est également le programmeur JS en moi).
J'écris souvent le code comme ceci:
Sub arrayBuilder()
myarray = Range("A1:D4")
'unlike most VBA Arrays, this array doesn't need to be declared and will be automatically dimensioned
For i = 1 To UBound(myarray)
For j = 1 To UBound(myarray, 2)
Debug.Print (myarray(i, j))
Next j
Next i
End Sub
L'affectation de plages à des variables est un moyen très puissant de manipuler des données dans VBA.
Dans Loops, je préfère toujours utiliser la classe Cells
, en utilisant la méthode de référence R1C1, comme ceci:
Cells(rr, col).Formula = ...
Cela me permet de rapidement et facilement boucle sur une Plage de cellules facilement:
Dim r As Long
Dim c As Long
c = GetTargetColumn() ' Or you could just set this manually, like: c = 1
With Sheet1 ' <-- You should always qualify a range with a sheet!
For r = 1 To 10 ' Or 1 To (Ubound(MyListOfStuff) + 1)
' Here we're looping over all the cells in rows 1 to 10, in Column "c"
.Cells(r, c).Value = MyListOfStuff(r)
'---- or ----
'...to easily copy from one place to another (even with an offset of rows and columns)
.Cells(r, c).Value = Sheet2.Cells(r + 3, 17).Value
Next r
End With