web-dev-qa-db-fra.com

Utilisation de VBA pour attribuer une plage de valeurs de cellules à un tableau de variables

Je suis très nouveau à VBA, à supporter avec moi ici.

Je veux assigner à un ensemble de variables la valeur d'un ensemble de plages, c'est-à-dire. lancez un bref code pour simplifier ce qui suit

Dim Sample 1 as string
Sample1 = activeworksheet.range("C17").value

Dim Sample 2 as string
Sample2 = activeworksheet.range("C18").value}

etc

Suite à un tutoriel excelfunctions.net, je sais que je peux raccourcir la déclaration pour

Dim Sample(1 to 20) as a string

Mais le didacticiel le dépose là-bas (car c’est un didacticiel sur les noms), ce qui suggère de le renseigner comme suit:

sample(1)=activesheet.range("C7").value
sample(2)=activesheet.range("C7").value

etc

J'ai trouvé que la discussion ci-dessous était sur la bonne voie pour répondre à ma question, mais j'ai du mal à l'appliquer à ma situation. ( Excel VBA Array Ranges pour une boucle )

En guise de suivi, j’essaie au final d’attribuer à ces variables des valeurs à utiliser dans les procédures suivantes, plutôt que de les déclarer et de les affecter à chaque fois.

Merci! 

6
SydneyJ

Vous devriez :

  • Définir la plage que vous souhaitez récupérer des données
  • Pour chaque cellule de la plage, récupérez vos données

    dim tab() As string, cell as range, i as integer
    i = 0
    redim tab(0)
    for each cell in ActiveWorksheet.Range("C1:C20")
        tab(i) = cell
        i = i + 1
        redim preserve tab(i)
    next
    

edit: J'indente le code pour l'afficher correctement

4
Maxime Porté

Essayez quelque chose comme ça:

Sub test()
Dim sampleArr(1 To 20) As String
Dim i As Integer
Dim rng As Range, cel As Range

i = 1
Set rng = Range("C1:C20") 

For Each cel In rng
    sampleArr(i) = cel.Value
    i = i + 1
Next cel
For i = LBound(sampleArr) To UBound(sampleArr)
    Debug.Print sampleArr(i)
Next i

En outre, si vous connaissez la plage que vous souhaitez placer dans un tableau, vous pouvez simplement définir un tableau sur cette plage:

Sub test()
Dim sampleArr() As Variant
Dim i As Integer
Dim rng As Range, cel As Range

i = 1
Set rng = Range("C1:C20") ' Note, this creates a 2 Dimensional array

sampleArr = rng ' Right here, this sets the values in the range to this array.

For i = LBound(sampleArr) To UBound(sampleArr)
    Debug.Print sampleArr(i, 1) ' you need the ",1" since this is 2D.
Next i

End Sub
6
BruceWayne

De manière supplémentaire à ce qui précède, vous ne pouvez utiliser que:

Arr = ActiveWorksheet.Range("C1:C20").Value

Ensuite, vous pouvez directement utiliser:

Arr(i,1)i est compris entre C1 et C20!

0
Mohammed Almudhafar