Redim sans douleur par function

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.

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

Rejoignez-nous