Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

REDIM SANS DOULEUR PAR FUNCTION


Information sur le tutorial

Catégorie :Trucs & Astuces Date de création : 07/11/2006 15:58:21 Vu : 6 407 fois

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

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

 

07 novembre 2006 16:00:29 :
Commentaires mis en bleu...
signaler à un administrateur
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.

signaler à un administrateur
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.

signaler à un administrateur
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

signaler à un administrateur
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

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,109 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.