OVH Cloud OVH Cloud

comment appeler procédure ou fonction, suite...

8 réponses
Avatar
surfeur75
Bonjour,
Ayant du mal à appeler certaine procédure ou fonctions, voici ce que j'ai
fait, et là-dedans 3 erreurs de l'interprétateur ont refusé le code, ce sont
la procédure X2
les fonctions X12 et X13
Le type d'erreur est en marge de l'appel...
C'est d'autant plus ennuyeux que le X13 et le type de procédure "MouseX"
Comment faire pour appeler les 3 sus-citées qui ne répondent pas, merci ???

Sub Form_Load()
Call X1(Y1)
'Call X2(Y2) '### type d'argument byref incompatible
Call X3
Call X4(Y4)
Call X6(Y6)
Call X7
Call X10(Y10)
Call X11(Y11)
'Call X12(Y12) ' ### type d'argument byref incompatible
'Call X13(Y13, Y14, y15, y16) ' ### type d'argument byref incompatible
Call X14(Y17)
MsgBox "retour"
End
End Sub
Function X1(ByVal Y1 As Integer) As Long
MsgBox "f x1"
End Function
Function X2(ByRef Y2 As Integer) As Long
MsgBox "f x2"
End Function
Function X3() As Long
MsgBox "f x3"
End Function
Function X4(Y4) As Long
MsgBox "f x4"
End Function
Function X6(Y6)
MsgBox "f x6"
End Function
Function X7()
MsgBox "f x7"
End Function
Sub X10(ByVal Y10)
MsgBox "p x10"
End Sub
Sub X11(ByVal Y11)
MsgBox "p x11"
End Sub
Sub X12(Y12 As String)
MsgBox "p x12"
End Sub
Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
MsgBox "p x13"
End Sub
Sub X14(ByRef Y17)
MsgBox "p x14"
End Sub
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!

8 réponses

Avatar
ng
Salut,

'force la déclaration des variables
Option Explicit

Sub Form_Load()
'il faut déclarer tes variables en fonction de tes subs
'la elles sont toutes par defaut en Variant or certaines
'de tes subs veulent du Integer, etc...
Dim Y1 As Integer, Y2 As Integer
Dim Y4 As Variant, Y6 As Variant, Y10 As Variant, Y11 As Variant, Y17 As
Variant
Dim Y12 As String
Dim Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single
Call X1(Y1)
Call X2(Y2)
Call X3
Call X4(Y4)
Call X6(Y6)
Call X7
Call X10(Y10)
Call X11(Y11)
Call X12(Y12)
Call X13(Y13, Y14, y15, y16)
Call X14(Y17)

'on peut aussi passer directement les valeurs
Call X1(1)
Call X2(2)
Call X3
Call X4("variant qui peut donc être une chaine")
Call X6("idem")
Call X7
Call X10(3)
Call X11(4)
Call X12("chaine")
Call X13(5, 6, 7.5, 8.9)
Call X14("78")

End Sub
Function X1(ByVal Y1 As Integer) As Long
MsgBox "f x1"
End Function
Function X2(ByRef Y2 As Integer) As Long
MsgBox "f x2"
End Function
Function X3() As Long
MsgBox "f x3"
End Function
'la déclaration explicite est préférée
Function X4(Y4 As Variant) As Long
MsgBox "f x4"
End Function
Function X6(Y6 As Variant) As Variant
MsgBox "f x6"
End Function
Function X7() As Variant
MsgBox "f x7"
End Function
Sub X10(ByVal Y10 As Variant)
MsgBox "p x10"
End Sub
Sub X11(ByVal Y11 As Variant)
MsgBox "p x11"
End Sub
Sub X12(Y12 As String)
MsgBox "p x12"
End Sub
Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
MsgBox "p x13"
End Sub
Sub X14(ByRef Y17 As Variant)
MsgBox "p x14"
End Sub



Mais qu'essayes-tu de démontrer ?

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


"surfeur75" a écrit dans le message de news:

Bonjour,
Ayant du mal à appeler certaine procédure ou fonctions, voici ce que j'ai
fait, et là-dedans 3 erreurs de l'interprétateur ont refusé le code, ce


