En utilisant Excel (2010) VBA, j'essaie de copier (transmettre) une plage constante de cellules (dont les valeurs sont recalculées) dans un tableau. Ensuite, j'essaie de transmettre ce tableau à une nouvelle plage de cellules, juste en dessous. Après cela, je veux à nouveau copier (transmettre) les nouvelles valeurs de la plage constante dans le tableau et passer ces nouvelles valeurs à une plage directement inférieure à celle que j'ai précédemment passée.
Je sais que ce code est atroce (je suis nouveau dans les tableaux en VBA).
Sub ARRAYER()
Dim anARRAY(5) As Variant
Number_of_Sims = 10
For i = 1 To Number_of_Sims
anARRAY = Range("C4:G4")
Range("C4").Select
ActiveCell.Offset(Number_of_Sims, 0).Select
ActiveCell = anARRAY
Range("C4").Select
Next
End Sub
J'apprécie votre aide!
Je vous remercie.
Avec respect,
Jonathan
Vous êtes un peu en retrait sur quelques points, alors j'espère que les éléments suivants vous aideront.
Premièrement, vous n'avez pas besoin de sélectionner des plages pour accéder à leurs propriétés, vous pouvez simplement spécifier leur adresse, etc. Deuxièmement, sauf si vous manipulez les valeurs dans la plage, vous n'avez pas besoin de les affecter à une variante. Si vous souhaitez manipuler les valeurs, vous pouvez laisser de côté les limites du tableau tel qu'il sera défini lors de la définition de la plage.
Il est également judicieux d'utiliser Option Explicit
en haut de vos modules pour forcer la déclaration de variable.
Ce qui suit fera ce que vous recherchez:
Sub ARRAYER()
Dim Number_of_Sims As Integer, i As Integer
Number_of_Sims = 10
For i = 1 To Number_of_Sims
'Do your calculation here to update C4 to G4
Range(Cells(4 + i, "C"), Cells(4 + i, "G")).Value = Range("C4:G4").Value
Next
End Sub
Si vous voulez manipuler les valeurs dans le tableau, procédez comme suit:
Sub ARRAYER()
Dim Number_of_Sims As Integer, i As Integer
Dim anARRAY as Variant
Number_of_Sims = 10
For i = 1 To Number_of_Sims
'Do your calculation here to update C4 to G4
anARRAY= Range("C4:G4").Value
'You can loop through the array and manipulate it here
Range(Cells(4 + i, "C"), Cells(4 + i, "G")).Value = anARRAY
Next
End Sub
Pas besoin de tableau. Il suffit d'utiliser quelque chose comme ceci:
Sub ARRAYER()
Dim Rng As Range
Dim Number_of_Sims As Long
Dim i As Long
Number_of_Sims = 10
Set Rng = Range("C4:G4")
For i = 1 To Number_of_Sims
Rng.Offset(i, 0).Value = Rng.Value
Worksheets("Sheetname").Calculate 'replacing Sheetname with name of your sheet
Next
End Sub
Étant donné que vous copiez les mêmes données sur toutes les lignes, vous n'avez pas besoin de boucle. Essaye ça:
Sub ARRAYER()
Dim Number_of_Sims As Long
Dim rng As Range
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Number_of_Sims = 100000
Set rng = Range("C4:G4")
rng.Offset(1, 0).Resize(Number_of_Sims) = rng.Value
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Quand j'ai essayé votre code, j'ai eu une erreur quand je voulais remplir le tableau.
vous pouvez essayer de remplir le tableau comme ceci.
Sub Testing_Data()
Dim k As Long, S2 As Worksheet, VArray
Application.ScreenUpdating = False
Set S2 = ThisWorkbook.Sheets("Sheet1")
With S2
VArray = .Range("A1:A" & .Cells(Rows.Count, "A").End(xlUp).Row)
End With
For k = 2 To UBound(VArray, 1)
S2.Cells(k, "B") = VArray(k, 1) / 100
S2.Cells(k, "C") = VArray(k, 1) * S2.Cells(k, "B")
Next
End Sub