OVH Cloud OVH Cloud

Visual Basic 6

5 réponses
Avatar
SimF1
Bonjour!
J'aimerais bien savoir comment ont peut déclarer un tableau dynamique à 2
dimension en vb6. Car ce qui va s'inscrire dans mon tableau c'est le retour
d'une requête (recordset) dont je ne sais pas la taille.

ex.:
tableau (x,y)

Merci!
SimF1

5 réponses

Avatar
Chris
SimF1 a écrit :
Bonjour!
J'aimerais bien savoir comment ont peut déclarer un tableau dynamique à 2
dimension en vb6. Car ce qui va s'inscrire dans mon tableau c'est le retour
d'une requête (recordset) dont je ne sais pas la taille.

ex.:
tableau (x,y)

Merci!
SimF1


declare un grand tableau tab(100,100) et utilise redim preserve
Avatar
Zoury
Salut!

Chris : une p'tite intéressante concernant Redim : ça permet de
redimensionner seulement la dernière dimension d'un tableau..


"Chris" a écrit dans le message de
news:uN17lka%
SimF1 a écrit :
> Bonjour!
> J'aimerais bien savoir comment ont peut déclarer un tableau dynamique à


2
> dimension en vb6. Car ce qui va s'inscrire dans mon tableau c'est le


retour
> d'une requête (recordset) dont je ne sais pas la taille.
>
> ex.:
> tableau (x,y)
>
> Merci!
> SimF1
declare un grand tableau tab(100,100) et utilise redim preserve


Avatar
Thierry Bertrand
Pour un tableau 2X2 redimentionable sur les deux dimensions, uneseule
solution: une liste de tableau.

Ci dessous un exemple :
une forme, trois boutons,
le 1 -> affiche une table de multiplication
le 2 ajoute une ligne à la table
le 3 ajoute une colone à la table

A toi d'adapter à ton problème, notamment ecrire une sub d'affectation
plutot que de remplir par i * j les entrées de tableaux
->au passage, rigolot l'écriture tbl(i) = tblliste(j)(i)

si plus de 2 dimensions, alors faire des listes de liste de liste de liste
de ... mais là ça se complique car 3 dimensions n X m X p, voudrait dire une
liste contenant p listes de m tableaux de dimension n

et puis tant qu'à faire, ecrire une classe complète qui gère cela totalement
(ajout d'une dimension, affectation des éléments, suppression d'une
dimension, etc...)


Option Explicit
Dim tblList As New Collection ' représentera le tableau n X m

Private Sub Command1_Click()
'
' affichage de tous les éléments
'
Dim tbl() As Long
Dim i As Long
Dim j As Long
Dim ch As String

ch = ""
For j = 1 To tblList.Count
For i = 1 To UBound(tblList(j))
ch = ch & "-" & Str(tblList(j)(i))
Next i
ch = ch & vbCrLf
Next j
MsgBox ch
End Sub

Private Sub Command2_Click()
'
' ajoute un élément à la liste -> redim preserve de la dernière dimension
' identique à redim preserve t(X,Y+1)
'
Dim i As Long
Dim j As Long
Dim tbl() As Long

j = tblList.Count + 1
ReDim tbl(UBound(tblList(1)))
For i = 1 To UBound(tbl)
tbl(i) = i * j
Next i
tblList.Add tbl
End Sub

Private Sub Command3_Click()
'
' ajoute un élément à la liste -> redim preserve de la première dimension
' ce qui n'est pas possible par Redim preserve t(X+1,Y)
'
Dim i As Long
Dim j As Long
Dim tbl() As Long
Dim n As Long
Dim m As Long

n = tblList.Count
m = UBound(tblList(1)) + 1
For j = 1 To n
ReDim tbl(m)
For i = 1 To m - 1
tbl(i) = tblList(j)(i)
Next i
tbl(m) = m * j
tblList.Remove (j)
If j <> 1 Then
tblList.Add tbl, , , j - 1
Else
tblList.Add tbl, , j
End If
Next j

End Sub

Private Sub Form_Load()
'
' initialisation à 10 X 10 éléments, chaque élément étant I * J
'
Dim i As Long
Dim j As Long
Dim tbl() As Long

For j = 1 To 10
ReDim tbl(10)
For i = 1 To 10
tbl(i) = i * j
Next i
tblList.Add tbl
Next j
End Sub
Avatar
Il peut essayer avec un variant

dim v as variant

v = FoncQuiRenvoiUnTableauA2Dimension()

print cstr(v(1,1))

-----Message d'origine-----
Pour un tableau 2X2 redimentionable sur les deux


dimensions, uneseule
solution: une liste de tableau.

Ci dessous un exemple :
une forme, trois boutons,
le 1 -> affiche une table de multiplication
le 2 ajoute une ligne à la table
le 3 ajoute une colone à la table

A toi d'adapter à ton problème, notamment ecrire une sub


d'affectation
plutot que de remplir par i * j les entrées de tableaux
->au passage, rigolot l'écriture tbl(i) = tblliste(j)(i)

si plus de 2 dimensions, alors faire des listes de liste


de liste de liste
de ... mais là ça se complique car 3 dimensions n X m X


p, voudrait dire une
liste contenant p listes de m tableaux de dimension n

et puis tant qu'à faire, ecrire une classe complète qui


gère cela totalement
(ajout d'une dimension, affectation des éléments,


suppression d'une
dimension, etc...)


Option Explicit
Dim tblList As New Collection ' représentera le tableau


n X m

Private Sub Command1_Click()
'
' affichage de tous les éléments
'
Dim tbl() As Long
Dim i As Long
Dim j As Long
Dim ch As String

ch = ""
For j = 1 To tblList.Count
For i = 1 To UBound(tblList(j))
ch = ch & "-" & Str(tblList(j)(i))
Next i
ch = ch & vbCrLf
Next j
MsgBox ch
End Sub

Private Sub Command2_Click()
'
' ajoute un élément à la liste -> redim preserve de la


dernière dimension
' identique à redim preserve t(X,Y+1)
'
Dim i As Long
Dim j As Long
Dim tbl() As Long

j = tblList.Count + 1
ReDim tbl(UBound(tblList(1)))
For i = 1 To UBound(tbl)
tbl(i) = i * j
Next i
tblList.Add tbl
End Sub

Private Sub Command3_Click()
'
' ajoute un élément à la liste -> redim preserve de la


première dimension
' ce qui n'est pas possible par Redim preserve t(X+1,Y)
'
Dim i As Long
Dim j As Long
Dim tbl() As Long
Dim n As Long
Dim m As Long

n = tblList.Count
m = UBound(tblList(1)) + 1
For j = 1 To n
ReDim tbl(m)
For i = 1 To m - 1
tbl(i) = tblList(j)(i)
Next i
tbl(m) = m * j
tblList.Remove (j)
If j <> 1 Then
tblList.Add tbl, , , j - 1
Else
tblList.Add tbl, , j
End If
Next j

End Sub

Private Sub Form_Load()
'
' initialisation à 10 X 10 éléments, chaque élément


étant I * J
'
Dim i As Long
Dim j As Long
Dim tbl() As Long

For j = 1 To 10
ReDim tbl(10)
For i = 1 To 10
tbl(i) = i * j
Next i
tblList.Add tbl
Next j
End Sub


.



Avatar
Thierry Bertrand
Ci dessous le source d'un module de classe gérant un tableaux de variant à n
dimensions, totalement redimentionable.

Il est tout frais

http://www.vbfrance.com/code.aspx?ID(850