sont
la procédure X2
les fonctions X12 et X13
Le type d'erreur est en marge de l'appel...
C'est d'autant plus ennuyeux que le X13 et le type de procédure "MouseX"
Comment faire pour appeler les 3 sus-citées qui ne répondent pas, merci


???

Sub Form_Load()
Call X1(Y1)
'Call X2(Y2) '### type d'argument byref incompatible
Call X3
Call X4(Y4)
Call X6(Y6)
Call X7
Call X10(Y10)
Call X11(Y11)
'Call X12(Y12) ' ### type d'argument byref incompatible
'Call X13(Y13, Y14, y15, y16) ' ### type d'argument byref incompatible
Call X14(Y17)
MsgBox "retour"
End
End Sub
Function X1(ByVal Y1 As Integer) As Long
MsgBox "f x1"
End Function
Function X2(ByRef Y2 As Integer) As Long
MsgBox "f x2"
End Function
Function X3() As Long
MsgBox "f x3"
End Function
Function X4(Y4) As Long
MsgBox "f x4"
End Function
Function X6(Y6)
MsgBox "f x6"
End Function
Function X7()
MsgBox "f x7"
End Function
Sub X10(ByVal Y10)
MsgBox "p x10"
End Sub
Sub X11(ByVal Y11)
MsgBox "p x11"
End Sub
Sub X12(Y12 As String)
MsgBox "p x12"
End Sub
Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
MsgBox "p x13"
End Sub
Sub X14(ByRef Y17)
MsgBox "p x14"
End Sub
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!






Avatar
EddiGordo
"surfeur75" a exposé le 09/02/2004 :
Bonjour,
Ayant du mal à appeler certaine procédure ou fonctions, voici ce que j'ai
fait, et là-dedans 3 erreurs de l'interprétateur ont refusé le code, ce sont
la procédure X2
les fonctions X12 et X13
Le type d'erreur est en marge de l'appel...
C'est d'autant plus ennuyeux que le X13 et le type de procédure "MouseX"
Comment faire pour appeler les 3 sus-citées qui ne répondent pas, merci ???

Sub Form_Load()
Call X1(Y1)
'Call X2(Y2) '### type d'argument byref incompatible
Call X3
Call X4(Y4)
Call X6(Y6)
Call X7
Call X10(Y10)
Call X11(Y11)
'Call X12(Y12) ' ### type d'argument byref incompatible
'Call X13(Y13, Y14, y15, y16) ' ### type d'argument byref incompatible
Call X14(Y17)
MsgBox "retour"
End
End Sub
Function X1(ByVal Y1 As Integer) As Long
MsgBox "f x1"
End Function
Function X2(ByRef Y2 As Integer) As Long
MsgBox "f x2"
End Function
Function X3() As Long
MsgBox "f x3"
End Function
Function X4(Y4) As Long
MsgBox "f x4"
End Function
Function X6(Y6)
MsgBox "f x6"
End Function
Function X7()
MsgBox "f x7"
End Function
Sub X10(ByVal Y10)
MsgBox "p x10"
End Sub
Sub X11(ByVal Y11)
MsgBox "p x11"
End Sub
Sub X12(Y12 As String)
MsgBox "p x12"
End Sub
Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
MsgBox "p x13"
End Sub
Sub X14(ByRef Y17)
MsgBox "p x14"
End Sub




Bonjour

Au vu des déclarations de tes fonctions X1 etc.. je pense que dans ta
procédure Load, les variables ne sont pas du type correspondant : Y2,
Y12, Y13, et Y14 sont-ils bien déclarés en tant qu'Integer? et Y15 et
y16 du type Single?

Regarde de ce côté...

En espérant que cela t'aide un peu


--
Enjoy !
Avatar
ANONYME
Cher Surfeur75,

Tu ferais pas mieux d'acheter un livre pour apprendre à programmer en VB ???

J'ai l'impression que tu utilises du code sans le comprendre exactement !?

Ce forum est fait pour répondre un besoin spécifique auquel on n'a pas réponse après avoir d'abord chercher par soi-même (Vb est
fourni avec une aide)
et non pour apprendre à programmer...

A.


