Partager via


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 par SomeArr dans la NextOne procédure, puis une tentative de redimensionnement SomeArrest 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 à la Test 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.