Bonjour,
Quelle différence y a t-il entre le "temp" du programme principal et celui du sous-programme ?
Il existe deux types de variables. Les variables "locales" et les variables "globales".
Les variables locales sont des variables qui ne peuvent être utilisées qu'à l'intérieur d'une fonction. Lorsque la fonction est terminée, ces variables sont détruites de la mémoire.
A l'inverse, les variables globales sont des variables qui peuvent être utilisées n'importe où, elles peuvent être déclarées à l'exterieur des fonctions mais peuvent également être déclarée à l'intérieur d'une fonction précédée d'un mot clef ("global", "static", ...)
Dans ton exemple :
Private Sub calcul (ByVal a, ByVal b, ByRef R As Integer)
Dim temp As Integer
temp = a + b
a = temp + 1
b = temp - 1
R = temp
MsgBox "Dans sous-programme, A = " &a& "B=" &b& "TEMP=" &temp& "R=" &R&
End Sub
On remarque qu'il y a la déclaration de la variable "temp" dans la fonction. Donc il s'agit d'une variable locale qui sera détruite à la fin de la fonction.
Dim temp as Integer
Sub Private Sub Form_Load()
x=1: y=2:temp=4
Call calcul(x,y,temp)
MsgBox"Dans Programme principal, X=" &x& "Y=" &y& "temp=" &temp&
x=2: y=3:temp=5
Call calcul(temp,y,x)
MsgBox"Dans Programme principal, X=" &x& "Y=" &y& "temp=" &temp&
End Sub
Ici la variable temp est déclarée à l'extérieur d'une fonction donc il s'agit d'une variable globale qui peut être utilisée n'importe où (elle ne sera pas détruite à la fin de la fonction).
Personnellement, je recommande toujours de donner des noms différents à mes variables (entre globales et locales surtout) pour éviter toutes confusions lors de la relecture du code.
Il aurait été préférable de renommer l'une des deux variables. Je penserais plutôt à la variable globale car "temp" correspond à "temporaire" ce qui n'est pas le cas d'une variable globale
.
Dim result as Integer
Sub Private Sub Form_Load()
x=1: y=2:result=4
Call calcul(x,y,result)
MsgBox"Dans Programme principal, X=" &x& "Y=" &y& "result=" &result&
x=2: y=3:result=5
Call calcul(result,y,x)
MsgBox"Dans Programme principal, X=" &x& "Y=" &y& "result=" &result&
End Sub
Que va afficher l'exécution de ce programme ?
Dans Programme principal, X= 4 Y= 2 result= 3
Dans Programme principal, X= 6 Y= 4 result= 5
[/quote]Comment expliquer le passage de paramètre pour le premier appel à calcul (x,y,temp) ?[/quote]
Sans le passage de paramètre, il serait impossible de récupérer les informations (a, b, R), permettant d'afficher le message du dessus.