Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ReDim Preserve

3 réponses
Avatar
garnote
Bonjour,

Comme ça, c'est correct :

Sub Qui_ne_signifie_rien()
Dim x()
For i = 1 To 20
ReDim Preserve x(1 To i)
x(i) = Int(500 * Rnd())
Next i
End Sub

Mais comme je veux transférer mon tableau dans une plage,
il me semble que mon tableau doit avoir deux dimensions.
J'ai donc essayé :
ReDim Preserve x(1 To i,1 to 1)
pour à la fin utiliser :
Range(Cells(1, 1), Cells(i - 1, 1)).Value = x

Mais ça bogue !
Peut-on redimpréserver un tableau à deux dimensions
et si oui, comment ?

Serge

3 réponses

Avatar
Gilbert
Bonjour,

Si tu cherches dans l'aide tu trouves ça :

Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner que la
dernière dimension du tableau. Vous ne pouvez en aucun cas modifier le
nombre de dimensions. Par exemple, si votre tableau n'a qu'une dimension,
vous pouvez la modifier puisqu'il s'agit de la dernière et seule dimension.
Toutefois, si le tableau compte plusieurs dimensions, seule la taille de la
dernière dimension est modifiable si vous souhaitez préserver le contenu du
tableau.

--
Cordialement,

Gilbert


"garnote" a écrit dans le message de news:

Bonjour,

Comme ça, c'est correct :

Sub Qui_ne_signifie_rien()
Dim x()
For i = 1 To 20
ReDim Preserve x(1 To i)
x(i) = Int(500 * Rnd())
Next i
End Sub

Mais comme je veux transférer mon tableau dans une plage,
il me semble que mon tableau doit avoir deux dimensions.
J'ai donc essayé :
ReDim Preserve x(1 To i,1 to 1)
pour à la fin utiliser :
Range(Cells(1, 1), Cells(i - 1, 1)).Value = x

Mais ça bogue !
Peut-on redimpréserver un tableau à deux dimensions
et si oui, comment ?

Serge





Avatar
stefdestroy
Bonjour,

Pour un tableau à une dimension, voici pour récupérer les données s oit
dans une colonne, soit dans une ligne.

Cordialement,
StephD

Sub Qui_ne_signifie_rien()
Dim x()
Dim i#
For i = 1 To 20
ReDim Preserve x(1 To i)
x(i) = Int(500 * Rnd())
Next i
[A1].Resize(UBound(x)) = Application.Transpose(x) 'à partir de
A1 dans la colonne A
[B1].Resize(, UBound(x)).Value = x 'à partir de B1 dans la
ligne 1
End Sub
Avatar
michdenis
1) Redim Preserve : c'est quand tu ne connais pas d'avance
le nombre d'items que ton tableau aura à l'avance

Sinon, quand tu le connais, tu utilise seulement ceci :
Déclaration de la variable dans le haut de la procédure
dim X()

Et dans ta procédure quand tu as évalué la limite supérieur
qu'aura ton tableau
Redim X( 1 to 20) 'tu peux utiliser une variable à la place de 20

Et dans la boucle, tu n'as qu'à faire ceci :
for a = 1 to 20
X(a) = "La valeur"
next

Un tableau à une dimension : dimension 1 ligne
donc ton tableau se copiera sur une ligne ...
range("A1").resize(,Ubound(x)) = x 'Ne pas oublier la virgule

Pour le copier en colonne
range("A1").resize(Ubound(x)) =application.Transpose(x)