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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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
Salut!
Chris : une p'tite intéressante concernant Redim : ça permet de
redimensionner seulement la dernière dimension d'un tableau..
"Chris" <user@domain.invalid> a écrit dans le message de
news:uN17lka%23EHA.2984@TK2MSFTNGP09.phx.gbl...
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
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
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
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
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
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
.
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
-----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
.
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
Ci dessous le source d'un module de classe gérant un tableaux de variant à n
dimensions, totalement redimentionable.