[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
7
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