begin process at 2012 02 16 13:23:50
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Trucs & Astuces

 > REDIM SANS DOULEUR PAR FUNCTION

REDIM SANS DOULEUR PAR FUNCTION


 Information sur le tutoriel

Note :
4,5 / 10 - par 2 personnes
4,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

 Description

Comment "Redim" toutes les dimensions d'un array multidimensionnel en VB.

Tutorial

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

 

 Historique

07 novembre 2006 16:00:29 :
Commentaires mis en bleu...

Commentaires

Commentaire de pifou25 le 16/02/2007 10:34:30

Moi j'ai une question: je cherchais une fois une fonction qui me permet de connaitre le nombre de dimensions d'un tableau... et je ne l'ai jamais trouvé! au point que j'ai été contraint à pondre cette fonction (pas très pro je te l'accorde), dis moi ce que t'en pense:

Public Function CountDim(arr As Variant) As Long
Dim i As Long
On Error GoTo CountDim_Error
Do
    i = i + 1
    CountDim = LBound(arr, i)
Loop
CountDim_Error:
CountDim = i - 1
End Function

mais de toute façon je n'ai jamais été capable de faire une fonction générique pour un tableau à n dimensions.

Commentaire de bitshifter le 20/02/2007 19:44:58

J'ai testé cette fonction et elle marche très bien.
De plus, elle est élégante et sans erreur.

Elle pourrait être intégrée ans une fonction de redim facilement.

Commentaire de MkProg le 15/09/2008 20:02:16

Pourquoi faire simple quand on peut faire compliqué!

C'est pas le top mais c'est deja mieux !

Private Sub firstDim(tDim As Integer, t() As String)
    Dim ttemp() As String
    ReDim ttemp(tDim, UBound(t, 2))
    Dim i As Long, j As Long
    For i = LBound(t, 1) To UBound(t, 1)
        For j = LBound(t, 2) To UBound(t, 2)
            ttemp(i, j) = t(i, j)
        Next j
    Next i
    t = ttemp
End Sub

Commentaire de PCPT le 18/09/2008 00:11:47 administrateur CS

salut,

le tableau multidimensionnel sert à être utilisé..., pas à être redimensionné.

dans ce cas il est lors préférable de passer par un tableau typé "perso"

déclaration :
Private Type arr
    a(5 To 10) As String
End Type
Dim arr2D(1 To 5) As arr


puis :
ReDim Preserve arr2D(1 To 3)

++

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales