ByVal interet

Résolu/Fermé
bibivanhoa Messages postés 3 Date d'inscription vendredi 24 janvier 2014 Statut Membre Dernière intervention 27 mars 2014 - Modifié par bibivanhoa le 27/03/2014 à 15:45
f894009 Messages postés 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 - 27 mars 2014 à 16:22
Bonjour,

J'ai lu plusieurs tutos sur ByRef et ByVal, je comprends le fonctionnement. Mais seulement, je n'arrive pas a comprendre l'interet de ByVal.

Peut etre que je ne suis pas tombe, ou l'occasion de l'utiliser n'est encore jamais arrive, mais quand je vois les exemple sur les tutos qui utilisent ByVal, je ne comprends pas pourquoi on utilise ByVal.

voici un bon exemple:

Sub MaValeur ()
Dim X As Integer
X = 10
Carre(X)
MsgBox(X)
'j'ai donc 10, la valeur n'a pas ete modifiee
End Sub

Sub Carre(ByVal nombre As Integer)
nombre = nombre*nombre
End Sub


Mais du coup, pourquoi creer une procedure "carre" passer la variable en ByVal pour ne pas changer la valeur?

Est ce que quelqu'un aurait un exemple qui mettrait bien en avant l'utiliter de ByVal et donc, l'utiliter de preserver une valeur?

Merci de votre aide

1 réponse

f894009 Messages postés 17241 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 février 2025 1 713
Modifié par f894009 le 27/03/2014 à 16:24
bonjour,

globalement, si vous voulez:
-modifier le contenu de variables dans des procedures, utilisez ByRef ou ne mettez rien ByRef est par defaut
-ne pas modifier le contenu en retour de procedures alors utilisez Byref, dans les procdures vous pouvez modifiez le contenu des variables mais en retour dans le code principal les valeurs n'auront pas change

Dans l'exemple que vous avez pris, le Byval n'a pas de sens puisque vous voulez avoir le carre de x
ci-dessous une "utilite" de ByVal si dans la fonction vous auriez besoin de modifier nombre pour x raisons, mais de garder la valeur 10 de X dans le code principal
Sub MaValeur()
Dim X As Integer
X = 10
XX = Carre(X)
MsgBox (XX)
End Sub

Function Carre(ByVal nombre As Integer)
Carre = nombre * nombre
End Function


https://social.msdn.microsoft.com/Forums/vstudio/fr-FR/21c3f96c-f869-4ad1-87b5-421bb2599ac3/difference-entre-byval-et-byref?forum=vbasicfr
-1