Faire un "Dim as" avec le contenue d'une variable

black_code Messages postés 4 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 10 février 2005 - 9 févr. 2005 à 16:00
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 10 févr. 2005 à 18:53
bon voila mon problème

j'ai une structure dans un module genre



Type MyStruct

name as string

End Type



j'ai un textbox dans lequel je rentre le nom des personnes et un bouton de commande



ce que je souhaite c'est que a chaque fois que je clique sur le boutton je créer une nouvelle



structure avec le nom de la personnes donnée dans le textbox



exemple : dim nom_de_la_personne as MyStruct



le probleme est que je ne sais pas comment faire pour que juste apres le dim je dis a VB

que le nom de la nouvelle varibale qui serra la nouvelle structure est le nom contenu de la variable nom_de_la_personne.



j'ai esseyer de fair un truc genre:



dim i as integer

i=3

dim MyNewStruct+i as MyStruct 'pour que ma nouvelle structure s'appelle MyNewStruct3



mais ca ne marche pas


merci de votre aide.




L'éxperience est cette chose merveilleuse qui vous permet de reconnaître une erreur quand vous la faites à nouveau.

7 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 25
9 févr. 2005 à 16:27
Pfiouuuu ....

Soit tu utilises une collection de MyNewStruct, et tu te balades avec un indice dans les éléments de la collection.

Soit tu crées un tableau de données de type MyNewStruct, et tu te
balades avec un indice pour récupérer, par exemple, le troisième
élément.




Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
9 févr. 2005 à 16:39
La collection me parait la mieux adapté !
En plus de ton type ajoute une collection
Dim Coll as Collection

Dans un point de code obligatoire au début de ton programme (le form_Load est un bon plan généralement) ajoute la création de l'instance de cette collection
Set Coll = New collection

Et dans un point obligatoire en fin de programme (Le Form_Query_unload est un bon plan pour cela) ajoute la destruction de cette instance :
Set coll = Nothing

Voila pour les préparatifs, maintenant le gros du travail ...
Dans ton bouton de commande tu fais un truc du genre :
Dim S As MyStruct
' Içi tu renseignes les membres de la structure 'S'
' ...
' ...
Coll.Add S, Textbox1.Text 'Textbox1 est la textbox contenant le nom de la personne à ajouter

Et pour accéder à la structure correspondante à une personne, tu fais :
MsgBox Coll("Patriiiiiiiiiiiick").Name

Tu peux même supprimer la structure d'une personne comme cela :
Coll.Remove "Lorie"

Christophe R
0
cbnet Messages postés 176 Date d'inscription vendredi 29 octobre 2004 Statut Membre Dernière intervention 7 mars 2005
9 févr. 2005 à 17:29
Je suis d'accord avec econs, il faut que tu cree un tableau avec ta structure, ca pourrait donner un truc comme ca :

Dim MyNewStruct(49) As MyStruct, i As Integer

' Ex avec un tableau de 50 entrees, je te laisse te debrouiller pour ca...

' Et a chaque fois qu'il y a une nouvelle entree tu fais

i = i + 1

MyNewStruct(i).Name = nom_de_la_personne



@+
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
9 févr. 2005 à 20:05
On peut même faire

' au niveau général de ton form
Dim MyNewStruct() As MyStruct

' dans le load de ton form
redim MyNewStruct(0)

' Et sur le click du bouton de validation
redim MyNewStruct(ubound(MyNewStruct)+1)
MyNewStruct(ubound(MyNewStruct)).Name = nom_de_la_personne

ainsi, tu ne limites pas ton tableau de structures et si tu veux lister le résultat :

for i = 1 to ubound(MyNewStruct)
msgbox MyNewStruct(i).name
next

Cordialement, CanisLupus
0

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

Posez votre question
black_code Messages postés 4 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 10 février 2005
9 févr. 2005 à 20:53
merci de votre aide,

je vais faire comme vous avez indiqué,

Canislupus : en fait c'est ce que je voulais merci



N.B : ce que je voulais faire en fait c'est de créer une structure
unique et a chak connexion d'un client sur mon winsock serveur créer un
nouveau winsock(index) et la structure equivalente struct"index du
winsock". c'est pour pouvoir a la suite envoyer un message privé a un
utilisateur bien precis



voila merci encore

L'éxperience est cette chose merveilleuse qui vous permet de reconnaître une erreur quand vous la faites à nouveau.
0
black_code Messages postés 4 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 10 février 2005
10 févr. 2005 à 10:37
j'ai f ait exactement ce que CanisLupus a marqué mais a chaque redim de MynewStruct

je perd ce qu'il y'avais avant dans le champ name

pourtant a ma connaissance redim conserve ce qu'il yavais avant alors!!!!!!!!!



ca viens quoi ce truc



code d'essai que j'ai :

'dans le general de la form1

Dim tableau() As MyStruct



Private Sub add_Click()



If Text.Text <> "" Then

ReDim tableau(UBound(tableau) + 1)

Dim i As Integer

i = UBound(tableau)

tableau(i).name = Text.Text

tableau(i).index = i

List.AddItem tableau(i).name

Text.Text = ""

'MsgBox UBound(tableau)

End If



End Sub



Private Sub Command1_Click()

For i = 0 To List.ListCount - 1

MsgBox tableau(i).name

Next i

End Sub



Private Sub Form_Load()



ReDim tableau(0)



End Sub



Private Sub liste_Click()



Dim i As Integer



If List.ListCount <> 0 Then

For i = 0 To List.ListCount - 1

If List.Selected(i) = True Then


'List1.AddItem List.List(i) + " " + tableau(i).index

List1.AddItem tableau(i).name

'MsgBox UBound(tableau)

End If

Next i

End If



End Sub



Private Sub Text_KeyDown(KeyCode As Integer, Shift As Integer)



If KeyCode = 13 Then Call add_Click



End Sub




L'éxperience est cette chose merveilleuse qui vous permet de reconnaître une erreur quand vous la faites à nouveau.
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
10 févr. 2005 à 18:53
Mea culpa, j'ai tapé trop vite et le pire c'est ça ne m'a pas sauté aux yeux à la relecture ! Honte à moi !!!

Il faut coder :

If Text.Text <> "" Then
ReDim Preserve tableau(UBound(tableau) + 1)

...

Avec tutes mes excuses

Cordialement, CanisLupus
0
Rejoignez-nous