"surfeur75" a écrit dans le message de news:
| Bonjour,
| Ayant du mal à appeler certaine procédure ou fonctions, voici ce que j'ai
| fait, et là-dedans 3 erreurs de l'interprétateur ont refusé le code, ce sont
| la procédure X2
| les fonctions X12 et X13
| Le type d'erreur est en marge de l'appel...
| C'est d'autant plus ennuyeux que le X13 et le type de procédure "MouseX"
| Comment faire pour appeler les 3 sus-citées qui ne répondent pas, merci ???
|
| Sub Form_Load()
| Call X1(Y1)
| 'Call X2(Y2) '### type d'argument byref incompatible
| Call X3
| Call X4(Y4)
| Call X6(Y6)
| Call X7
| Call X10(Y10)
| Call X11(Y11)
| 'Call X12(Y12) ' ### type d'argument byref incompatible
| 'Call X13(Y13, Y14, y15, y16) ' ### type d'argument byref incompatible
| Call X14(Y17)
| MsgBox "retour"
| End
| End Sub
| Function X1(ByVal Y1 As Integer) As Long
| MsgBox "f x1"
| End Function
| Function X2(ByRef Y2 As Integer) As Long
| MsgBox "f x2"
| End Function
| Function X3() As Long
| MsgBox "f x3"
| End Function
| Function X4(Y4) As Long
| MsgBox "f x4"
| End Function
| Function X6(Y6)
| MsgBox "f x6"
| End Function
| Function X7()
| MsgBox "f x7"
| End Function
| Sub X10(ByVal Y10)
| MsgBox "p x10"
| End Sub
| Sub X11(ByVal Y11)
| MsgBox "p x11"
| End Sub
| Sub X12(Y12 As String)
| MsgBox "p x12"
| End Sub
| Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
| MsgBox "p x13"
| End Sub
| Sub X14(ByRef Y17)
| MsgBox "p x14"
| End Sub
| --
| @+, bye, Joe.
| Pour m'écrire ng75AROBASEnoosPOINTfr
| remplace AROBASE et POINT par leur vrai signe
| Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
|
|
|
|
Avatar
surfeur75
Ah ben reste anonyme, t'es très bien, effectivement il y a parfois du
code que je mets sans tout comprendre, notamment les API car je n'ai pas la
doc, et en effet, je n'ai guère été habitué aux fonctions, étant depuis
environ 1981 sous Prologue-Bull en BAL (du temps du CPM, avant MsDos) en
multi-postes-tâches et imprimante, puis j'ai survolé l'ASM, ensuite un an de
TC3++ avec le Dos, avant de tomber dans VB et Win 95 (bref passage en
Win3.11), alors effectivement, dans mon langage d'origine (BAL, ABAL), les
déclaration n'étaient que générales, et les fonctions des segments, c'était
le système qui appelait les variables générales suivant la demande des
segments, ainsi j'ai conservé ma façon de programmer, ce qui me coince quand
je veux passer des paramètres...

Sinon, un NG est fait pour avoir des précisions autant que des exemples
ou apprendre certaines choses ignorées, alors quand on ne sait pas, il est
normal d'avoir une explication sous forme de cours abrégé, ne t'en déplaise!
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!


"ANONYME" <anonyme> a écrit dans le message de news:

Cher Surfeur75,

Tu ferais pas mieux d'acheter un livre pour apprendre à programmer en VB


???

J'ai l'impression que tu utilises du code sans le comprendre exactement !?

Ce forum est fait pour répondre un besoin spécifique auquel on n'a pas


réponse après avoir d'abord chercher par soi-même (Vb est
fourni avec une aide)
et non pour apprendre à programmer...

A.


"surfeur75" a écrit dans le message de


news:
| Bonjour,
| Ayant du mal à appeler certaine procédure ou fonctions, voici ce que


j'ai
| fait, et là-dedans 3 erreurs de l'interprétateur ont refusé le code, ce


sont
| la procédure X2
| les fonctions X12 et X13
| Le type d'erreur est en marge de l'appel...
| C'est d'autant plus ennuyeux que le X13 et le type de procédure "MouseX"
| Comment faire pour appeler les 3 sus-citées qui ne répondent pas, merci


