Tableau dynamique

cs_panpan Messages postés 99 Date d'inscription lundi 6 janvier 2003 Statut Membre Dernière intervention 4 juillet 2008 - 30 juin 2003 à 11:14
Ken2K Messages postés 19 Date d'inscription vendredi 18 janvier 2002 Statut Membre Dernière intervention 26 novembre 2004 - 18 juin 2004 à 09:55
bonjour,

J'aimerais faire créé un tableau dynamique avec 4 colonnes

Est-ce que quelqu'un pourrait m'aider?? :)

10 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
30 juin 2003 à 11:39
Private Type enr
num As Integer
nom As String * 25
End Type

Public Function IsArrayEmpty(ByVal V As Variant) As Boolean

On Error Resume Next

Err.Clear
V = UBound(V) IsArrayEmpty (Err.Number 9)
Err.Clear

End Function

Private Sub essai()

Dim tbl() As enr

'MsgBox IsArrayEmpty(tbl)

ReDim tbl(5)

'MsgBox IsArrayEmpty(tbl)
Dim enr1 As enr
enr1.nom = "Nicolas"
enr1.num = 10
tbl(0) = enr1

MsgBox tbl(0).num
MsgBox tbl(0).nom
End Sub

un tableau dynamique de deux colonnes

ensuite il faut jouer avec preserve et redim pour le rendre dynamique a souhait :-)
0
Pem13lw Messages postés 73 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 23 février 2005
30 juin 2003 à 12:04
En plus simple :

Type TMonTableau
Col1 as ...
Col2 as ...
Col3 as ...
Col4 as ...
end type

dim montableau(0 to 10) as Tmontableau

_________________________________________________
La seule chose que non avons à faire ici-bas c'est
choisir quoi faire du temps qui nous à été imparti !!!
0
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
30 juin 2003 à 12:20
Déclaration d'un tableau de String dynamique :
Dim tab() as String

Allocation mémoire en préservant les éléments du tableau :
Redim Preserve tab(2)

Affectations :
tab(0) = "toto"
tab(1) = "tata"
tab(2) = "tutu"

Ajout d'une nouvelle String au tableau :
Redim Preserve tab(3)
tab(3) = "tété"

J'ai pris l'exemple d'une tableau dynamique de STRING, mais tu peux très bien créer ton propre type et en faire une liste dynamique...

Private Type Personne
Nom as String
Prénom as String
Age as Byte
End Type

Dim listPersonne() as Personne
Dim nbPersonne as Long 'Nombre de personne stocké dans la liste

Après, tu te fais une fonction d'ajout d'une personne et une fontion pour enlever une personne...

Je pense qu'avec tous les exemples cités, tu doit pouvoir y arriver maintenant...

Bon courage
0
cs_panpan Messages postés 99 Date d'inscription lundi 6 janvier 2003 Statut Membre Dernière intervention 4 juillet 2008
2 juil. 2003 à 14:53
Merci beaucoup, ça fonctionne bien. Mais j'ai juste encore un petit probleme, J ai mis :

Type enr
    Chemin As String
    Artiste As String
    Titre As String
    Album As String
End Type

Public tbl() As enr



dans un module que j ai apeler Tableau, mais comme je rempli mon tableau, sur une feuille, et que je veux le lire sur une autre, je ne sais pas comment faire pour pouvoir accèder au donner que j ai placer dans mon tableau.

Est ce que je dois utiliser un call??

Merci d'avance
0

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

Posez votre question
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
2 juil. 2003 à 15:06
Tu as déclaré ta variable tbl Public dans ton Module Tableau.

Tu peux donc accéder à cette variable (qui contient une liste de chansons) depuis n'importe quel formulaire de ton projet ou depuis n'importe quel module.

Ta variable tbl est GLOABL...

