[vb6] transmettre un tableau par procédure

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 776 fois - Téléchargée 17 fois

Contenu du snippet

Tout le monde connait les tableaux...

Depuis toujours je pensais qu'il n'été pas possible de les transmetrent par procédure sous VB6, et bien je me trompé, alors que je me balader dans MSDN j'ai trouvé un indice qui me faisait pensait le contraire.

Bien que cette source soit bidon, je sait que bon nombre ne savent pas que c'est faisable car je m'étais déjà renseigné sans succés, du coup je post cette source pour en faire profité tout le monde...

Voir l'exemple :

Source / Exemple :


'Dans un module :

'La fonction qui renvoie un tableau
Public Function Tableau_Procedure() As String()

    'On crée tout d'abord un tableau temporaire car je ne sait pas pourquoi mais
    'il n'est pas possible de redimensionné le tableau de la fonction elle même
    Dim Tableau_Temporaire() As String
    'J'ai laisser vide entre les parenthèses, ce qui signifie que le tableau est
    'dynamique
    
    'Comme on a un tableau dynamique il faut l'initialisé en lui donnant une taille
    ReDim Preserve Tableau_Temporaire(0)
    'Voilà, on à une taille de zéro, maintenant on peut travailler avec
    
    'Ici on créer une boucle pour remplir ce tableau temporaire
    For i = 1 To 10
        
        'On le redimensionne pour qu'il puisse accueillir une nouvelle valeur
        ReDim Preserve Tableau_Temporaire(UBound(Tableau_Temporaire) + 1)
        
        'On entre cette nouvelle valeur
        Tableau_Temporaire(i) = i
        
    Next i
    
    'Maintenant que le tableau temporaire est remplit, on peut transférer ses
    'données au tableau de la procedure
    Tableau_Procedure = Tableau_Temporaire

End Function

________________________________________________________

'Dans un formulaire :

'On dispose un CommandButton et une LitBox pour tester le résultat

Private Sub Command1_Click()

    'Ici on créer aussi un tableau pour récupérer les valeurs de la fonction
    Dim Tableau_Form() As String

    'On récupère les valeurs
    Tableau_Form = Module1.Tableau_Procedure
    
    'Et maintenant on fait une boucle pour afficher les résultat dans
    'la zone de liste depuis le tableau précédemment rempli
    For i = 0 To UBound(Tableau_Form)
        List1.AddItem Tableau_Form(i)
    Next i
    
End Sub

'On ne peut pas travailler directement avec le tableau du module car on ne peut pas
'appeler sont index :

    'Exemple :
    List1.AddItem Module1.Tableau_Procedure(i)

    '"Module1.Tableau_Procedure(i)" équivaudrais à vouloir passer un paramètre à la fonction
    'et non pas indiquer un index...

Conclusion :


Ca marche tout simplement.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
160
Date d'inscription
dimanche 7 décembre 2003
Statut
Membre
Dernière intervention
14 janvier 2009

Bonjour,

d'accord avec Renfield. On peut s'en servir pour extraire des enregistrement sur une requête de BDD.
J'utilise aussi des tableaux de "type utilisateur"..
Mais pour ma part je préfère rendre le tableau lui même.
Messages postés
207
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
14 septembre 2011

Merci d'avoir apporter ces modifications Renfield ;)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
j'avoue ne pas trop comprendre la chose...
un simple How-To sur comment renvoyer un tableau ?

nettoyons un peu le code...

completement contre-performant de faire ton Redim Preserve DANS la boucle.

alloue tes 10 Items AVANT la boucle, une fois pour toutes...

De plus, dans ton tableau, tu perds la case d'index 0 que tu ne remplis pas dans ta boucle For i = 1 To 10

Public Function Tableau_Procedure() As String()
Dim i As Long
Dim xsRet(9) As String
'# A voir si l'on a un nombre fixe d'element ou non...
'Dim xsRet() As String
'ReDim Tableau_Procedure(9)
For i = 0 To 9
xsRet(i) = "Item " & i
Next i
Tableau_Procedure = xsRet
End Function

'Dans un formulaire :
Private Sub Command1_Click()
Dim i As Long
Dim Tableau_Form() As String
Tableau_Form = Module1.Tableau_Procedure
For i = 0 To UBound(Tableau_Form)
List1.AddItem Tableau_Form(i)
Next i
End Sub

Personellement, je prefere ce genre de choses:

Public Function RemplirTableau(ByRef vxsRet() As String) As Long
Dim i As Long
'# A voir si l'on a un nombre fixe d'element ou non...
ReDim vxsRet(9)
For i = 0 To 9
vxsRet(i) = "Item " & i
Next i
'# Renvoie le nombre d'element du tableau
RemplirTableau = 10
End Function

'Dans un formulaire :
Private Sub Command1_Click()
Dim i As Long
Dim xsItems() As String
For i = 0 To RemplirTableau(xsItems) - 1
List1.AddItem xsItems(i)
Next i
End Sub

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.