OVH Cloud OVH Cloud

Function, en général, retour de plusieurs arguments..

17 réponses
Avatar
f
Bonjour à tous,

En visual basic, s'il vous plait, aye pas sur la tête.
J'ai déjà butter sur ce problème l'avais je résolu et où ?
En tout cas aujourd'hui je ne suis guère avancé.

Soit une fonction nommé Test composée des arguments arg1, arg2... mon problème se pose à partir de deux... on va donc, par comodité,
s'arrêter à deux.

Function test(arg1,arg2)
arg1=arg1+1
arg2=arg2+3

'Ici comment retrourner les valeurs à l'appelant ?
end function

Si ma fonction n'a qu'un argument, fastoche :


Function test(arg1)
arg1=arg1+1

test=arg1

end function

Ma question ne porte pas sur - comment appeler la fonction ce que l'aide indique de long en large, tout comme les sites que je peux
trouver sur google - mais bien comment retourner les valeurs !

Merci de toute contribution.
Merci d'avoir lu jusque là.
Fabrice.
P.S. j'aurais pu poser cette question sur microsoft.public.fr.excel, microsoft.public.fr.access, je sais la polémique comique qu'il
y a ici avec visual basic et là c'est une question visual basic pure dont j'ai besoin d'ailleur pas fatalement que sur Word et
d'ailleurs pas sur Word en priorité.
MAIS, j'ai préféré poser la question ici, je voulais pas que ce soit pris comme une mini provocation.

10 réponses

1 2
Avatar
Geo
Bonsoir ,

Il n'y a de polémique que sur les macros inutiles,
le mot "polémique" me parait d'ailleurs un peu fort.

Une fonction retourne une valeur, celle que prend la fonction.
C'est par définition.
Donc pour passer plusieurs valeurs il suffit de déclarer des variables
publiques, elles sont connues dans la fonction (à condition de ne pas
être redéfinies dan la fonction) et en dehors de la fonction.

D'ailleurs je constate avec horreur que tu ne déclares pas tes
variables :-D

A+




Bonjour à tous,

En visual basic, s'il vous plait, aye pas sur la tête.
J'ai déjà butter sur ce problème l'avais je résolu et où ?
En tout cas aujourd'hui je ne suis guère avancé.

Soit une fonction nommé Test composée des arguments arg1, arg2...
mon

problème se pose à partir de deux... on va donc, par comodité,
s'arrêter à deux.

Function test(arg1,arg2)
arg1=arg1+1
arg2=arg2+3

'Ici comment retrourner les valeurs à l'appelant ?
end function

Si ma fonction n'a qu'un argument, fastoche :


Function test(arg1)
arg1=arg1+1

test=arg1

end function

Ma question ne porte pas sur - comment appeler la fonction ce que
l'aide indique de long en large, tout comme les sites que je peux
trouver sur google - mais bien comment retourner les valeurs !

Merci de toute contribution.
Merci d'avoir lu jusque là.
Fabrice.
P.S. j'aurais pu poser cette question sur microsoft.public.fr.excel,
microsoft.public.fr.access, je sais la polémique comique qu'il y a
ici avec visual basic et là c'est une question visual basic pure
dont

j'ai besoin d'ailleur pas fatalement que sur Word et d'ailleurs pas
sur Word en priorité.
MAIS, j'ai préféré poser la question ici, je voulais pas que ce soit
pris comme une mini provocation.


Avatar
Anacoluthe
Bonjour !

"" nous a écrit ...
En visual basic, s'il vous plait, aye pas sur la tête.
J'ai déjà butter sur ce problème l'avais je résolu et où ?
En tout cas aujourd'hui je ne suis guère avancé.
Soit une fonction nommé Test composée des arguments arg1, arg2
Function test(arg1,arg2)
arg1=arg1+1
arg2=arg2+3
end function
Ma question ne porte pas sur - comment appeler la fonction ce que
l'aide indique de long en large, tout comme les sites que je peux
trouver sur google - mais bien comment retourner les valeurs !
MAIS, j'ai préféré poser la question ici, je
voulais pas que ce soit pris comme une mini provocation.


:-D Provocation ??? Que vas-tu chercher là ! :-D
On n'a jamais mangé personne sur le mpfw, bouana

Tu sembles confondre arguments et valeur
ta fonction reçoit 2 arguments arg1 et arg2 (dont les noms
importent peu et restent internes à la fonction)
Tu renvoies ici *une* seule valeur qui s'appelle Test
Dans ta fonction, il devrait y avoir une ligne du genre
Test = Arg1 + Arg2 + 3
Dans ton code du utiliseras ensuite ta fonction ainsi
machin = Test(2,3)
avec machin qui prendra la valeur 8
Vu ?

Maintenant si tu veux que ta fonction renvoie plusieurs
valeurs, il faut la définir comme renvoyant un *tableau*
de variables. Tu auras alors dans ton code
Machin = Test(ar1,ar2)
puis tu accéderas aux diverses valeurs avec Machin(1)
Machin(2) etc ...

J'espère avoir été assez clair ;-)

Bon dimanche

Anacoluthe
« Ecrire n'est pas une vocation,
mais un désir ferme de provocation. »
- Georges RABY

Avatar
f
ReBonjour et bon dimanche à tous,
ReBonjour et bon dimanche à toi Geo,

---------------
"le mot "polémique" me parait d'ailleurs un peu fort"
--------------
Oui je me suis mal expliqué ! Moi qui vante les mérites de bonnes explications en général. J'ai fait une erreur de vocabulaire sur
le forum du mot ! ;-(
(je voulais mettre "suit le chantre de..." au moins ça à eu un mérite j'ai chercher le dictionnaire, je me rattrape.

Tu as cependant oublié le fait que je parlais de "polémique comique"
Les échanges à ce sujet me font penser un peu à une pièce de vaudeville ou de boulevard (excusez moi je ne suis pas là non plus un
spécialiste). Ne voulant pas être mal interprété ici, je trouve amusant la manière dont Nuidacil interpelle Anacoluthe ou Guy ou
Jceel (A moins que ce soit JièL) qui dans ce cas apparaissent subitement sur le forum comme surgit d'une porte dérobée de la
scène... C'est donc dans ce cadre là que j'écrivais polémique-comique. J'espère ici m'être bien fait comprendre.

-------------------
D'ailleurs je constate avec horreur que tu ne déclares pas tes variables :-D
-----------------
Oui, oui c'est une erreur que je commets courament, là je l'ai fait sciement pour ne pas allourdir le code de démonstration !

Pour la partie plus technique de ta réponse
"Donc pour passer plusieurs valeurs il suffit de déclarer des variables publiques"
Je te propose de voir ma réponse à Anacoluthe

En tout cas merci, c'est toujours un plaisir de te lire et là c'était une réponse pour moi.

Bon week end à tous.
Merci d'avoir lu jusque là.

"Geo" a écrit dans le message de news:O$
Bonsoir ,

Il n'y a de polémique que sur les macros inutiles,
le mot "polémique" me parait d'ailleurs un peu fort.

Une fonction retourne une valeur, celle que prend la fonction.
C'est par définition.
Donc pour passer plusieurs valeurs il suffit de déclarer des variables
publiques, elles sont connues dans la fonction (à condition de ne pas
être redéfinies dan la fonction) et en dehors de la fonction.

D'ailleurs je constate avec horreur que tu ne déclares pas tes
variables :-D

A+




Bonjour à tous,

En visual basic, s'il vous plait, aye pas sur la tête.
J'ai déjà butter sur ce problème l'avais je résolu et où ?
En tout cas aujourd'hui je ne suis guère avancé.

Soit une fonction nommé Test composée des arguments arg1, arg2...
mon

problème se pose à partir de deux... on va donc, par comodité,
s'arrêter à deux.

Function test(arg1,arg2)
arg1=arg1+1
arg2=arg2+3

'Ici comment retrourner les valeurs à l'appelant ?
end function

Si ma fonction n'a qu'un argument, fastoche :


Function test(arg1)
arg1=arg1+1

test=arg1

end function

Ma question ne porte pas sur - comment appeler la fonction ce que
l'aide indique de long en large, tout comme les sites que je peux
trouver sur google - mais bien comment retourner les valeurs !

Merci de toute contribution.
Merci d'avoir lu jusque là.
Fabrice.
P.S. j'aurais pu poser cette question sur microsoft.public.fr.excel,
microsoft.public.fr.access, je sais la polémique comique qu'il y a
ici avec visual basic et là c'est une question visual basic pure
dont

j'ai besoin d'ailleur pas fatalement que sur Word et d'ailleurs pas
sur Word en priorité.
MAIS, j'ai préféré poser la question ici, je voulais pas que ce soit
pris comme une mini provocation.





Avatar
Geo
Bonjour ,

Tout cela est dit avec le sourire, c'est évident.

s'il m'est arrivé à mes débuts sur Internet de me chamailler par
courriel interposé, j'ai fini par comprendre que c'était inutile pour
plusieurs raisons.
Donc tant que ça reste de la taquinerie, pas de problème.
De plus à travers ces échanges il y a presque toujours une progression
dans les solutions.

Je n'ai pas vu ta réponse à Anacoluthe, mais je n'avais pas pensé à sa
solution, que je vais vérifier, bien sûr.
Si elle marche je ne dirai rien, mais si elle ne marche pas, je ne
vais pas me priver de le lui dire.
Certes, c'est peu probable, mais j'espère bien un jour trouver mieux
que lui.
On peut rêver ...

Bon dimanche.
Avatar
f
Rebonjour et bon Dimanche à tous,
Rebonjour et bon Dimanche Anacoluthe,
Je viens de répondre à Geo et je me dis je me fais vraiment mal comprendre ou cela fait partie de votre sympathique jeu :
----------
" :-D Provocation ??? Que vas-tu chercher là ! "
-------------
J'avais dis mini-provocation ;-)

----------------
"ta fonction reçoit 2 arguments arg1 et arg2 (dont les noms importent peu et restent internes à la fonction)"
-------------
Ok d'accord/compris
-------------------
"Dans ta fonction, il devrait y avoir une ligne du genre Test = Arg1 + Arg2 + 3"
-------------------
Ca pourrais être une solution.

-----------
"Maintenant si tu veux que ta fonction renvoie plusieurs valeurs"
----------
Oui c'est exactement ça !

-------------------------
"il faut la définir comme renvoyant un *tableau* de variables. "
---------------------
Oui j'ai justement eu du mal dernièrement à déclarer une variable en tant que tableau sous Visual Basic, en Pascal il fallait faire
Array, mais l'aide visual envoie totalement dans une autre direction.

Euh ! une question, au sujet de ta réponse, j'aurais le code :
---------------
"Machin = Test(ar1,ar2)"
-------------
En tant que code appelant la function ? ou dans la function ? si la réponse est dans le code appelant la function, que faut il
mettre comme code retour de la function resterai ma question...?

Je vais donc creuser dans ce sens
En tout cas merci. Ca me confirme déjà que c'est possible


Merci encore.
Merci d'avoir lu jusque là.

Le théâtre est un art violemment polémique. Il ressemble à la guerre. La représentation est toujours le simulacre d'un conflit
[Antoine Vitez]



"Anacoluthe" a écrit dans le message de news:
Bonjour !

"" nous a écrit ...
En visual basic, s'il vous plait, aye pas sur la tête.
J'ai déjà butter sur ce problème l'avais je résolu et où ?
En tout cas aujourd'hui je ne suis guère avancé.
Soit une fonction nommé Test composée des arguments arg1, arg2
Function test(arg1,arg2)
arg1=arg1+1
arg2=arg2+3
end function
Ma question ne porte pas sur - comment appeler la fonction ce que
l'aide indique de long en large, tout comme les sites que je peux
trouver sur google - mais bien comment retourner les valeurs !
MAIS, j'ai préféré poser la question ici, je
voulais pas que ce soit pris comme une mini provocation.


:-D Provocation ??? Que vas-tu chercher là ! :-D
On n'a jamais mangé personne sur le mpfw, bouana

Tu sembles confondre arguments et valeur
ta fonction reçoit 2 arguments arg1 et arg2 (dont les noms
importent peu et restent internes à la fonction)
Tu renvoies ici *une* seule valeur qui s'appelle Test
Dans ta fonction, il devrait y avoir une ligne du genre
Test = Arg1 + Arg2 + 3
Dans ton code du utiliseras ensuite ta fonction ainsi
machin = Test(2,3)
avec machin qui prendra la valeur 8
Vu ?

Maintenant si tu veux que ta fonction renvoie plusieurs
valeurs, il faut la définir comme renvoyant un *tableau*
de variables. Tu auras alors dans ton code
Machin = Test(ar1,ar2)
puis tu accéderas aux diverses valeurs avec Machin(1)
Machin(2) etc ...

J'espère avoir été assez clair ;-)

Bon dimanche

Anacoluthe
« Ecrire n'est pas une vocation,
mais un désir ferme de provocation. »
- Georges RABY




Avatar
f
Bonjour Geo,
Oui je sais que je n'intervients pas assez sur le forum, je conçois par le fait d'être difficilement lisible, mais j'aprécie
grandement le ton d'au moins 90% des contributeur permanent du forum.

------------------
"s'il m'est arrivé à mes débuts sur Internet de me chamailler par
courriel interposé, j'ai fini par comprendre que c'était inutile pour
plusieurs raisons."
--------------
Tu comprendras donc que je ne les cites pas les 90 ni les 10% (pour les 10% ils ne sont pas toujours en face du mot grandement !) et
je suis sur que tu sais de quoi je parle !
Je vous lis tous les jours depuis un an, je connais donc le ton du forum, mais n'intervenant pas souvent, je me fais mal comprendre.
----------
"Je n'ai pas vu ta réponse à Anacoluthe"
------
Normal j'ai mis plus longtemps que prévu pour répondre !

-----------
On peut rêver ...
-----------
Aussi trouver des citations toujours à propos, toujours au ton juste.
Tssst décidément cet Anacoluthe !
Merci Geo
Merci à tous
Il va falloir rêver car, pour que les choses deviennent possibles, il faut d'abord les rêver
Madelaine Chapsal

"Geo" a écrit dans le message de news:
Bonjour ,

Tout cela est dit avec le sourire, c'est évident.

s'il m'est arrivé à mes débuts sur Internet de me chamailler par
courriel interposé, j'ai fini par comprendre que c'était inutile pour
plusieurs raisons.
Donc tant que ça reste de la taquinerie, pas de problème.
De plus à travers ces échanges il y a presque toujours une progression
dans les solutions.

Je n'ai pas vu ta réponse à Anacoluthe, mais je n'avais pas pensé à sa
solution, que je vais vérifier, bien sûr.
Si elle marche je ne dirai rien, mais si elle ne marche pas, je ne
vais pas me priver de le lui dire.
Certes, c'est peu probable, mais j'espère bien un jour trouver mieux
que lui.
On peut rêver ...

Bon dimanche.









Avatar
Guy Moncomble
Bonjour à tous,
dans le message <%,

| Soit une fonction nommé Test composée des arguments arg1, arg2... mon
| problème se pose à partir de deux... on va donc, par comodité,
| s'arrêter à deux.
|
| Function test(arg1,arg2)
| arg1=arg1+1
| arg2=arg2+3
|
| 'Ici comment retrourner les valeurs à l'appelant ?
| end function
|
| Si ma fonction n'a qu'un argument, fastoche :
|
|
| Function test(arg1)
| arg1=arg1+1
|
| test=arg1
|
| end function
|
| Ma question ne porte pas sur - comment appeler la fonction ce que
| l'aide indique de long en large, tout comme les sites que je peux
| trouver sur google - mais bien comment retourner les valeurs !
|
| Merci de toute contribution.
| Merci d'avoir lu jusque là.
| Fabrice.
| P.S. j'aurais pu poser cette question sur microsoft.public.fr.excel,
| microsoft.public.fr.access, je sais la polémique comique qu'il y a
| ici avec visual basic et là c'est une question visual basic pure dont
| j'ai besoin d'ailleur pas fatalement que sur Word et d'ailleurs pas
| sur Word en priorité.
| MAIS, j'ai préféré poser la question ici, je voulais pas que ce soit
| pris comme une mini provocation.

Il y a plusieurs façons de transmettre des valeurs entre deux procédures

- pour une sub(routine) comme pour une fonction, comme dans l'exemple
donné, la modification de arg1 et arg2 est répercutée à la fonction
appelante parce que l'argument a été transmis ByRef. La déclaration
ByRef est implicite, c'est l'option par défaut. Cela signifie que l'on a
en fait transmis l'adresse (pour faire simple) et que les deux
procédures travaillent sur la même variable. Si l'on veut éviter cela il
faut, dans la définition de la fonction appelée déclarer l'argumet
ByVal. Cette option revient à travailler sur une **copie** de la
variable qui n'est alors pas modifiée.
Dans l'exemple :
Function test(arg1,arg2)
arg1=arg1+1
arg2=arg2+3,
arg1 et arg2, du moins les variables qui portent leur non dans la
procédure appelante, sont bel et bien modifiées. S'il y a des variables,
bien sûr.
Un autre mode de transmission est l'utilisation des fonctions qui
retournent une variable qui peut être d'un type quelconque y compris
défini par l'utilisateur.
Le fait à noter est que les Function ne se contentent pas de retourner
des valeurs : il faut donc déclarer les arguments avec le plus grand
soin. On pourrait dire qu'une Function ne doit pas utiliser des
arguments ByRef...

D'autres modes de transmission sont possibles :

- utiliser des variables globales publiques. Cela est évidemment
pratiques, mais doit être prohibé :
- à cause des difficultés de débogage et des effets de bord
possibles, en particulier si l'on utilise les propriétés par défaut des
objets VB, qui induisent des conversions de type parfois mal maitrisées.
- parce que la réutilisation de telles procédures dans d'autres
projets est délicate.
- utiliser le typage Static qui permet de conserver des valeurs de
variable alors même que le procédure qui les a créés n'est plus active.

Enfin à l'appui de ce qu'écrit Geo à propos des déclarations de
variables, voici un petit extrait de l'aide VBA :

Attention Une procédure peut utiliser une variable qui n'est pas
explicitement déclarée dans cette dernière. Un conflit de nom peut
toutefois survenir si un élément défini au niveau module porte le même
nom. Si la procédure fait référence à une variable non déclarée portant
le même nom qu'une autre procédure, constante ou variable, la procédure
est supposée faire référence au nom de niveau module. Afin d'éviter ce
type de conflit, déclarez explicitement les variables. Pour imposer la
déclaration explicite des variables, vous pouvez utiliser l'instruction
Option Explicit.

--
A+

GMO MVP WORD
Avatar
f
Rebonjour et bon dimanche à tous,
Rebonjour, merciet bon dimanche à toi Guy,

Merci c'étais très intéressant mais j'avais un peur de toucher la boîte de pandore...
Je voulais juste que ma fonction retourne plusieurs valeurs et ton message me rappelle la solution d'expédient que j'avais utilisé :
Ah Ahrrrrrrrrrrrrrr !
J'avais utiliser barbarement plusieurs variables globales !
En fait on peut dans de petits programme comme je fais avoir une routine qui a un argument simplement en entrée mais l'exploite et
peu ainsi retourner un grand nombre de valeur trouvées.
La quintescence de la foncttion quoi ?
Mais je ne sais pas faire :-(((, je poursuis donc la piste d'Anacoluthe...

En tout cas merci de ta contribution qui rappelle les bases somme toute complexes pour moi de la fonction.

Fabrice.
Pas de citation mais moi je voulais
"juste vivre à la campagne" "avec 6,55957 fois plus de poules"
Avatar
Geo
Bonsoir ,



Il va falloir rêver car, pour que les choses deviennent possibles,
il

faut d'abord les rêver
Madelaine Chapsal


Bien joué :-)

A+

Avatar
Geo
Bonsoir Guy ,


[...]
Un autre mode de transmission est l'utilisation des fonctions qui
retournent une variable qui peut être d'un type quelconque y compris
défini par l'utilisateur.


Évidemment, bien sur !
Comme un type utilisateur peut comporter plusieurs données de type
différent, le tour est joué.

Bonnse soirée

1 2