ReDim Preserve

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilbert
Le #18710431
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"
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





stefdestroy
Le #18711251
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
michdenis
Le #18711391
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)
Publicité
Poster une réponse
Anonyme