OVH Cloud OVH Cloud

appeler une fonction ou une procedure

6 réponses
Avatar
seb-seb
bonjour
est il possible d'appeler une procedure avec une variable string
genre call myvar
est myvar = "CMDok_click" ?
enfin si vous voyez ce que je veus dire
merci

6 réponses

Avatar
Zoury
Salut Seb! :O)

La fonction CallByName te permet d'appeler un membre *publique* d'un objet
en fonction de son nom.. alors si tu veux appeler une fonction, elle *doit*
est membre d'un objet, elle ne peut pas être dans un module.

par exemple :
'***
'Form 1
Option Explicit

Private Sub Form_Load()
Call CallByName(Me, _
"ShowMessage", _
VbMethod, _
"Prompt", _
"Title")
End Sub

Public Sub ShowMessage(ByVal Prompt As String, ByVal Title As String)
Call MsgBox(Prompt, vbOKOnly, Title)
End Sub
'***

aussi une petite note concernant ceci :
est myvar = "CMDok_click" ?



je te conseille plutôt de créer une fonction qui exécute le traitement voulu
et d'appeler cette fonction aux endroits prévues au lieu d'appeler le code
d'une fonction appeler lors d'un événement... c'est une meilleure pratique
de programmation.. ça rend le code plus facile à maintenir, spécialement si
tu appliques des modifications à l'interface.

Exemple :
'***
' Form1
' 2 CommandButton
Option Explicit

Private Sub Command1_Click()
Call Sauvegarder
End Sub

Private Sub Command2_Click()
Call Sauvegarder
End Sub

Public Sub Sauvegarder()
' code code code
End Sub
'***

au lieu de :
'***
Option Explicit

Private Sub Command1_Click()
Call Sauvegarder
End Sub

Private Sub Command2_Click()
Call Command1_Click
End Sub

Public Sub Sauvegarder()
' code code code
End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
"seb-seb" wrote in message
news:
bonjour
est il possible d'appeler une procedure avec une variable string
genre call myvar
est myvar = "CMDok_click" ?
enfin si vous voyez ce que je veus dire
merci




Avatar
Zoury
> Public Sub ShowMessage(ByVal Prompt As String, ByVal Title As String)



Note que le ByVal est totalement inutile... je l'avais placé pour testé
quelque chose et j'ai oublié de le remettre à ByRef..


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
Avatar
seb-seb
j'ai rien compris de ce que tu me raconte

alors je vais etre plus concret
en gros j'ai form1 et form2
form1 appele une procedure publique de form2 en lui passant comme parametre
un nom de procedure publique contenu dans form1
et form2 quand elle en a envie va executer un call myvar (string)
et je veux savoir si on peut donc faire ca car ca m'aiderai niveau
evolutivité du programme

merci


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:%
Salut Seb! :O)

La fonction CallByName te permet d'appeler un membre *publique* d'un objet
en fonction de son nom.. alors si tu veux appeler une fonction, elle


*doit*
est membre d'un objet, elle ne peut pas être dans un module.

par exemple :
'***
'Form 1
Option Explicit

Private Sub Form_Load()
Call CallByName(Me, _
"ShowMessage", _
VbMethod, _
"Prompt", _
"Title")
End Sub

Public Sub ShowMessage(ByVal Prompt As String, ByVal Title As String)
Call MsgBox(Prompt, vbOKOnly, Title)
End Sub
'***

aussi une petite note concernant ceci :
> est myvar = "CMDok_click" ?

je te conseille plutôt de créer une fonction qui exécute le traitement


voulu
et d'appeler cette fonction aux endroits prévues au lieu d'appeler le code
d'une fonction appeler lors d'un événement... c'est une meilleure pratique
de programmation.. ça rend le code plus facile à maintenir, spécialement


si
tu appliques des modifications à l'interface.

Exemple :
'***
' Form1
' 2 CommandButton
Option Explicit

Private Sub Command1_Click()
Call Sauvegarder
End Sub

Private Sub Command2_Click()
Call Sauvegarder
End Sub

Public Sub Sauvegarder()
' code code code
End Sub
'***

au lieu de :
'***
Option Explicit

Private Sub Command1_Click()
Call Sauvegarder
End Sub

Private Sub Command2_Click()
Call Command1_Click
End Sub

Public Sub Sauvegarder()
' code code code
End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
"seb-seb" wrote in message
news:
> bonjour
> est il possible d'appeler une procedure avec une variable string
> genre call myvar
> est myvar = "CMDok_click" ?
> enfin si vous voyez ce que je veus dire
> merci
>
>




Avatar
Zoury
Voici un exemple qui correspond plus à ta situation, en espérant que ce soit
moins nébuleux à comprendre.. mais je dois t'avouer que je trouve ta
conception assez spéciale.. ;O)

Démarre toi un projet avec 2 formulaires
'***
' Form1
' 1 CommandButton (assez gros)
Option Explicit

Private Sub Command1_Click()
Call Form2.Show
Call Form2.InitFunctionCall(Me, "ShowMessage")
End Sub

Private Sub Form_Load()

Command1.Caption = "Afficher et appeler la fonction publique de Form2"

End Sub

Public Sub ShowMessage(ByRef Prompt As String, ByRef Title As String)
Call MsgBox(Prompt, vbOKOnly, Title)
End Sub
'***

'***
' Form2
' 1 CommandButton (assez gros)
Option Explicit

Private m_obj As Object
Private m_sProcName As String

Public Sub InitFunctionCall(ByRef Object As Object, ByRef ProcName As
String)
Set m_obj = Object
m_sProcName = ProcName
End Sub

Private Sub Command1_Click()
If (Not m_obj Is Nothing And LenB(m_sProcName) > 0) Then
Call CallByName(m_obj, m_sProcName, VbMethod, "Salut tous le monde",
"Test de CallByName")
End If
End Sub

Private Sub Form_Load()
Command1.Caption = "Appeler la procédure publique de Form1 (celle reçu
en paramètre)"
End Sub
'***

Exécute le en pas à pas si tu n'arrive pas à comprendre ce qui se passe...
si tu as d'autres questions n'hésite pas.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
"seb-seb" wrote in message
news:OmZMb%
j'ai rien compris de ce que tu me raconte

alors je vais etre plus concret
en gros j'ai form1 et form2
form1 appele une procedure publique de form2 en lui passant comme


parametre
un nom de procedure publique contenu dans form1
et form2 quand elle en a envie va executer un call myvar (string)
et je veux savoir si on peut donc faire ca car ca m'aiderai niveau
evolutivité du programme

merci


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:%
> Salut Seb! :O)
>
> La fonction CallByName te permet d'appeler un membre *publique* d'un


objet
> en fonction de son nom.. alors si tu veux appeler une fonction, elle
*doit*
> est membre d'un objet, elle ne peut pas être dans un module.
>
> par exemple :
> '***
> 'Form 1
> Option Explicit
>
> Private Sub Form_Load()
> Call CallByName(Me, _
> "ShowMessage", _
> VbMethod, _
> "Prompt", _
> "Title")
> End Sub
>
> Public Sub ShowMessage(ByVal Prompt As String, ByVal Title As String)
> Call MsgBox(Prompt, vbOKOnly, Title)
> End Sub
> '***
>
> aussi une petite note concernant ceci :
> > est myvar = "CMDok_click" ?
>
> je te conseille plutôt de créer une fonction qui exécute le traitement
voulu
> et d'appeler cette fonction aux endroits prévues au lieu d'appeler le


code
> d'une fonction appeler lors d'un événement... c'est une meilleure


pratique
> de programmation.. ça rend le code plus facile à maintenir, spécialement
si
> tu appliques des modifications à l'interface.
>
> Exemple :
> '***
> ' Form1
> ' 2 CommandButton
> Option Explicit
>
> Private Sub Command1_Click()
> Call Sauvegarder
> End Sub
>
> Private Sub Command2_Click()
> Call Sauvegarder
> End Sub
>
> Public Sub Sauvegarder()
> ' code code code
> End Sub
> '***
>
> au lieu de :
> '***
> Option Explicit
>
> Private Sub Command1_Click()
> Call Sauvegarder
> End Sub
>
> Private Sub Command2_Click()
> Call Command1_Click
> End Sub
>
> Public Sub Sauvegarder()
> ' code code code
> End Sub
> '***
>
> --
> Cordialement
> Yanick Lefebvre - MVP pour Visual Basic
> http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
>
> Merci de poster les réponses au groupe afin d'en faire profiter à tous
> "seb-seb" wrote in message
> news:
> > bonjour
> > est il possible d'appeler une procedure avec une variable string
> > genre call myvar
> > est myvar = "CMDok_click" ?
> > enfin si vous voyez ce que je veus dire
> > merci
> >
> >
>
>




Avatar
seb-seb
je n'ai fait que la lire
et apparament c ca que je voulais
en fait c'est le callbyname plus precisement

