Ce tableau est fixe ou temporairement verrouillé (Erreur 10)
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
FixedArr
fixe est reçu parSomeArr
dans laNextOne
procédure, puis une tentative de redimensionnementSomeArr
est 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 Sub
Dé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,
ModArray
est un tableau dynamique au niveau du module dont le quarante-cinquième élément est passé par référence à laTest
procé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 Sub
Dans 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 X
Utilisez 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.