REDIM sans Douleur
Comment "Redim" toutes les dimensions d'un array en VB.
Limitations
En Visual Basic, un array dynamique multidimentionnel ne peut avoir que sa dernière dimension modifée.
E.g.:
Dim arr1D() as String
Dim arr2D() as String
Redim arr1D(1 to 5)
Redim arr2D(1 to 5, 5 to 10)
' attendre qu'un ange passe
Redim arr1D(1 to 25)
Redim arr2D(1 to 5, 5 to 20)
' jusque là ça va
Redim arr2D(1 to 15, 5 to 20)
' rien ne va plus !
TRUC
Utiliser cette fonction. Adapter à vos besoins, bien sur.
Dim arr1D() as String
' faire le Dim en deux coups permet d'avoir un array dynamique
Redim arr1D(1 to 5)
' avant le 'call', arr1D a une dimension
EasyRedim arr1D
' après le 'call', arr1D a deux dimensions
Private Sub EasyRedim(ByRef arr() As String)
Dim arrSecond() as String
Dim nLo As Integer, nHi As Integer
Dim i As Integer, j As Integer
' reinitialiser
arrSecond = Split("", "")
nLo = LBound(arr)
nHi = UBound(arr)
' noter le '+ 5' qui redimensionne la
' première dimension
ReDim arrSecond(nLo To nHi + 5, 1 To 5)
' transferer les données
For i = nLo To nHi Step 1
' si arr n'a qu'une dimension, utiliser ce bloc
arrSecond(i, 1) = arr(i)
For j = 2 To 5 Step 1
' ici je remplis avec n'importe quoi
arrSecond(i, j) = arr(i) & "_" & CStr(j)
Next j
' si arr a deux dimensions, utiliser ce bloc
' visez l'index '1'
arrSecond(i, 1) = arr(i, 1)
For j = 2 To 5 Step 1
' ici aussi je remplis avec n'importe quoi
arrSecond(i, j) = arr(i, 1) & "_" & CStr(j)
Next j
' pour plus de dimensions, adapter le code
' il y a disponible des fonctions permettant de détecter le nombre de dimensions
' d'un array. Avec UBound et LBound, les limites peuvent être détectées aussi
' et cette fonction pourrait devenir passe-partout.
Next i
' cette ligne doit être la dernière ligne de code de la function
' sinon VB créera une copie plutot que de seulement pointer
' vers le nouvel array.
arr = arrSecond
End Sub