Bonjour à tous,
Pour redimensionner dynamiquement les lignes d’une matrice dans mon code VBA, j’utilise l’instruction suivante :
If (ptr + 10) >= UBound(aOut, 1) Then
ReDim Preserve aOut(1 To UBound(aOut, 1) + GROWTH_FACTOR, 1 To UBound(aOut, 2))
End If
Ou GROWTH_FACTOR est une constante définie à 100, et la variable ptr, après plusieurs passages, se situe entre 92 et 98, dans ce cas.
Cependant, cette ligne :
ReDim Preserve aOut(1 To UBound(aOut, 1) + GROWTH_FACTOR, 1 To UBound(aOut, 2))
déclenche systématiquement l’erreur « L’indice n’appartient pas à la sélection ».
Voici comment la matrice aOut est initialisée :
' Initialisation de aOut avec 100 lignes et autant de colonnes que LO_DistribGains
ReDim aOut(1 To GROWTH_FACTOR, 1 To LO_DistribGains.ListColumns.Count)
ptr = 0
Debug.Print "aOut initialisé avec " & UBound(aOut, 2) & " colonnes" ' 21 Colonnes
Ensuite, j’ai inversé les indices pour permettre à Redim Preserve, qui ne redimensionne que la deuxième dimension, de fonctionner normalement en utilisant newSize dans le deuxième indice :
If (ptr + 10) >= UBound(aOut, 2) Then
newSize = UBound(aOut, 2) + GROWTH_FACTOR
If newSize > 0 Then
ReDim Preserve aOut(1 To UBound(aOut, 2), 1 To newSize)
Else
Debug.Print "Erreur : newSize n'est pas valide."
Exit Sub
End If
End If
Après avoir initialisé aOut :
' Initialisation de aOut avec un nombre initial de 100 lignes et autant de colonnes que dans LO_DistribGains
ReDim aOut(1 To LO_DistribGains.ListColumns.Count, 1 To GROWTH_FACTOR)
ptr = 0
Debug.Print "aOut initialisé avec " & UBound(aOut, 2) & " colonnes"
et voici le log obtenu :
Avant redimensionnement :
UBound(aOut, 1): 21
UBound(aOut, 2): 100
Ligne ptr d’entrée actuel : 90
GROWTH_FACTOR: 100
Ligne ptr dans 2. Section Global : 90
!!! ERREUR dans MettreAJourAOut !!!
Description : L’indice n’appartient pas à la sélection.
Numéro : 9
Ligne en cours : 90
Clé en cours :
Comment résoudre ce problème ?
Merci d’avance !