Instruction ReDimReDim statement

Utilisée au niveau de la procédure pour réaffecter l’espace de stockage des variables de tableau dynamique.Used at the procedure level to reallocate storage space for dynamic array variables.

SyntaxeSyntax

ReDim [ Preserve ] varname ( indices ) [ As type ], [ varname ( indices ) [ As type ]].. .ReDim [ Preserve ] varname ( subscripts ) [ As type ], [ varname ( subscripts ) [ As type ]] . . .


La syntaxe de l’instruction ReDim est composée des éléments suivants :The ReDim statement syntax has these parts:

ÉlémentPart DescriptionDescription
PreservePreserve Facultatif.Optional. Mot clé utilisé pour conserver les données d'un tableau existant lorsque vous modifiez la taille de la dernière dimension.Keyword used to preserve the data in an existing array when you change the size of the last dimension.
varnamevarname Obligatoire.Required. Nom de la variable ; respecte les conventions d'affectation des noms de variables standard.Name of the variable; follows standard variable naming conventions.
subscriptssubscripts Obligatoire.Required. Dimensions d’une variable tableau ; jusqu'à 60 dimensions différentes peuvent être déclarées.Dimensions of an array variable; up to 60 multiple dimensions may be declared. L’argument subscripts utilise la syntaxe suivante :The subscripts argument uses the following syntax:

[ lowerTo ] upper [ , [ lowerTo ] upper ] . . .[ lowerTo ] upper [ , [ lowerTo ] upper ] . . .

Lorsque pas explicitement indiqué dans lower, la limite inférieure d’une matrice est contrôlée par la déclaration** Option Base **.When not explicitly stated in lower, the lower bound of an array is controlled by the Option Base statement. La limite inférieure correspond à zéro si aucune instructionOption Base n’est présente.The lower bound is zero if no Option Base statement is present.
typetype Facultatif.Optional. Type de données de la variable ; peut être octets, booléenne, entier, Long, devise, Unique, Double, décimal (pas actuellement pris en charge), Date, chaîne (pour les chaînes de longueur variable), chaîne longueur (pour les chaînes de longueur fixe), objet, variante, un type défini par l’utilisateur, ou d’une type d’objet.Data type of the variable; may be Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (not currently supported), Date, String (for variable-length strings), String length (for fixed-length strings), Object, Variant, a user-defined type, or an object type.

Utilisez une clause As type distincte pour chaque variable définie.Use a separate As type clause for each variable being defined. Pour une variante contenant une matrice, type décrit le type de chaque élément de la matrice, sans modifier la variante d’un autre type.For a Variant containing an array, type describes the type of each element of the array, but doesn't change the Variant to some other type.

RemarquesRemarks

L’instructionReDim est utilisée pour dimensionner ou redimensionner un tableau dynamique qui a déjà été formellement déclaré à l’aide d’une instruction Private, Public, ou Dim avec des parenthèses vides (sans indice de dimension).The ReDim statement is used to size or resize a dynamic array that has already been formally declared by using a Private, Public, or Dim statement with empty parentheses (without dimension subscripts).

Vous pouvez utiliser l’instructionReDim à plusieurs reprises pour modifier le nombre des éléments et des dimensions dans une matrice.You can use the ReDim statement repeatedly to change the number of elements and dimensions in an array. En revanche, il n’est pas possible de déclarer un tableau d’un type de données et d’utiliser plus tard l’instruction ReDim pour modifier le type de données du tableau, sauf si celui-ci est contenu dans une variable Variant.However, you can't declare an array of one data type and later use ReDim to change the array to another data type, unless the array is contained in a Variant. Si le tableau est contenu dans une variablede type Variant, le type des éléments peut être modifié à l’aide de la clause As type , sauf si vous utilisez le mot clé Preserve , auquel cas aucune modification du type de données n’est autorisée.If the array is contained in a Variant, the type of the elements can be changed by using an As type clause, unless you are using the Preserve keyword, in which case, no changes of data type are permitted.

Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner que la dernière dimension du tableau, et vous ne pouvez pas du tout modifier le nombre de dimensions.If you use the Preserve keyword, you can resize only the last array dimension and you can't change the number of dimensions at all. Par exemple, si votre tableau n’a qu’une seule dimension, vous pouvez la redimensionner étant donné que c’est la dernière et unique dimension.For example, if your array has only one dimension, you can resize that dimension because it is the last and only dimension. En revanche, si votre tableau a au moins deux dimensions, vous pouvez modifier la taille de la dernière dimension uniquement, tout en conservant le contenu du tableau.However, if your array has two or more dimensions, you can change the size of only the last dimension and still preserve the contents of the array.