???
|
| Sub Form_Load()
| Call X1(Y1)
| 'Call X2(Y2) '### type d'argument byref incompatible
| Call X3
| Call X4(Y4)
| Call X6(Y6)
| Call X7
| Call X10(Y10)
| Call X11(Y11)
| 'Call X12(Y12) ' ### type d'argument byref incompatible
| 'Call X13(Y13, Y14, y15, y16) ' ### type d'argument byref incompatible
| Call X14(Y17)
| MsgBox "retour"
| End
| End Sub
| Function X1(ByVal Y1 As Integer) As Long
| MsgBox "f x1"
| End Function
| Function X2(ByRef Y2 As Integer) As Long
| MsgBox "f x2"
| End Function
| Function X3() As Long
| MsgBox "f x3"
| End Function
| Function X4(Y4) As Long
| MsgBox "f x4"
| End Function
| Function X6(Y6)
| MsgBox "f x6"
| End Function
| Function X7()
| MsgBox "f x7"
| End Function
| Sub X10(ByVal Y10)
| MsgBox "p x10"
| End Sub
| Sub X11(ByVal Y11)
| MsgBox "p x11"
| End Sub
| Sub X12(Y12 As String)
| MsgBox "p x12"
| End Sub
| Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
| MsgBox "p x13"
| End Sub
| Sub X14(ByRef Y17)
| MsgBox "p x14"
| End Sub
| --
| @+, bye, Joe.
| Pour m'écrire ng75AROBASEnoosPOINTfr
| remplace AROBASE et POINT par leur vrai signe
| Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
|
|
|
|




Avatar
surfeur75
Je ne tente rien de démontrer, je tente de comprendre certains
mécanismes...

Donc, si on se trouve en présence d'une fonction du genre
function X(Y as integer)
Il faut déclarer en général
dim Y as integer
Pour ensuite pouvoir appeler
call X(Y)
Mais là où je ne comprends pas, c'est ce mélange général et local, Y est
général. Quand tu l'appelles il est général, tu peux lui passer une valeur
ok, mais quand il arrive ce Y dans la procédure X où il est déclaré en
local, ça se passe comment, le local reprend la main je crois, mais comment
le Y local de la procédure X va transmettre un retour de valeur au Y
général, car si tu fais Y=Y, ça m'étonnerait que ça donne quelque chose, lol
???

Par exp:
dim Y
Y=5
call X
goto fin
Function X(Y)
Y=Y+5
end function
fin:
'Y = ???, lol, quelle Y, quelle valeur, pour moi Y (général) est toujours à
5, et Y local est toujours à (x + 5), comment lui passer une autre valeur
pour avoir un retour différent???
-------------------------

Seconde question de taille pour moi, les fonction sous forme de variables:
dim X, Y
function X(Y) as Z ' type_fonction
Alors pour moi, X est la fonction, son nom, Y est la variable locale de la
fonction X, dont la valeur va rester a priori dans sa fonction, et Z dans
tout ça, il représente le type de la fonction, mais pour en faire quoi au
juste?
entre
X(Y) as Z
et
X(Y)
tu as quelle différence pour en faire quoi en pratique?

Merci de ce petit cours...
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!


"ng" a écrit dans le message de news:

Salut,

'force la déclaration des variables
Option Explicit

Sub Form_Load()
'il faut déclarer tes variables en fonction de tes subs
'la elles sont toutes par defaut en Variant or certaines
'de tes subs veulent du Integer, etc...
Dim Y1 As Integer, Y2 As Integer
Dim Y4 As Variant, Y6 As Variant, Y10 As Variant, Y11 As Variant, Y17 As
Variant
Dim Y12 As String
Dim Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single
Call X1(Y1)
Call X2(Y2)
Call X3
Call X4(Y4)
Call X6(Y6)
Call X7
Call X10(Y10)
Call X11(Y11)
Call X12(Y12)
Call X13(Y13, Y14, y15, y16)
Call X14(Y17)

