cs_MacSIM51
Messages postés10Date d'inscriptiondimanche 17 février 2008StatutMembreDernière intervention 5 avril 2008
-
26 févr. 2008 à 19:56
cs_MacSIM51
Messages postés10Date d'inscriptiondimanche 17 février 2008StatutMembreDernière intervention 5 avril 2008
-
27 févr. 2008 à 13:39
Bonjour,
je reviens encore une fois demander votre aide..
Cette fois, pour l'utlisation des Tableaux. J'ai bien compris leurs utilisation et leurs fonctionnement, mais il me reste un problème :
- Si je fais une fonction qui retourne un tableau, je n'arrive pas à "recevoir" les données retournées.
Exemple :
Public Function mafonction (ByVal masource As String)
Dim tab(5) As String
'pour l'exemple
For i = 0 To 5
tab(i) = i
Next i
'et là je ne sais pas quoi mettre en return, ou du moins comment le receptionner
return tab
End Function
Donc, maintenant je veux pouvoir recevoir et afficher les valeurs retournées par le tableau, comment faire ? Est-ce que je dois créer un tableau de même dimenssion et il stockera automatiquement les valeurs aux mêmes indices ? A priori non car ça ne fonctionne pas.
Nenyan
Messages postés4Date d'inscriptiondimanche 24 février 2008StatutMembreDernière intervention12 mai 2009 26 févr. 2008 à 21:50
Sa fait un moment que je n'ai pas trop touché au Visual Basic, mais je ne pense pas qu'il soit possible de "retourner" un tableau, uniquement une valeur unique.
Par contre, ce que tu peux faire je pense, c'est de passer en argument le tableau que tu veux remplir, en utilisant le mot clé "ByRef", qui te permet de passer un argument par adresse, et non par valeur.
Par exemple, je prend un exemple simple :
Public Function ArgumentParValeur(ByVal A As Integer)
A = 12
End Function
Public Function ArgumentParReference(ByRef A As Integer)
A = 12
End Function
Si dans un morceau de code, tu appelle la fonction ArgumentParValeur en lui passant pour argument une variable de type Integer, et que tu teste la valeur de cette variable apres l'appelle de la fonction ArgumentParValeur, tu verra que la valeur de ta variable n'aura pas changé par rapport a sa valeur initiale.
En revanche, si tu appelle la fonction ArgumentParReference en lui passant une variable de type Integer, cette variable se vera affectée la valeur 12.
Donc je ne sais pas si tu peux faire sa, mais dans la définition de ta fonction :
Public TaFonction (ByRef MonTableau(5) As Integer)
For I = 0 To 5
MonTableau (I) = I
Next I
End Function
Je n'ai pas de quoi tester mais je pense que cette methode sera la meilleure =)
Kristof_Koder
Messages postés918Date d'inscriptionvendredi 3 août 2007StatutMembreDernière intervention27 octobre 200810 26 févr. 2008 à 23:23
Ben si ! On peut tout à fait retourner un tableau depuis une fonction !
Voici ton code mis à jour :
Public Function mafonction(ByVal masource As String) As String()
Dim tab(5) As String, i As Long
'pour l'exemple
For i = 0 To 5
tab(i) = i.ToString
Next i
Return tab
End Function
juste 3 modif apportées :
1- penser à préciser le type retour de la fonction !
2- déclaration de i
3- conversion implicit de i en string avant stockage dans le tableau
a propos des point 2 et 3, je te conseille vivement de modifier les propriétés de ton projet en activant Option Explicit et Option Strict à On dans l'onglet Compilation
cs_MacSIM51
Messages postés10Date d'inscriptiondimanche 17 février 2008StatutMembreDernière intervention 5 avril 2008 26 févr. 2008 à 22:55
Bonsoir, merci pour ta réponse.
En effet, j'avais pas pensé à passer par le passage par référence.. c'est une bonne solution qui me va à priori.
Si un jour ça peut aider quelqu'un, voici le final en exemple :
Dans le FormLoad :
'creation du tableau de 6 valeurs (0 à 5)
Dim tableau(5)
As
Integer
'affichage de la 4eme valeur du tableau d'origine
MessageBox.Show(tableau(3))
'appel de la fonction avec le passage du tableau en parametre
mafonction(tableau)
'affichage de la 4eme valeur du tableau pour voir qu'elle a bien changé
MessageBox.Show(tableau(3))
La fonction :
'creation de la fonction avec le passage par reference du tableau
Public
Sub mafonction(
ByRef tableau()
As
Integer)
Dim I
As
Integer
For I = 0
To 5
'on initialise le tableau avec i
tableau(I) = I + 1
Next I
End
Sub
Voilà, ça peut paraitre simple mais pour quelqu'un qui débute comme moi et qui cherche sans trouver, ça peut servir ;)