Par contre, il faut que tu ajoutes une variables NbChanson qui te permettra de savoir combien tu as de chansons dans ton tableau tbl. (cependant, tu peux aussi faire avec UBound$(tbl), qui te retourne le nombre d'élement de ton tableau).

Ajoute ces 2 fonctions dans ton module Tableau :

'Cette fonction te permet d'ajouter une chanson à ton tableau
Public Sub AddSong(Chemin as String, Artiste as String, Album as String, Titre as String)

Redim Preserve tbl(NbChanson)
tbl(nbChanson).Chemin = Chemin
tbl(nbChanson).Artist = Artiste
.....
NbChanson = NbChanson + 1

End sub

'Cette fonction te permet d'enlever une chanson à ton tableau
Public Sub RemoveSong(Titre as String)

'1- Tu recherche en parcourant ton tableau le Titre correspondant au paramètre

'2- Tu appliques un algorithme qui va dpélacer les élément de ton tableau suivant

'3- Tu décrémente ton compteur NbChanson

(désolé, mais je n'ai pas le temps de te mettre ce code)

End sub

CONSEILS :
Utilise un identifiant UNIQUE pour caractériser une chanson
(Tu ajoutes une variable Id as Long dans ton TYPE)

Ajoute un champ Duree (qui correspond à la durée d'une chason)...

Fais toi une petite table Merise ou UML pour bien conceptualiser ton projet...

Bon courage...
0
cs_panpan Messages postés 99 Date d'inscription lundi 6 janvier 2003 Statut Membre Dernière intervention 4 juillet 2008
2 juil. 2003 à 15:18
Merci beaucoup, mais le gros prob c'est que sur mon autre feuille quand j'essaye de lire mon tableau, je n y arive pas.

J ai mis ça dans mon sub pr faire un test. Mais ca ne marche pas
Private Sub test_Click()

Dim tbl() As enr

    MsgBox tbl(0).Chemin
    MsgBox tbl(0).Artiste
    MsgBox tbl(0).Titre
    MsgBox tbl(0).Album

End Sub
0
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
2 juil. 2003 à 15:39
C'est normal que ça ne marche pas...

Tu n'as pas bien compris le fonctionnement des variables, ni le fonctionnement des tableaux dynamiques...

Tout d'abord, pourquoi redéclares-tu ta variable tbl dans ta procédure (Sub) ?

tbl est GLOBAL, car tu l'as déclaré Public dans ton Module Tableau. Cela te permet de l'utiliser n'importe ou dans ton projet et SANS JAMAIS LA REDECLARER !

Ensuite, tu fais un MsgBox tbl(0).Chemin.
Cela ne peux pas marcher si tu n'as pas allouer de la mémoire pour la case 0 de ton tableau !

Quand tu déclare un tableau dynamique, c'est à toi de lui allouer de la mémoire grâce à l'instruction suivante :
Redim Preserve tbl(5)

J'ai mis 5 en exemple... Ceci permet d'allour en mémoire vive (dans la RAM de ton PC) 6 emplacements (donc 6 chasons dans ton tableau).

Après, il faut remplir tes cases...

Je te donne un exemple :

>
> Private Sub test_Click()
> 
>     Redim Preserve tbl(0)
>
>     tbl(0).Chemin = "c:"
>     tbl(0).Artiste = "Ben Harper"
>     tbl(0).Titre = "Burn One Down"
>     tbl(0).Album = "Fisht For your Mind"
>
>     MsgBox tbl(0).Chemin
>     MsgBox tbl(0).Artiste
>     MsgBox tbl(0).Titre
>     MsgBox tbl(0).Album
> 
> End Sub
> 


Est-ce que tu étudie ou a étudié la propgrammation ?
Tu débutes en VB ?

Ce site est super pour les débutants...
On est tous passer par là...

Bon courage...
0
cs_panpan Messages postés 99 Date d'inscription lundi 6 janvier 2003 Statut Membre Dernière intervention 4 juillet 2008
15 juil. 2003 à 19:21
enfait je pense que le plus gros probleme est que j'ai du mal expliquer mon probleme...

ce que tu m a donner fonctionne très bien, mais enfait moi mon problème est que:

J ai une feuille qui s apel UserFormSelectionDeRepertoir.frm ou j ai mon code et a un endroit j ai ceci

Public Sub BtmCmdOk_Click()

Dim tbl() As enr
Dim Fichier As String
Dim Chemin As String

'recherche les information dans les tag id3 et les met dans les variables.

Dim enr1 As enr
        enr1.Chemin = Chemin
        enr1.Artiste = GetArtiste(Chemin & "" & Fichier) 
        enr1.Titre = GetTitre(Chemin & "" & Fichier)
        enr1.Album = GetAlbum(Chemin & "" & Fichier)
        tbl(Ligne) = enr1

MsgBox tbl(0).Chemin
MsgBox tbl(0).Artiste
MsgBox tbl(0).Titre
MsgBox tbl(0).Album

End Sub

et la ça m afiche les valeur de la premiere ligne du tableau sur des msgbox

puis j'ai aussi un modul qui s appel Tableau et dedan j'ai:

Type enr
    Chemin As String
    Artiste As String
    Titre As String
    Album As String
End Type

Public tbl() As enr


et pour finir, j ai une deuxieme feuille qui s apel UserFormjukandsearch.frm et â un endroit dans cette feuille j ai ce code:

Private Sub test_Click()

MsgBox tbl(0).Chemin
MsgBox tbl(0).Artiste
MsgBox tbl(0).Titre
MsgBox tbl(0).Album

End Sub


alor ce que je ne comprend pas c'est que dans la premiere feuille ca affiche ce qu il y a dans la case 0 et dans la deuxième feuille ca ne marche pas.

Car enfait ce que je voudrais faire, c est que sur la premiere feuille je défini ce qui vas dans le tableau et que ces valeur sois enregistrer dans le le module pour que je puisse apeler ces valeur n'importe quand.
0
jockos Messages postés 321 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 14 mai 2005 2
15 juil. 2003 à 20:21
Mec, ça peut pas marcher ton truc...

Tu t'y prend mal...

j'ai bien compris ton problème...

NE redéclare pas ta variable tbl() dans ta Sub BtnCmdOk de ton forumlaire UserFormSelectionDeRepertoir.
Car si tu l'as redéclare, ce sera la variable LOCAL de cette Sub a laquelle tu ajouteras les enregistrements sur la colonne 1.

Tu n'as pas bien compris le fonctionnement des variables GLOBALES / LOCALES.
Va sur des sites de programmation où cela sera expliqué, car c'est primordial que tu comprennes cela...

En plus, tu n'as pas non plus compris l'allocation mémoire avec un tableau dynamique...
Essai de rentrer des valeurs dans la case 5 de ton tableau dynamique, tu verras que ça ne marchera pas dans ton code.

Il faut ALLOUER la mémoire dans ton tableau, c'est à dire lui dire "combien de case il faut qu'il reserve en mémoire).
Si tu veux stocker 5 chansons, tu feras :

Redim Preserve tbl(5)

Après cette instruction, tu auras allouer 5 cases contenant chacune un enregistrement de type "enr". (tout cela, dans ta mémoire RAM bien sûr).

J'ai compris ton problème, mais tu n'as pas compris la solution que j'essai de t'apporter... c'est ça le problème man...

Bon courage...
0
Ken2K Messages postés 19 Date d'inscription vendredi 18 janvier 2002 Statut Membre Dernière intervention 26 novembre 2004
18 juin 2004 à 09:55
salut, jockos,

j'ai un souci en reprenant l'exemple de panpan
si on veut boucler sur le nom des chansons a afficher dans une varibale

Donc a savoir que lon boucle

For Compteur =0 ti I # I etant l'iteration ou le nombre de chanson dans enregistre

MaVaraible = tbl(I).titre

Next Compteur

#chez moi sa marche pas, et meme si je fais un msgbox il me retourne Vide. peut tu m'aider stp
0
Rejoignez-nous