'on peut aussi passer directement les valeurs
Call X1(1)
Call X2(2)
Call X3
Call X4("variant qui peut donc être une chaine")
Call X6("idem")
Call X7
Call X10(3)
Call X11(4)
Call X12("chaine")
Call X13(5, 6, 7.5, 8.9)
Call X14("78")

End Sub
Function X1(ByVal Y1 As Integer) As Long
MsgBox "f x1"
End Function
Function X2(ByRef Y2 As Integer) As Long
MsgBox "f x2"
End Function
Function X3() As Long
MsgBox "f x3"
End Function
'la déclaration explicite est préférée
Function X4(Y4 As Variant) As Long
MsgBox "f x4"
End Function
Function X6(Y6 As Variant) As Variant
MsgBox "f x6"
End Function
Function X7() As Variant
MsgBox "f x7"
End Function
Sub X10(ByVal Y10 As Variant)
MsgBox "p x10"
End Sub
Sub X11(ByVal Y11 As Variant)
MsgBox "p x11"
End Sub
Sub X12(Y12 As String)
MsgBox "p x12"
End Sub
Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
MsgBox "p x13"
End Sub
Sub X14(ByRef Y17 As Variant)
MsgBox "p x14"
End Sub



Mais qu'essayes-tu de démontrer ?

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


"surfeur75" a écrit dans le message de news:

> Bonjour,
> Ayant du mal à appeler certaine procédure ou fonctions, voici ce que


j'ai
> fait, et là-dedans 3 erreurs de l'interprétateur ont refusé le code, ce
sont
> la procédure X2
> les fonctions X12 et X13
> Le type d'erreur est en marge de l'appel...
> C'est d'autant plus ennuyeux que le X13 et le type de procédure "MouseX"
> Comment faire pour appeler les 3 sus-citées qui ne répondent pas, merci
???
>
> Sub Form_Load()
> Call X1(Y1)
> 'Call X2(Y2) '### type d'argument byref incompatible
> Call X3
> Call X4(Y4)
> Call X6(Y6)
> Call X7
> Call X10(Y10)
> Call X11(Y11)
> 'Call X12(Y12) ' ### type d'argument byref incompatible
> 'Call X13(Y13, Y14, y15, y16) ' ### type d'argument byref incompatible
> Call X14(Y17)
> MsgBox "retour"
> End
> End Sub
> Function X1(ByVal Y1 As Integer) As Long
> MsgBox "f x1"
> End Function
> Function X2(ByRef Y2 As Integer) As Long
> MsgBox "f x2"
> End Function
> Function X3() As Long
> MsgBox "f x3"
> End Function
> Function X4(Y4) As Long
> MsgBox "f x4"
> End Function
> Function X6(Y6)
> MsgBox "f x6"
> End Function
> Function X7()
> MsgBox "f x7"
> End Function
> Sub X10(ByVal Y10)
> MsgBox "p x10"
> End Sub
> Sub X11(ByVal Y11)
> MsgBox "p x11"
> End Sub
> Sub X12(Y12 As String)
> MsgBox "p x12"
> End Sub
> Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
> MsgBox "p x13"
> End Sub
> Sub X14(ByRef Y17)
> MsgBox "p x14"
> End Sub
> --
> @+, bye, Joe.
> Pour m'écrire ng75AROBASEnoosPOINTfr
> remplace AROBASE et POINT par leur vrai signe
> Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
>
>
>
>




Avatar
François Picalausa
Bonjour/soir,

Essayons avec des noms différents pour mieux expliquer la portée des
variables:

Sub MySub()
Dim Variable1 As Long
Dim Variable2 AS Long

'Ici, Variable1 = 0

'On passe par référence (ByRef)
'Variable1
'En fait, on passe une adresse mémoire vers Variable1
'à la fonction
'Variable2 prendre la valeur retournée par la fonction
Variable2 = Fonction1(Variable1)
'Ici, Variable1 =5
'Variable2 = 1
End Sub

Function Fonction1(ByRef Argument1 As Long) As Long
'Si on modifie Argument1, on modifie la variable "de l'autre côté"
'En effet, Argument1 désigne l'adresse mémoire vers
'la variable de l'autre côté
Argument1 = 5

'Une fonction est prévue pour retourner une valeur.
Fonction1 = 1
End Function

