Re:VBA Lecture d'une variable tableau multidimensi
Re Bonjour Sidonie, Bébère, le Forum
Je t'avouerai que je n'ai pas vraiment essayé de corriger ta Function, car maintenant je suis au bureau et je n'ai pas trop de temps pour me lancer dans un algo de ce style.
Ce que je sais et peux te confirmer...
Si tu optes pour délimiter une des deux dimensions de ton tableau avec un Max, il est clair que ce tableau contiendra des Valeurs Nulles jusqu'à ce que cette dimension atteigne cette valeur Max...
Un exemple tout bête avec un classeur vierge :
Une Feuille active avec des données comme suit dont on ne connait ni le nombre de Colonnes ni le nombre de Lignes... La seule chose qu'on sait d'avance c'est qu'il n'y aura pas plus de 50 colonne mais les lignes peuvent être illimitée à la Feuille (65536)
A1:Axx : 1, 2, 3, 4... 10... xx
B1:Bxx : 11, 11, 12, 13... 20... xx
C1:Cxx : 21, 22, 23...... 30... xx
y1:yxx : y1, y2, y3...... y30 .... yxx
Si tu lances un algo de ce Style :
Option Explicit
Sub MyTestAlgo()
Dim Tablo() As Integer
Dim MyLimitCol As Byte, C As Byte
Dim i As Integer, L As Integer
MyLimitCol = 49 '(en base zéro = 50)
For i = 1 To ActiveSheet.UsedRange.Rows.Count
ReDim Preserve Tablo(MyLimitCol, L)
For C = 0 To MyLimitCol
Tablo(C, L) = Cells(i, C + 1)
Next
L = L + 1
Next i
With Worksheets.Add
.Range('A1').Resize(UBound(Tablo, 2) + 1, UBound(Tablo, 1) + 1) = Application.Transpose(Tablo)
End With
End Sub
Il est certain que tu va récupérer plein de zéro (si Tablo est Integer) pour toutes les colonnes qui n'avaient pas de données...
Maintenant dans un cas comme ceci on peut finter de la sorte sans pour autant faire deux passage de l'Algo...
Option Explicit
Sub MyTestAlgo()
Dim TabData As Variant
Dim Tablo() As Integer
Dim MyLimitCol As Byte, C As Byte
Dim MyLimitLin As Byte
Dim i As Integer, L As Integer
TabData = ActiveSheet.UsedRange
MyLimitLin = UBound(TabData, 1)
MyLimitCol = UBound(TabData, 2) - 1
For i = 1 To MyLimitLin
ReDim Preserve Tablo(MyLimitCol, L)
For C = 0 To MyLimitCol
Tablo(C, L) = Cells(i, C + 1)
Next
L = L + 1
Next i
With Worksheets.Add
.Range('A1').Resize(UBound(Tablo, 2) + 1, UBound(Tablo, 1) + 1) = Application.Transpose(Tablo)
End With
End Sub
Maintenant pour ton cas précis, je n'ai pas vraiment approfondi car en plus il s'agit d'un Function Perso dont je n'ai pas vraiment cherché à comprendre le raisonnement.
Ceci est juste pour t'aider toi à comprendre le raisonnement d'un Algo de construction d'une 'Dynamic Array' en deux dimensions...
Regarde aussi le Travail de notre ami 'Zon' qui a regroupé pas mal d'info sur sa page Wiki :
Lien supprimé
Bon Appétit
[ol]@+Thierry[/ol]
Edition PS
Pour cette question que j'ai zappée :
D'ailleurs à partir du moment où mon tableau est de type Integer et que je modifie sa taille, les valeurs ne sont-elles pas initialisées à 0 ?
=>
Non ! et quelque soit le Type de Tableau, si tu utilises bien le 'KeyWord'
Preserve dans ton 'Statement'
Redim... Tu préserveras tes données précédemment incrémentées dans le Tableau séquentiel.
Message édité par: _Thierry, à: 29/08/2005 12:19