Déclaration de tableau dynamique

cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005 - 3 juil. 2004 à 02:00
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005 - 4 juil. 2004 à 21:02
Bonjour à tous,

Je ne crois pas que le problème que je rencontre soit très compliqué à résoudre mais je ne sais pas comment déclarer mon tableau dynamique tbl
Voilà le code:

Dim tbl() As String
Dim i As Integer

With frmMedicament
For i = 0 To .lbMedicament.ListCount - 1
If .lbMedicament.Selected(i) Then
tbl(i) = .lbMedicament.List(i)
End If
Next
End With

Je m'explique. Je voudrais mettre les éléments sélectionnés de ma listbox lbMedicament (il peut y en avoir plusieurs) dans un tableau tbl.
Pour cela, il faut que le tableau déclaré n'est pas une taille prédéfinie car je ne sais pas combien d'éléments de la liste vont être sélectionnés par l'utilisateur. Or, le code suivant provoque une erreur "indice en dehors de la plage". Je sais que c'est la déclaration de mon tableau qui pose problème mais je ne sais pas comment faire.

Merci pour votre aide

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
3 juil. 2004 à 02:37
Salut dan24
En effet, un tableau sans dimension prend 10 comme dimension.
Voici ton nouveau code :
Dim tbl() As String
Dim i As Integer

ReDim tbl(1) As String  ' Défini une taille sinon les autres ReDim ne seront pas acceptés (risque)
With frmMedicament 
For i = 0 To .lbMedicament.ListCount - 1
If .lbMedicament.Selected(i) Then
r = r + 1
ReDim Preserve tbl(r) As String
tbl(r) = .lbMedicament.List(i)  ' note le tbl(r) et pas (i)
End If
Next
End With


Vala
Jack
0
pcpunch Messages postés 1243 Date d'inscription mardi 7 mai 2002 Statut Membre Dernière intervention 18 février 2019 5
3 juil. 2004 à 03:33
Jack je ne pense pas que le :ReDim tbl(1) As String soit nécessaire !!!

Car tu fait un redim preserve dans la boucle ensuite, mais il faut incrémenter R aprés le redim, de ce fait le tableau commencera a l'indice 0.

Dim tbl() As String
Dim i As Integer
Dim R As Integer

With frmMedicament
For i = 0 To .lbMedicament.ListCount - 1
If .lbMedicament.Selected(i) Then
ReDim Preserve tbl(R) As String
tbl(R) = .lbMedicament.List(i)
R = R + 1
End If
Next
End With


voila ++
0
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
4 juil. 2004 à 21:00
Je te remercie vraiment beaucoup Jack pour avoir répondu aussi rapidement à ma question.

A+
0
cs_dan24 Messages postés 39 Date d'inscription lundi 9 février 2004 Statut Membre Dernière intervention 15 avril 2005
4 juil. 2004 à 21:02
Merci à toi pcpunch pour cette petite précision

A+
0
Rejoignez-nous