Tableau "semi" dynamique...

Résolu
DragonicFlash Messages postés 20 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 31 octobre 2006 - 2 août 2005 à 18:58
DragonicFlash Messages postés 20 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 31 octobre 2006 - 7 août 2005 à 10:51
Bonsoir à toutes et à tous,

Là, je suis en train de changer et de refondre complètement un module, car la manière que j'ai fait ne me convenait pas.

Pour chaque objet que je vais gérer dans ma BDD, je vais avoir besoin de 4 données. Je vais donc rendre mes tableaux multi-dimensionnels. Etant donné que je connais le nombre de données par objet, mais que je ne connais pas évidemment le nombre d'objets, est-il possible de déclarer un tableau avec un nombre de ligne dynamique, et un nombre de colonnes connu ?

Si oui, comment le marquer ? Comme ça ? tableau(, 4)

Merci d'avance.

Emmanuel

5 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 août 2005 à 19:49
Salut,

Dans le cas d'un nombre connu de colonnes, tu peux aussi créer un type de données :

Type mytype ' dans une form met private devant type, public dans un module
col(4) as integer ' ou string ou ce que tu veux
end type

ensuite :
dim montableau() as mytype
et
redim preserve montableau(nblignes)

tu auras accès à ton tableau par
mavar = montableau(ligne).col(colonne)

Avec cette méthode tu peux même déterminer un type de donnée différent pour chaque colonne :

Type mytype
col1 as string
col2 as integer
col3 as long
col4 as boolean
end type

ensuite :
dim montableau() as mytype
et
redim preserve montableau(nblignes)

tu auras accès à ton tableau par
mavarstring = montableau(ligne).col1
mavarinteger = montableau(ligne).col2
mavarlong = montableau(ligne).col3
mavarboolean = montableau(ligne).col4

Bonne prog

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 août 2005 à 19:22
tu peux toujours mettre zéro en attendant

mais peut être faudrait le faire dans l'autre sens: tableau (4,0)

si tu veux faire un Redim Preserve après, seule la dernière dimension sera modifiable.

Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 août 2005 à 20:02
bien vu Canis

mais dans tous les cas le tableau n'est pas semi dynamique, pas de Dim avec une dimension au départ





le Dim de départ n'est même pas nécessaire sauf si on veut le mettre en Public

et le Preserve n'est nécessaire que si on veut garder les valeurs précédentes et si un Redim a déjà été fait.



Redim montableau(nblignes) As mtype


Daniel
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 août 2005 à 20:28
Tu as raison Daniel mais je le pensais autrement :

- nb de lignes inconnu
- par défaut la 1ère ligne et la 1ère colonne du tableau sont indexées à 0

Donc, si on remplit à partir d'un recordset, perso je fais (dans une form) :

Private Type mytype
col(4) As Integer
End Type


Dim montableau() As mytype


Private Sub Command1_Click()
Dim i As Integer


i = -1


Do While Not rs.EOF
i = i + 1
ReDim preserve montableau(i)
montableau(i).col(0) = rs!champ1
montableau(i).col(1) = rs!champ2
montableau(i).col(2) = rs!champ3
montableau(i).col(3) = rs!champ4
montableau(i).col(4) = rs!champ5
rs.movenext
Loop

End Sub

ce qui permet ensuite de parcourir le tableau avec

for i = 0 to ubound(montableau) ......

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DragonicFlash Messages postés 20 Date d'inscription dimanche 22 juin 2003 Statut Membre Dernière intervention 31 octobre 2006
7 août 2005 à 10:51
Salut à tous,

Et merci encore pour votre aide précieuse. Effectivement, je suis resté sur la réponse de Canis, qui est celle qui me convient le mieux. Non seulement parce-que ça me règle mon problème de nb de lignes inconnu / nb de colonne connu, mais également mon problème de tableau comportant des données de différents types (string, integer, etc...). Créer son type, c'est vraiment le pied, et au niveau syntaxe, c'est super clair:

mon_tableau(index).mon_champ

Merci !!

Emmanuel
0
Rejoignez-nous