Si on avait pas spécifié As Long comme type pour la fonction, la fonction
aurait renvoyé une valeur d'un autre type.
Par exemple, la fonction Replace renvoie un type String.
La fonction Sin renvoie un type Double

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"surfeur75" a écrit dans le message de
news:
Je ne tente rien de démontrer, je tente de comprendre certains
mécanismes...

Donc, si on se trouve en présence d'une fonction du genre
function X(Y as integer)
Il faut déclarer en général
dim Y as integer
Pour ensuite pouvoir appeler
call X(Y)
Mais là où je ne comprends pas, c'est ce mélange général et local, Y
est général. Quand tu l'appelles il est général, tu peux lui passer
une valeur ok, mais quand il arrive ce Y dans la procédure X où il
est déclaré en local, ça se passe comment, le local reprend la main
je crois, mais comment le Y local de la procédure X va transmettre un
retour de valeur au Y général, car si tu fais Y=Y, ça m'étonnerait
que ça donne quelque chose, lol ???

Par exp:
dim Y
Y=5
call X
goto fin
Function X(Y)
Y=Y+5
end function
fin:
'Y = ???, lol, quelle Y, quelle valeur, pour moi Y (général) est
toujours à 5, et Y local est toujours à (x + 5), comment lui passer
une autre valeur pour avoir un retour différent???
-------------------------

Seconde question de taille pour moi, les fonction sous forme de
variables: dim X, Y
function X(Y) as Z ' type_fonction
Alors pour moi, X est la fonction, son nom, Y est la variable locale
de la fonction X, dont la valeur va rester a priori dans sa fonction,
et Z dans tout ça, il représente le type de la fonction, mais pour en
faire quoi au juste?
entre
X(Y) as Z
et
X(Y)
tu as quelle différence pour en faire quoi en pratique?

Merci de ce petit cours...

"ng" a écrit dans le message de news:

Salut,

'force la déclaration des variables
Option Explicit

Sub Form_Load()
'il faut déclarer tes variables en fonction de tes subs
'la elles sont toutes par defaut en Variant or certaines
'de tes subs veulent du Integer, etc...
Dim Y1 As Integer, Y2 As Integer
Dim Y4 As Variant, Y6 As Variant, Y10 As Variant, Y11 As Variant,
Y17 As Variant
Dim Y12 As String
Dim Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single
Call X1(Y1)
Call X2(Y2)
Call X3
Call X4(Y4)
Call X6(Y6)
Call X7
Call X10(Y10)
Call X11(Y11)
Call X12(Y12)
Call X13(Y13, Y14, y15, y16)
Call X14(Y17)

'on peut aussi passer directement les valeurs
Call X1(1)
Call X2(2)
Call X3
Call X4("variant qui peut donc être une chaine")
Call X6("idem")
Call X7
Call X10(3)
Call X11(4)
Call X12("chaine")
Call X13(5, 6, 7.5, 8.9)
Call X14("78")

End Sub
Function X1(ByVal Y1 As Integer) As Long
MsgBox "f x1"
End Function
Function X2(ByRef Y2 As Integer) As Long
MsgBox "f x2"
End Function
Function X3() As Long
MsgBox "f x3"
End Function
'la déclaration explicite est préférée
Function X4(Y4 As Variant) As Long
MsgBox "f x4"
End Function
Function X6(Y6 As Variant) As Variant
MsgBox "f x6"
End Function
Function X7() As Variant
MsgBox "f x7"
End Function
Sub X10(ByVal Y10 As Variant)
MsgBox "p x10"
End Sub
Sub X11(ByVal Y11 As Variant)
MsgBox "p x11"
End Sub
Sub X12(Y12 As String)
MsgBox "p x12"
End Sub
Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
MsgBox "p x13"
End Sub
Sub X14(ByRef Y17 As Variant)
MsgBox "p x14"
End Sub



Mais qu'essayes-tu de démontrer ?

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


"surfeur75" a écrit dans le message de news:

Bonjour,
Ayant du mal à appeler certaine procédure ou fonctions, voici ce
que j'ai fait, et là-dedans 3 erreurs de l'interprétateur ont
refusé le code, ce sont la procédure X2
les fonctions X12 et X13
Le type d'erreur est en marge de l'appel...
C'est d'autant plus ennuyeux que le X13 et le type de procédure
"MouseX" Comment faire pour appeler les 3 sus-citées qui ne
répondent pas, merci ???

Sub Form_Load()
Call X1(Y1)
'Call X2(Y2) '### type d'argument byref incompatible
Call X3
Call X4(Y4)
Call X6(Y6)
Call X7
Call X10(Y10)
Call X11(Y11)
'Call X12(Y12) ' ### type d'argument byref incompatible
'Call X13(Y13, Y14, y15, y16) ' ### type d'argument byref
incompatible Call X14(Y17)
MsgBox "retour"
End
End Sub
Function X1(ByVal Y1 As Integer) As Long
MsgBox "f x1"
End Function
Function X2(ByRef Y2 As Integer) As Long
MsgBox "f x2"
End Function
Function X3() As Long
MsgBox "f x3"
End Function
Function X4(Y4) As Long
MsgBox "f x4"
End Function
Function X6(Y6)
MsgBox "f x6"
End Function
Function X7()
MsgBox "f x7"
End Function
Sub X10(ByVal Y10)
MsgBox "p x10"
End Sub
Sub X11(ByVal Y11)
MsgBox "p x11"
End Sub
Sub X12(Y12 As String)
MsgBox "p x12"
End Sub
Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As
Single) MsgBox "p x13"
End Sub
Sub X14(ByRef Y17)
MsgBox "p x14"
End Sub
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta
est!






Avatar
Eric Blin
Bonjour,


Par exp:
dim Y
Y=5
call X
goto fin
Function X(Y)
Y=Y+5
end function



un exemple de ta fonction


Option Explicit
Dim y As Long

Sub main()
y = 5
X y
End Sub

Function X(ByVal y) As Long
y = y + 5
End Function

=> en sortie de ta fonction y n'a pas changé

Une autre déclaration

Function X( y) As Long ' ou Function X(Byref y) As Long c'est la même chose
y = y + 5
End Function

=> alors ici le y change car ici tu passes l'adresse de Y et non plus sa
valeur. par contre le y de ta fonction est local et est différente au y
global.

Byval signifie que tu passes la valeur de la variable
byref signifie que tu passes l'adresse de la variable qui contient la
valeur.

Voila dans un premier temps mais ne pas oublier aussi qu'une fonction peut
renvoyer une valeur

Dim y As Long

Sub main()
y = 5
y=X(y)
End Sub

Function X(byval y) As Long
X=y +5
End Function

Voili voilou.

AMHA tu ne devrais pas appeler tes fonctions de la même façon que tes
variables la tu vas vraiment tout mélanger.

@+

Eric
Avatar
Patrice Henrio
Tout à fait d'accord. Si le post ne plaît pas, on n'est pas obligé d'y
répondre. et de plus dans toutes questions il peut y avoir des idées à
puiser.

A ce sujet il me plaît de revenir sur une de tes questions du début de la
conversation : Y=Y

Qu'est-ce que cela signifie exactement ?
dans la plupart des langages cela signifie que la valeur de Y est la même
que celle de Y.
On remarque déjà qu'en VB cela peut signifier que Y prend la valeur de Y
(affectation), selon qu'il s'agisse d'une action ou d'une "expression".

Mais plus fort, pour certains langages il y a une différence entre l'égalité
et l'identité (SmallTalk par exemple, qui utilise == pour cela)
Ainsi Y==Y est une expression booléenne qui renvoie Vrai si ces deux
variables occupent la même place mémoire. Et de même l'affectation
correspondra soit à une copie de valeur (dans ce cas après l'exécution de
a=b (ou a ppv b comme il y a quelques années en algo), la vie de chacune des
deux variables est indépendante, une modification de b ne change pas a et
réciproquement), soit un dédoublement et les deux variables n'en feront
qu'une.

Enfin il faudrait se poser la question de l'égalité du type 1=1, où le
premier serait un byte et le deuxième un single.

J'espère n'avoir embêté personne avec ses disgressions et si c'est le cas je
m'en excuse.

Au revoir.


"surfeur75" a écrit dans le message de
news:%
Ah ben reste anonyme, t'es très bien, effectivement il y a parfois du
code que je mets sans tout comprendre, notamment les API car je n'ai pas


la
doc, et en effet, je n'ai guère été habitué aux fonctions, étant depuis
environ 1981 sous Prologue-Bull en BAL (du temps du CPM, avant MsDos) en
multi-postes-tâches et imprimante, puis j'ai survolé l'ASM, ensuite un an


de
TC3++ avec le Dos, avant de tomber dans VB et Win 95 (bref passage en
Win3.11), alors effectivement, dans mon langage d'origine (BAL, ABAL), les
déclaration n'étaient que générales, et les fonctions des segments,


c'était
le système qui appelait les variables générales suivant la demande des
segments, ainsi j'ai conservé ma façon de programmer, ce qui me coince


quand
je veux passer des paramètres...

Sinon, un NG est fait pour avoir des précisions autant que des


exemples
ou apprendre certaines choses ignorées, alors quand on ne sait pas, il est
normal d'avoir une explication sous forme de cours abrégé, ne t'en


déplaise!
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!


"ANONYME" <anonyme> a écrit dans le message de news:

> Cher Surfeur75,
>
> Tu ferais pas mieux d'acheter un livre pour apprendre à programmer en VB
???
>
> J'ai l'impression que tu utilises du code sans le comprendre exactement


!?
>
> Ce forum est fait pour répondre un besoin spécifique auquel on n'a pas
réponse après avoir d'abord chercher par soi-même (Vb est
> fourni avec une aide)
> et non pour apprendre à programmer...
>
> A.
>
>
> "surfeur75" a écrit dans le message de
news:
> | Bonjour,
> | Ayant du mal à appeler certaine procédure ou fonctions, voici ce que
j'ai
> | fait, et là-dedans 3 erreurs de l'interprétateur ont refusé le code,


ce
sont
> | la procédure X2
> | les fonctions X12 et X13
> | Le type d'erreur est en marge de l'appel...
> | C'est d'autant plus ennuyeux que le X13 et le type de procédure


"MouseX"
> | Comment faire pour appeler les 3 sus-citées qui ne répondent pas,


merci
???
> |
> | Sub Form_Load()
> | Call X1(Y1)
> | 'Call X2(Y2) '### type d'argument byref incompatible
> | Call X3
> | Call X4(Y4)
> | Call X6(Y6)
> | Call X7
> | Call X10(Y10)
> | Call X11(Y11)
> | 'Call X12(Y12) ' ### type d'argument byref incompatible
> | 'Call X13(Y13, Y14, y15, y16) ' ### type d'argument byref


incompatible
> | Call X14(Y17)
> | MsgBox "retour"
> | End
> | End Sub
> | Function X1(ByVal Y1 As Integer) As Long
> | MsgBox "f x1"
> | End Function
> | Function X2(ByRef Y2 As Integer) As Long
> | MsgBox "f x2"
> | End Function
> | Function X3() As Long
> | MsgBox "f x3"
> | End Function
> | Function X4(Y4) As Long
> | MsgBox "f x4"
> | End Function
> | Function X6(Y6)
> | MsgBox "f x6"
> | End Function
> | Function X7()
> | MsgBox "f x7"
> | End Function
> | Sub X10(ByVal Y10)
> | MsgBox "p x10"
> | End Sub
> | Sub X11(ByVal Y11)
> | MsgBox "p x11"
> | End Sub
> | Sub X12(Y12 As String)
> | MsgBox "p x12"
> | End Sub
> | Sub X13(Y13 As Integer, Y14 As Integer, y15 As Single, y16 As Single)
> | MsgBox "p x13"
> | End Sub
> | Sub X14(ByRef Y17)
> | MsgBox "p x14"
> | End Sub
> | --
> | @+, bye, Joe.
> | Pour m'écrire ng75AROBASEnoosPOINTfr
> | remplace AROBASE et POINT par leur vrai signe
> | Il l'a fait car il ne savait pas que c'était impossible, alea jacta


est!
> |
> |
> |
> |
>
>