dans votre exemple icisans lien vers cet exemple impossible de te dire exactement pourquoi 10 et 20....
Dim toto as Integer 'on crée l'emplacement A(toto) toto = 123456 'on crée l'emplacement B(toto) et on met son adresse dans A(toto) Dim tutu as Integer 'on crée l'emplacement A(tutu) tutu = toto 'on copie le contenu de B(toto) dans B(tutu), puis on mets l'adresse de B(tutu) dans A(tutu) toto = 654321 'ceci ne modifie pas tutu, car toto et tutu pointent vers 2 emplacements différents, deux valeurs différentes.
Dim tata As List(Of String) 'on crée l'emplacement A(titi) tata = New List(Of String) From { "Mot 1", "Mot 2", "Mot 3" } 'on crée l'emplacement B(titi) et on met son adresse dans A(titi) Dim titi 'on crée l'emplacement titi = tata 'on met l'emplacement de B(tata) dans A(titi) tata(1) = "Nouveau mot 2" 'ceci change aussi titi(1) car tata et titi pointent vers la même valeur
Module Module1 Sub Main() Dim X As Integer X = 10 Carre(X) Console.WriteLine(X) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Sub Carre(ByRef nombre As Integer) nombre = nombre * nombre End Sub End Module il m'affiche 100 et 200 pourquoi car je lui ai dit console.writeline(x) et non pas console.writeline(Carre(X)) et si je lui mets console.writeline(Carre(X)) il me dit cette expression ne produit pas de valeur alors que Carre(X) pour moi a une valeur et elle est de 100 si je mets cette autre code Module Module1 Sub Main() Dim X As Integer X = 10 Carre(X) Console.WriteLine(X) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Sub Carre(ByVal nombre As Integer) nombre = nombre * nombre End Sub End Module là il m'affiche 10 et 20 donc à quoi sert la fonction dans ce cas si elle ne fait rien si j'écris Module Module1 Sub Main() Dim X As Integer X = 10 Carre(X) Console.WriteLine(X) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Function Carre(ByRef nombre As Integer) nombre = nombre * nombre Return nombre End Function End Module il m'affiche 100 et 200
Module Module1 Sub Main() Dim X As Integer X = 10 Carre(X) Console.WriteLine(X) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Function Carre(ByVal nombre As Integer) nombre = nombre * nombre Return nombre End Function End Module
sans lien vers cet exemple ....
je me référais au tutorial Byref et Byval mis à jour par vos soins le 22 septembre 2017, des tutos y'en a des milliers, je ne vais pas m'amuser à faire une recherche juste pour te répondre.
ma question était : a quoi sert le par valeur si dans ce cas la procédure ne fait rien?
Public Class Form1 Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown Dim A As Integer = 1 ' on créer une variable A Label1.Text = A.ToString ' on affiche la valeur de A dans le Label For i = 0 To 10 System.Threading.Thread.Sleep(2000) ' attendre 2 secondes Addition(A) Label1.Text = A.ToString ' on affiche la valeur de A dans le Label Label1.Refresh() Next i End Sub Private Sub Addition(ByVal Nombre As Integer) Nombre = Nombre + 1 End Sub End Class
ByVal Valeur as Integeron remarque que le Label contient toujours 1 . Si le paramètre A est passé par valeur Nombre dans la fonction Addition est bien augmenté de 1 mais n'est pas répercuté dans la boucle For
ByRef Valeur as IntegerNombre est passé par référence à la variable A dans la boucle For et fait référence à ce A . En sortie de la Sub Addition Nombre est bien augmenté de 1 à chaque boucle et comme Nombre fait référence à A ce même A est aussi augmenté de 1 dans la boucle For .
Returnavec une variable ) . Lorsque on utilise une Function il est conseillé de se servir de sa valeur de retour dans le code appelant cette Function .
Module Module1 Sub Main() Dim X As Integer X = 10 Carre(X) ' une Sub : vu le Byref au retour X = 100 Console.WriteLine(X) X = X + X ' X = 200 Console.WriteLine(X) Console.ReadLine() End Sub Sub Carre(ByRef nombre As Integer) nombre = nombre * nombre End Sub End Module ' il m'affiche 100 et 200
Module Module2 Sub Main() Dim X As Integer X = 10 Carre(X) ' Sub avec Byval :' X vaut toujours 10 Console.WriteLine(X) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Sub Carre(ByVal nombre As Integer) nombre = nombre * nombre End Sub End Module
Carre(X)
Module Module3 Sub Main() Dim X As Integer X = 10 Carre(X) ' une Function : là tu utilises la fonction avec le ByRef X = 100 Console.WriteLine(X) X = X + X ' X = 200 Console.WriteLine(X) Console.ReadLine() End Sub Function Carre(ByRef nombre As Integer) nombre = nombre * nombre Return nombre End Function End Module
Return nombre
Module Module4 Sub Main() Dim X As Integer X = 10 Carre(X) ' tu n'affectes pas à X la valeur retournée par la Function ' il faudrait mettre X = Carre(X) pour avoir 100 et 200 Console.WriteLine(X) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Function Carre(ByVal nombre As Integer) nombre = nombre * nombre Return nombre End Function End Module
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionSub Main() Dim X As Integer Dim B As Integer X = 10 Carre(X) B = Carre(X) Console.WriteLine(B) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Function Carre(ByVal nombre As Integer) nombre = nombre * nombre Return nombre End Function
Sub Main() Dim X As Integer Dim B As Integer X = 10 Carre(X) B = Carre(X) Console.WriteLine(B) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Sub Carre(ByVal nombre As Integer) nombre = nombre * nombre End Sub
B = Carre(X)
Sub Main() Dim X As Integer Dim B As Integer X = 10 Carre(X) ' ligne inutile B = Carre(X) ' c'est une fonction Console.WriteLine(B) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Function Carre(ByVal nombre As Integer) nombre = nombre * nombre Return nombre End Function
Sub Main() Dim X As Integer Dim B As Integer X = 10 Carre(X) ' c'est un sous-programme là B = Carre(X) ' normal que l'erreur soit là un sous-programme ne renvoie pas de valeur Console.WriteLine(B) X = X + X Console.WriteLine(X) Console.ReadLine() End Sub Sub Carre(ByVal nombre As Integer) nombre = nombre * nombre ' dans une Sub pas de Return donc pas de variable en retour End Sub