bien le merci


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news:%
Voici un exemple qui correspond plus à ta situation, en espérant que ce


soit
moins nébuleux à comprendre.. mais je dois t'avouer que je trouve ta
conception assez spéciale.. ;O)

Démarre toi un projet avec 2 formulaires
'***
' Form1
' 1 CommandButton (assez gros)
Option Explicit

Private Sub Command1_Click()
Call Form2.Show
Call Form2.InitFunctionCall(Me, "ShowMessage")
End Sub

Private Sub Form_Load()

Command1.Caption = "Afficher et appeler la fonction publique de Form2"

End Sub

Public Sub ShowMessage(ByRef Prompt As String, ByRef Title As String)
Call MsgBox(Prompt, vbOKOnly, Title)
End Sub
'***

'***
' Form2
' 1 CommandButton (assez gros)
Option Explicit

Private m_obj As Object
Private m_sProcName As String

Public Sub InitFunctionCall(ByRef Object As Object, ByRef ProcName As
String)
Set m_obj = Object
m_sProcName = ProcName
End Sub

Private Sub Command1_Click()
If (Not m_obj Is Nothing And LenB(m_sProcName) > 0) Then
Call CallByName(m_obj, m_sProcName, VbMethod, "Salut tous le


monde",
"Test de CallByName")
End If
End Sub

Private Sub Form_Load()
Command1.Caption = "Appeler la procédure publique de Form1 (celle reçu
en paramètre)"
End Sub
'***

Exécute le en pas à pas si tu n'arrive pas à comprendre ce qui se passe...
si tu as d'autres questions n'hésite pas.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
"seb-seb" wrote in message
news:OmZMb%
> j'ai rien compris de ce que tu me raconte
>
> alors je vais etre plus concret
> en gros j'ai form1 et form2
> form1 appele une procedure publique de form2 en lui passant comme
parametre
> un nom de procedure publique contenu dans form1
> et form2 quand elle en a envie va executer un call myvar (string)
> et je veux savoir si on peut donc faire ca car ca m'aiderai niveau
> evolutivité du programme
>
> merci
>
>
> "Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
> news:%
> > Salut Seb! :O)
> >
> > La fonction CallByName te permet d'appeler un membre *publique* d'un
objet
> > en fonction de son nom.. alors si tu veux appeler une fonction, elle
> *doit*
> > est membre d'un objet, elle ne peut pas être dans un module.
> >
> > par exemple :
> > '***
> > 'Form 1
> > Option Explicit
> >
> > Private Sub Form_Load()
> > Call CallByName(Me, _
> > "ShowMessage", _
> > VbMethod, _
> > "Prompt", _
> > "Title")
> > End Sub
> >
> > Public Sub ShowMessage(ByVal Prompt As String, ByVal Title As String)
> > Call MsgBox(Prompt, vbOKOnly, Title)
> > End Sub
> > '***
> >
> > aussi une petite note concernant ceci :
> > > est myvar = "CMDok_click" ?
> >
> > je te conseille plutôt de créer une fonction qui exécute le traitement
> voulu
> > et d'appeler cette fonction aux endroits prévues au lieu d'appeler le
code
> > d'une fonction appeler lors d'un événement... c'est une meilleure
pratique
> > de programmation.. ça rend le code plus facile à maintenir,


spécialement
> si
> > tu appliques des modifications à l'interface.
> >
> > Exemple :
> > '***
> > ' Form1
> > ' 2 CommandButton
> > Option Explicit
> >
> > Private Sub Command1_Click()
> > Call Sauvegarder
> > End Sub
> >
> > Private Sub Command2_Click()
> > Call Sauvegarder
> > End Sub
> >
> > Public Sub Sauvegarder()
> > ' code code code
> > End Sub
> > '***
> >
> > au lieu de :
> > '***
> > Option Explicit
> >
> > Private Sub Command1_Click()
> > Call Sauvegarder
> > End Sub
> >
> > Private Sub Command2_Click()
> > Call Command1_Click
> > End Sub
> >
> > Public Sub Sauvegarder()
> > ' code code code
> > End Sub
> > '***
> >
> > --
> > Cordialement
> > Yanick Lefebvre - MVP pour Visual Basic
> > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
> > http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
> >
> > Merci de poster les réponses au groupe afin d'en faire profiter à tous
> > "seb-seb" wrote in message
> > news:
> > > bonjour
> > > est il possible d'appeler une procedure avec une variable string
> > > genre call myvar
> > > est myvar = "CMDok_click" ?
> > > enfin si vous voyez ce que je veus dire
> > > merci
> > >
> > >
> >
> >
>
>




