Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
Tous les tableaux ne peuvent pas être redimensionnés. Même les tableaux spécifiquement déclarés comme dynamiques et les tableaux dans les variablesVariant sont parfois verrouillés temporairement. Causes et solutions pour cette erreur :
Vous avez essayé d’utiliser ReDim pour modifier le nombre d’éléments d’un tableau de taille fixe. Par exemple, dans le code suivant, le tableau
FixedArrfixe est reçu parSomeArrdans laNextOneprocédure, puis une tentative de redimensionnementSomeArrest effectuée :Sub FirstOne Dim FixedArr(25) As Integer ' Create a fixed-size array and NextOne FixedArr() ' pass it to another procedure. End Sub Sub NextOne(SomeArr() As Integer) ReDim SomeArr(35) ' Error 10 occurs here. '. . . End SubDéfinissez le tableau d’origine comme dynamique plutôt que fixe en le déclarant avec ReDim (si le tableau est déclaré dans une procédure), ou en le déclarant sans spécifier le nombre d’éléments (si le tableau est déclaré au niveau du module).
Vous avez essayé de redimensionner un tableau dynamique au niveau du module, dans lequel un élément a été passé en tant qu’argument à une procédure. Par exemple, dans le code suivant,
ModArrayest un tableau dynamique au niveau du module dont le quarante-cinquième élément est passé par référence à laTestprocédure :Dim ModArray () As Integer ' Create a module-level dynamic array. '. . . Sub AliasError() ReDim ModArray (1 To 73) As Integer Test ModArray(45) ' Pass an element of the module-level ' array to the Test procedure. End Sub Sub Test(SomeInt As Integer) ReDim ModArray (1 To 40) As Integer ' Error occurs here. End SubDans ce cas, vous n’avez pas besoin de passer un élément du tableau au niveau du module car il est visible dans toutes les procédures dans le module. En revanche, si un élément est passé, le tableau est verrouillé pour empêcher la libération de la mémoire pour le paramètre de référence dans la procédure, ce qui entraînerait un comportement imprévisible lors du retour de la procédure.
Vous avez essayé d’attribuer une valeur à une variable Variant contenant un tableau, mais la variable Variant est actuellement verrouillée. Par exemple, si votre code utilise une boucle For Each...Next pour une itération sur une variante contenant un tableau, le tableau est verrouillé lors de l’entrée dans la boucle, puis libéré à la fin de la boucle :
SomeArray = Array(9,8,7,6,5,4,3,2,1) For Each X In SomeArray SomeArray = 301 ' Causes error since array is locked. Next XUtilisez For...Next plutôt qu’une boucle For Each...Next pour l’itération. Lorsqu’un tableau est l’objet d’une boucle For Each...Next, vous pouvez lire le tableau, mais vous ne pouvez pas écrire dedans.
Pour plus d’informations, sélectionnez l’élément en question et appuyez sur F1 (sur Windows) ou AIDE (sur Macintosh).
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette 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.