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.
Exemple :
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