Avatar
ng
En effet c'est CallByName dont tu as besoin, qui permet d'appeler une
méthode publique (par son nom passé en string) d'une classe uniquement, les
formulaires constituant des classes, CallByName alors peut très bien
fonctionner, cf code de Zoury.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/

seb-seb wrote:
je n'ai fait que la lire
et apparament c ca que je voulais
en fait c'est le callbyname plus precisement

bien le merci


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message
de news:%
Voici un exemple qui correspond plus à ta situation, en espérant que
ce soit moins nébuleux à comprendre.. mais je dois t'avouer que je
trouve ta conception assez spéciale.. ;O)

Démarre toi un projet avec 2 formulaires
'***
' Form1
' 1 CommandButton (assez gros)
Option Explicit

Private Sub Command1_Click()
Call Form2.Show
Call Form2.InitFunctionCall(Me, "ShowMessage")
End Sub

Private Sub Form_Load()

Command1.Caption = "Afficher et appeler la fonction publique de
Form2"

End Sub

Public Sub ShowMessage(ByRef Prompt As String, ByRef Title As String)
Call MsgBox(Prompt, vbOKOnly, Title)
End Sub
'***

'***
' Form2
' 1 CommandButton (assez gros)
Option Explicit

Private m_obj As Object
Private m_sProcName As String

Public Sub InitFunctionCall(ByRef Object As Object, ByRef ProcName As
String)
Set m_obj = Object
m_sProcName = ProcName
End Sub

Private Sub Command1_Click()
If (Not m_obj Is Nothing And LenB(m_sProcName) > 0) Then
Call CallByName(m_obj, m_sProcName, VbMethod, "Salut tous le
monde", "Test de CallByName")
End If
End Sub

Private Sub Form_Load()
Command1.Caption = "Appeler la procédure publique de Form1
(celle reçu en paramètre)"
End Sub
'***

Exécute le en pas à pas si tu n'arrive pas à comprendre ce qui se
passe... si tu as d'autres questions n'hésite pas.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml -
http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à
tous "seb-seb" wrote in message
news:OmZMb%
j'ai rien compris de ce que tu me raconte

alors je vais etre plus concret
en gros j'ai form1 et form2
form1 appele une procedure publique de form2 en lui passant comme
parametre un nom de procedure publique contenu dans form1
et form2 quand elle en a envie va executer un call myvar (string)
et je veux savoir si on peut donc faire ca car ca m'aiderai niveau
evolutivité du programme

merci


"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le
message de news:%
Salut Seb! :O)

La fonction CallByName te permet d'appeler un membre *publique*
d'un objet en fonction de son nom.. alors si tu veux appeler une
fonction, elle *doit* est membre d'un objet, elle ne peut pas être
dans un module.

par exemple :
'***
'Form 1
Option Explicit

Private Sub Form_Load()
Call CallByName(Me, _
"ShowMessage", _
VbMethod, _
"Prompt", _
"Title")
End Sub

Public Sub ShowMessage(ByVal Prompt As String, ByVal Title As
String) Call MsgBox(Prompt, vbOKOnly, Title)
End Sub
'***

aussi une petite note concernant ceci :
est myvar = "CMDok_click" ?



je te conseille plutôt de créer une fonction qui exécute le
traitement voulu et d'appeler cette fonction aux endroits prévues
au lieu d'appeler le code d'une fonction appeler lors d'un
événement... c'est une meilleure pratique de programmation.. ça
rend le code plus facile à maintenir, spécialement si tu appliques
des modifications à l'interface.

Exemple :
'***
' Form1
' 2 CommandButton
Option Explicit

Private Sub Command1_Click()
Call Sauvegarder
End Sub

Private Sub Command2_Click()
Call Sauvegarder
End Sub

Public Sub Sauvegarder()
' code code code
End Sub
'***

au lieu de :
'***
Option Explicit

Private Sub Command1_Click()
Call Sauvegarder
End Sub

Private Sub Command2_Click()
Call Command1_Click
End Sub

Public Sub Sauvegarder()
' code code code
End Sub
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml -
http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à
tous "seb-seb" wrote in message
news:
bonjour
est il possible d'appeler une procedure avec une variable string
genre call myvar
est myvar = "CMDok_click" ?
enfin si vous voyez ce que je veus dire
merci