[Déplacé .Net --> VBA] Problème avec les arguments d'une fonction

Résolu
bouigs Messages postés 6 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 28 octobre 2009 - 26 oct. 2009 à 18:59
bouigs Messages postés 6 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 28 octobre 2009 - 28 oct. 2009 à 07:42
Bonjour,
je souhaiterais avoir des explication concernant les quelques lignes du programme que j'ai écrit ci dessous.
Dans un programme principal, j'appelle une fonction qui renvoie un tableau, puis j'écris simplement les données de ce tableau dans les cellules de excel.
Jusque là, tout fonctionne. Néanmoins, j'aimerais bien passer un argument dans la fonction, et là, les résultats obtenus sont complètements faux.
Quelqu'un peux t'il m'aider à corriger mon problème ?
Merci.

Sub main()

Sheets("Feuil1").Select
Dim nb As Integer
nb = 1

Call Essai(nb)

Range("A1").Value = Essai(0)
Range("A2").Value = Essai(1)
Range("A3").Value = Essai(2)

End Sub

Function Essai(nb As Integer)

Dim Tableau(0 To 2) As Double

Tableau(0) = 3 * nb
Tableau(1) = 6 * nb
Tableau(2) = 9 * nb
Essai = Tableau

End Function

5 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
26 oct. 2009 à 23:06
Bonsoir,

On ne peut que te conseiller de lire un tutoriel sur le passage d'argument...

Écrire un cours ici serait un peu long...

Sub main()

Sheets("Feuil1").Select
Dim nb As Integer
nb = 1

Dim tableau(3)

Call Essai(nb, tableau())

Range("A1").Value = tableau(0)
Range("A2").Value = tableau(1)
Range("A3").Value = tableau(2)

End Sub

Function Essai(nb, ByRef tableau)

tableau(0) = 3 * nb
tableau(1) = 6 * nb
tableau(2) = 9 * nb

End Function


Il faut passer le tableau en variable et mettre ByRef pour en garder les données entre les appels. Par défaut, C'est byval, qui fait une copie des variables... c'est le cas ici pour "nb".

Amicalement,
Us.
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
26 oct. 2009 à 19:26
Bonjour (re)...

Je ne comprends plus :
1) quid de
http://www.vbfrance.com/forum/sujet-RECUPERER-OUPUTS-FONCTION_1368813.aspx
???
Finalement : sous quoi développes-tu donc ? VBA ou VB.Net
2) dans le lien rappelé ci-dessus, je t'ai déjà dit qu'une fonction retrournait une valeur (ce qui n'est pas le cas de ta "fonction" essai ....
- qu'elle était typée (ce qui n'est pas le cas de ta "fonction" essai)
3) je 'ai de surcroît montré deux exemples, en m'excusant de ne pas être un VB.Netiste !!!
Il se trouve que tu n'utilises pas VB.Net, mais VBA et que .... mes deux exemples fonctionnent sous VBA !

Où est/sont donc ton/tes problème(s) ???
Difficile d'aller plus loin, ami, si :
1) tu ne parviens pas à comprendre le fonctionnement d'une fonction à l'aide de ton aide en ligne ...
et si :
2) tu n'y parviens non plus pas à l'aide d'exemples !
Quelle autre méthode préconises-tu donc pour avoir une chance de comprendre ? Ton code écrit et dont tu te contenterais de le recopier ? ===>> c'est très loin d'être mùa tasse de thé.
Retrousse tes manches et tes méninges ... (tu as eu tout ce qu'il fallait) !
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
27 oct. 2009 à 09:36
Bonjour,

Euh us-30, désolé, mais le défaut pour le passage des paramètres en VB6 est ByRef et non ByVal.

D'ailleurs, je pense que l'on devrait systématiquement indiquer Byval ou Byref dans la déclaration d'une fonction/sub pour éviter toute ambiguïté.


Calade
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
27 oct. 2009 à 19:17
Ouais, j'me comprend... C'est l'inverse que je voulais dire... Par défaut, c'est ByRef, donc.

Ensuite, je n'ai rien compliqué dans l'exemple de "bouigs", pour lui indiquer aucune nouvelle notion, qui l'écarterait de la compréhension principale qui résous son problème...
C'est sur, ce code est fonctionnelle mais pas du tout bien structuré...Bref... inutile de brûler trop vite les étapes pour "bouigs", il voulait comprendre un problème, j'espère que l'exemple lui ouvrira la voie... modeste contribution...

[i]"D'ailleurs, je pense que l'on devrait systématiquement indiquer Byval ou Byref dans la déclaration d'une fonction/sub pour éviter toute ambiguïté."
/i100% d'accord... D'ailleurs, j'ai déjà exprimé ce même point... qui est partagé par tous, en réalité... Il suffit de regarder les codes des plus chevronnés pour voir qu'ils en font un préalable à leurs écritures... mais n'étant pas royaliste...

Amicalement,
Us.
0

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

Posez votre question
bouigs Messages postés 6 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 28 octobre 2009
28 oct. 2009 à 07:42
Bonjour,
tout d'abord, merci à tous pour vos conseils.
Sinon :


On ne peut que te conseiller de lire un tutoriel sur le passage d'argument...


j'ai passé assez rapidement en revue les différents tutoriels de ce cite, mais je n'ai pas trouvé celui parlant de passage d'arguments. Quelqu'un peut t'il m'indiquer le lien ?
0
Rejoignez-nous