L’exemple suivant montre comment augmenter la taille de la dernière dimension d’un tableau dynamique sans effacer aucune des données qu’il contient.The following example shows how you can increase the size of the last dimension of a dynamic array without erasing any existing data contained in the array.

ReDim X(10, 10, 10) 
. . . 
ReDim Preserve X(10, 10, 15) 

De même, lorsque vous utilisez l’argument Preserve, vous pouvez changer la taille du tableau uniquement en modifiant sa limite supérieure ; la modification de sa limite inférieure génère une erreur.Similarly, when you use Preserve, you can change the size of the array only by changing the upper bound; changing the lower bound causes an error.

Si vous apportez une matrice considérablement plus petite qu’elle ne l’était, les données dans les éléments supprimés seront perdues.If you make an array smaller than it was, data in the eliminated elements will be lost. Si vous transmettez un tableau à une procédure par référence, vous ne pourrez pas redimensionner le tableau au sein de la procédure.If you pass an array to a procedure by reference, you can't redimension the array within the procedure.

Lorsque les variables sont initialisées, une variable numérique est initialisée à 0, une chaîne de longueur variable est initialisée à une chaîne vide ("") et une chaîne de longueur fixe est remplie de zéros.When variables are initialized, a numeric variable is initialized to 0, a variable-length string is initialized to a zero-length string (""), and a fixed-length string is filled with zeros. Les variables de type Variant sont initialisées à la valeur Empty.Variant variables are initialized to Empty. Chaque élément d’une variable de type défini par l’utilisateur est initialisé comme s’il s’agissait d’une variable distincte.Each element of a user-defined type variable is initialized as if it were a separate variable.

Une variable qui fait référence à un objet doit être affectée à un objet existant à l’aide de l’instruction** définir ** avant de pouvoir être utilisé.A variable that refers to an object must be assigned an existing object by using the Set statement before it can be used. Jusqu'à ce qu’elle soit affectée à un objet, la variable objetdéclarée a la valeur spéciale ** rien**, ce qui indique qu’elle ne fait pas référence à une instance précise d’un objet.Until it is assigned an object, the declared object variable has the special value Nothing, which indicates that it doesn't refer to any particular instance of an object.

L’instructionReDim agit comme une instruction déclarative si la variable qu’elle déclare n’existe pas au niveau module ou niveau de la procédure.The ReDim statement acts as a declarative statement if the variable it declares doesn't exist at the module level or procedure level. Si une autre variable portant le même nom est créée par la suite, même si vous utilisez une plus large étendue, ReDim fera référence à la dernière variable et n’entraînera pas nécessairement d’erreur de compilation, même si Option Explicite est appliquée.If another variable with the same name is created later, even in a wider scope, ReDim will refer to the later variable and won't necessarily cause a compilation error, even if Option Explicit is in effect. Pour éviter ce type de conflit, n’utilisez pas ReDim en tant qu’instruction déclarative, mais uniquement pour redimensionner des tableaux.To avoid such conflicts, ReDim should not be used as a declarative statement, but simply for redimensioning arrays.

Notes

Pour redimensionner un tableau contenu dans une variable Variant, vous devez déclarer explicitement la variable Variant avant de redimensionner le tableauTo resize an array contained in a Variant, you must explicitly declare the Variant variable before attempting to resize its array.

ExempleExample

Cet exemple utilise l’instruction ReDim pour affecter et réaffecter de l’espace de stockage à des variables de tableau dynamique. This example uses the ReDim statement to allocate and reallocate storage space for dynamic-array variables. Elle suppose que la valeur de Option Base est 1.It assumes the Option Base is 1.

Dim MyArray() As Integer ' Declare dynamic array. 
Redim MyArray(5) ' Allocate 5 elements. 
For I = 1 To 5 ' Loop 5 times. 
 MyArray(I) = I ' Initialize array. 
Next I 


L'instruction suivante redimensionne le tableau et efface les éléments.The next statement resizes the array and erases the elements.

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
 MyArray(I) = I ' Initialize array. 
Next I 


L’instruction suivante redimensionne le tableau sans effacer les éléments.The following statement resizes the array but does not erase elements.

Redim Preserve MyArray(15) ' Resize to 15 elements. 

Voir aussiSee also

Assistance et commentairesSupport and feedback

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ?Have questions or feedback about Office VBA or this documentation? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.