web-dev-qa-db-fra.com

Excel VBA - Passer une ligne de valeurs de cellules à un tableau, puis coller ce tableau à une référence relative de cellules

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 

8

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
9
CuberChase

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
3
chuff

É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
2
chris neilsen

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
0
Moosli