J'ai ce code qui va peupler un tableau
Sub rangearray()
Dim arr() As Variant
Dim Rng As Range
Dim myCell As Range
Dim i As Integer
Set Rng = ActiveSheet.Range("G10:G14")
For Each myCell In Rng
ReDim Preserve arr(i)
arr(i) = myCell
i = i + 1
Next myCell
ActiveSheet.Range("H10:H14") = arr()
End Sub
Ici vous pouvez voir que les valeurs dans la fenêtre de surveillance sont ce qui a été chargé dans
Sauf que lorsque j'ajoute le tableau au classeur, il ne fait que coller le premier élément du tableau.
Est-il possible de coller tout le tableau dans la feuille de calcul sans avoir à parcourir le tableau en boucle?
Après avoir jeté un coup d'oeil au lien de Sorceri, j'ai modifié en code pour utiliser la fonction .Transpose, donc mon code modifié ressemble maintenant à ceci:
Sub rangearray()
Dim arr() As Variant
Dim Rng As Range
Dim myCell As Range
Dim i As Integer
Set Rng = ActiveSheet.Range("A1:A5")
For Each myCell In Rng
ReDim Preserve arr(i)
arr(i) = myCell
i = i + 1
Next myCell
ActiveSheet.Range("B1:B5") = WorksheetFunction.Transpose(arr)
End Sub
vous voudrez utiliser la fonction de feuille de calcul transpose http://msdn.Microsoft.com/en-us/library/office/ff196261.aspx
Voir ci-dessous. Vous devez l'assigner à la valeur de la plage
Sub rangearray()
Dim arr() As Variant
Dim Rng As Range
Dim myCell As Range
Dim i As Integer
Set Rng = ActiveSheet.Range("A1:A5")
For Each myCell In Rng
ReDim Preserve arr(i)
arr(i) = myCell
i = i + 1
Next myCell
ActiveSheet.Range("B1:B5").Value = WorksheetFunction.Transpose(arr)
End Sub
Comme je l'ai mentionné dans mon commentaire ci-dessus, vous n'avez pas besoin d'un tableau pour effectuer l'action que vous essayez d'exécuter, mais si vous voulez uniquement une solution de tableau, vous n'avez pas besoin de parcourir le long chemin parcouru pour le remplir en boucle. . Attribuez directement la valeur de la plage au tableau. Cela va créer un tableau 2D que vous n'avez pas besoin de transposer.
Sub rangearray()
Dim arr
Dim Rng As Range
With ActiveSheet
Set Rng = ActiveSheet.Range("G10:G14")
arr = Rng.Value
.Range("H10").Resize(UBound(arr, 1)).Value = arr
End With
End Sub
Juste assigné Rng à arr puis remis à la feuille. cela fonctionne pour moi dans Excel 2016
Sub rangearray()
Dim arr() As Variant
Dim Rng As Range
Dim myCell As Range
Dim i As Integer
Set Rng = ActiveSheet.Range("A1:A5")
arr = Rng
ActiveSheet.Range("B1:B5").Resize(5) = arr
End Sub