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

Ce document intitulé « Redim sans douleur par function » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous