Bonjour
peut-on passer une fonction comme argument d'une fonction dans VB ?
merci
Bonjour
peut-on passer une fonction comme argument d'une fonction dans VB ?
merci
Bonjour
peut-on passer une fonction comme argument d'une fonction dans VB ?
merci
peut-on passer une fonction comme argument d'une fonction dans VB ?
peut-on passer une fonction comme argument d'une fonction dans VB ?
peut-on passer une fonction comme argument d'une fonction dans VB ?
peut-on passer une fonction comme argument d'une fonction dans VB ?
peut-on passer une fonction comme argument d'une fonction dans VB ?
peut-on passer une fonction comme argument d'une fonction dans VB ?
merci
n'etant pas un grand programmateur
je ne suis pas sur d'avoir tout compris
si j'ai une fonction qui s'appelle FA et l'autre FB et que je veux passer FA
comme argument dans FB
comme j'ecris cela avec callby name
function FA (a as double) as double
{....}
End function
function FB (CallByName FA, b as double) as double
{....}
End Function
Quelque chose dans ce genre ?
merci
n'etant pas un grand programmateur
je ne suis pas sur d'avoir tout compris
si j'ai une fonction qui s'appelle FA et l'autre FB et que je veux passer FA
comme argument dans FB
comme j'ecris cela avec callby name
function FA (a as double) as double
{....}
End function
function FB (CallByName FA, b as double) as double
{....}
End Function
Quelque chose dans ce genre ?
merci
n'etant pas un grand programmateur
je ne suis pas sur d'avoir tout compris
si j'ai une fonction qui s'appelle FA et l'autre FB et que je veux passer FA
comme argument dans FB
comme j'ecris cela avec callby name
function FA (a as double) as double
{....}
End function
function FB (CallByName FA, b as double) as double
{....}
End Function
Quelque chose dans ce genre ?
merci
n'etant pas un grand programmateur
je ne suis pas sur d'avoir tout compris
si j'ai une fonction qui s'appelle FA et l'autre FB et que je veux
passer FA comme argument dans FB
comme j'ecris cela avec callby name
function FA (a as double) as double
{....}
End function
function FB (CallByName FA, b as double) as double
{....}
End Function
Quelque chose dans ce genre ?
merci
n'etant pas un grand programmateur
je ne suis pas sur d'avoir tout compris
si j'ai une fonction qui s'appelle FA et l'autre FB et que je veux
passer FA comme argument dans FB
comme j'ecris cela avec callby name
function FA (a as double) as double
{....}
End function
function FB (CallByName FA, b as double) as double
{....}
End Function
Quelque chose dans ce genre ?
merci
n'etant pas un grand programmateur
je ne suis pas sur d'avoir tout compris
si j'ai une fonction qui s'appelle FA et l'autre FB et que je veux
passer FA comme argument dans FB
comme j'ecris cela avec callby name
function FA (a as double) as double
{....}
End function
function FB (CallByName FA, b as double) as double
{....}
End Function
Quelque chose dans ce genre ?
fulgar wrote:merci
n'etant pas un grand programmateur
je ne suis pas sur d'avoir tout compris
si j'ai une fonction qui s'appelle FA et l'autre FB et que je veux
passer FA comme argument dans FB
comme j'ecris cela avec callby name
function FA (a as double) as double
{....}
End function
function FB (CallByName FA, b as double) as double
{....}
End Function
Quelque chose dans ce genre ?
En complément de l'exemple de François, voici un petit bout de
code, testé et fonctionnel.
Les fonctions "perimetre", "aire" et "volume" sont 3 fonctions "FA"
La fonction "FonctionGenerique" est ta fonction "FB"
Depuis Command1, on appelle FB en lui passant en argument les noms
des fonctions "FA":
Depuis FB, on va appeller les 3 focntions FA.
Voici le code, à écrire simplement dans une form:
Option Explicit
Private Const PI As Double = 3.141592653
Public Function perimetre(rayon As Double) As Double
perimetre = 2 * PI * rayon
End Function
Public Function aire(rayon As Double) As Double
aire = PI * rayon ^ 2
End Function
Public Function volume(rayon As Double) As Double
volume = 4 / 3 * PI * rayon ^ 3
End Function
Public Function FonctionGenerique(CallBackFunction As String, parametre As
Variant) As Variant
FonctionGenerique = CallByName(Me, CallBackFunction, VbMethod,
parametre)
End Function
Private Sub Command1_Click()
Dim r As Double
Dim result As Double
r = 10
result = FonctionGenerique("perimetre", r)
MsgBox "le perimetre est de " & result
result = FonctionGenerique("aire", r)
MsgBox "l'aire est de " & result
result = FonctionGenerique("volume", r)
MsgBox "le volume est de " & result
End Sub
'-------------------------------------------------------
Note : L'usage de pointeurs de fonctions ou de CallByName en VB
est normalement réservé à des cas très particuliers. Devoir les
employer (à part pour un exercice de style) peut être la marque
d'une erreur de design de l'application.
Dans un vrai programme, je n'écrirais personnellement jamais un
tel code.
J'écrirais:
if choix="perimetre" then
result = perimetre(rayon)
elseif choix = "aire" then
result = aire(rayon)
... etc.
'------------
L'usage de ce genre de chose est en général réservé pour les
appels de fonctions dite "CallBack".
Le petit lien ici explique brièvement le concept:
http://www.newty.de/fpt/callback.html
Le cas type, c'est de passer une fonction CallBack pour implémenter
la comparaison dans un algo de tri. Ca permet d'avoir un seule algorithme
de tri (générique) et de lui passer une fonction dédiée pour la
comparaison, ce qui rend les choses très souples.
Bref, à toi de voir si le CallByName est bien une bonne idée :-)
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
fulgar wrote:
merci
n'etant pas un grand programmateur
je ne suis pas sur d'avoir tout compris
si j'ai une fonction qui s'appelle FA et l'autre FB et que je veux
passer FA comme argument dans FB
comme j'ecris cela avec callby name
function FA (a as double) as double
{....}
End function
function FB (CallByName FA, b as double) as double
{....}
End Function
Quelque chose dans ce genre ?
En complément de l'exemple de François, voici un petit bout de
code, testé et fonctionnel.
Les fonctions "perimetre", "aire" et "volume" sont 3 fonctions "FA"
La fonction "FonctionGenerique" est ta fonction "FB"
Depuis Command1, on appelle FB en lui passant en argument les noms
des fonctions "FA":
Depuis FB, on va appeller les 3 focntions FA.
Voici le code, à écrire simplement dans une form:
Option Explicit
Private Const PI As Double = 3.141592653
Public Function perimetre(rayon As Double) As Double
perimetre = 2 * PI * rayon
End Function
Public Function aire(rayon As Double) As Double
aire = PI * rayon ^ 2
End Function
Public Function volume(rayon As Double) As Double
volume = 4 / 3 * PI * rayon ^ 3
End Function
Public Function FonctionGenerique(CallBackFunction As String, parametre As
Variant) As Variant
FonctionGenerique = CallByName(Me, CallBackFunction, VbMethod,
parametre)
End Function
Private Sub Command1_Click()
Dim r As Double
Dim result As Double
r = 10
result = FonctionGenerique("perimetre", r)
MsgBox "le perimetre est de " & result
result = FonctionGenerique("aire", r)
MsgBox "l'aire est de " & result
result = FonctionGenerique("volume", r)
MsgBox "le volume est de " & result
End Sub
'-------------------------------------------------------
Note : L'usage de pointeurs de fonctions ou de CallByName en VB
est normalement réservé à des cas très particuliers. Devoir les
employer (à part pour un exercice de style) peut être la marque
d'une erreur de design de l'application.
Dans un vrai programme, je n'écrirais personnellement jamais un
tel code.
J'écrirais:
if choix="perimetre" then
result = perimetre(rayon)
elseif choix = "aire" then
result = aire(rayon)
... etc.
'------------
L'usage de ce genre de chose est en général réservé pour les
appels de fonctions dite "CallBack".
Le petit lien ici explique brièvement le concept:
http://www.newty.de/fpt/callback.html
Le cas type, c'est de passer une fonction CallBack pour implémenter
la comparaison dans un algo de tri. Ca permet d'avoir un seule algorithme
de tri (générique) et de lui passer une fonction dédiée pour la
comparaison, ce qui rend les choses très souples.
Bref, à toi de voir si le CallByName est bien une bonne idée :-)
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ; _no_spam_jean_marc_n2@yahoo.fr
fulgar wrote:merci
n'etant pas un grand programmateur
je ne suis pas sur d'avoir tout compris
si j'ai une fonction qui s'appelle FA et l'autre FB et que je veux
passer FA comme argument dans FB
comme j'ecris cela avec callby name
function FA (a as double) as double
{....}
End function
function FB (CallByName FA, b as double) as double
{....}
End Function
Quelque chose dans ce genre ?
En complément de l'exemple de François, voici un petit bout de
code, testé et fonctionnel.
Les fonctions "perimetre", "aire" et "volume" sont 3 fonctions "FA"
La fonction "FonctionGenerique" est ta fonction "FB"
Depuis Command1, on appelle FB en lui passant en argument les noms
des fonctions "FA":
Depuis FB, on va appeller les 3 focntions FA.
Voici le code, à écrire simplement dans une form:
Option Explicit
Private Const PI As Double = 3.141592653
Public Function perimetre(rayon As Double) As Double
perimetre = 2 * PI * rayon
End Function
Public Function aire(rayon As Double) As Double
aire = PI * rayon ^ 2
End Function
Public Function volume(rayon As Double) As Double
volume = 4 / 3 * PI * rayon ^ 3
End Function
Public Function FonctionGenerique(CallBackFunction As String, parametre As
Variant) As Variant
FonctionGenerique = CallByName(Me, CallBackFunction, VbMethod,
parametre)
End Function
Private Sub Command1_Click()
Dim r As Double
Dim result As Double
r = 10
result = FonctionGenerique("perimetre", r)
MsgBox "le perimetre est de " & result
result = FonctionGenerique("aire", r)
MsgBox "l'aire est de " & result
result = FonctionGenerique("volume", r)
MsgBox "le volume est de " & result
End Sub
'-------------------------------------------------------
Note : L'usage de pointeurs de fonctions ou de CallByName en VB
est normalement réservé à des cas très particuliers. Devoir les
employer (à part pour un exercice de style) peut être la marque
d'une erreur de design de l'application.
Dans un vrai programme, je n'écrirais personnellement jamais un
tel code.
J'écrirais:
if choix="perimetre" then
result = perimetre(rayon)
elseif choix = "aire" then
result = aire(rayon)
... etc.
'------------
L'usage de ce genre de chose est en général réservé pour les
appels de fonctions dite "CallBack".
Le petit lien ici explique brièvement le concept:
http://www.newty.de/fpt/callback.html
Le cas type, c'est de passer une fonction CallBack pour implémenter
la comparaison dans un algo de tri. Ca permet d'avoir un seule algorithme
de tri (générique) et de lui passer une fonction dédiée pour la
comparaison, ce qui rend les choses très souples.
Bref, à toi de voir si le CallByName est bien une bonne idée :-)
--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Merci beaucoup, c'est plus clair
juste en complément le 1er argument de CallByName correspond à quoi ?
merci
Merci beaucoup, c'est plus clair
juste en complément le 1er argument de CallByName correspond à quoi ?
merci
Merci beaucoup, c'est plus clair
juste en complément le 1er argument de CallByName correspond à quoi ?
merci
> "Jean-marc" a écrit dans le
message de news: 46d088bb$0$14231$fulgar wrote:merci
n'etant pas un grand programmateur
> "Jean-marc" <NO_SPAM_jean_marc_n2@yahoo.fr.invalid> a écrit dans le
message de news: 46d088bb$0$14231$ba620e4c@news.skynet.be...
fulgar wrote:
merci
n'etant pas un grand programmateur
> "Jean-marc" a écrit dans le
message de news: 46d088bb$0$14231$fulgar wrote:merci
n'etant pas un grand programmateur