Différence entre ByRef et ByVal ?

Messages postés
16
Date d'inscription
lundi 21 octobre 2002
Statut
Membre
Dernière intervention
20 novembre 2002
- - Dernière réponse : ennixo
Messages postés
224
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
17 juin 2006
- 5 nov. 2003 à 16:38
Salut !
Je suis débutante en VB et je voudrais que quelqu'un m'explique (simplement) la différence entre ByVal et ByRef pour passer les arguments en paramètre. C'est peut-être évident pour beaucoup d'entre vous, alors désolée ...
:blush)
Afficher la suite 

4 réponses

Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
0
Merci
Salut Elise,

Il n'y a aucune honte à avoir de ne pas connaître la différence, et je pense que beaucoup de VBéistes ne la conaissent pas.
Alors c'est tout simple, il suffit de comprendre ce que çà veux dire en anglais :

ByVal : par valeur, c'est-à-dire que tu envoie une valeur comme paramètre à ta fonction.
ByRef : par référence, c'est-à-dire que tu envoie la référence de la variable à ta fonction.

Donc, pour résumer : Quand tu utilise ByVal, la variable d'origine n'est pas affectée par les changements, ce qui n'est pas le cas avec ByRef.

J'espère avoir été assez clair. (ce qui n'est peut-être pas une explication simple... ;-(

DARK SIDIOUS
Messages postés
439
Date d'inscription
dimanche 20 janvier 2002
Statut
Membre
Dernière intervention
2 février 2010
1
0
Merci
SIMPLEMENT :

Le passage d'une variable par valeur(byval...) n'est pas modifié par la procédure (sub ou fonction) vers laquelle elle pointe.

C'est exaxtement le contraire pour une variable passé par référence(byRef) !

EXEMPLE :
'BEGIN
Option Explicit

Dim OrgVar As Integer

Private Sub Form_Load()
byrefFnc OrgVar
MsgBox OrgVar
OrgVar = 50
byValFnc OrgVar
MsgBox OrgVar
End Sub

Function byrefFnc(ByRef value As Integer)
value = 60
'La valeur passé par référence vaut 60...
End Function

Function byValFnc(ByVal value As Integer)
value = value + 10
'la valeur par valeur vaut toujours 50...
End Function
'END
@+
'
Messages postés
224
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
17 juin 2006
0
Merci
le fait que la variable passée par référence puisse être affectée est une chose mais il faut mettre en évidence le fait qu'une variable passée par valeur est donc forcément copiée vers une autre variable crée spécialement pour ça puis détruite lorsqu'on quitte la fonction. lorsqu'une boucle appelle une fonction beaucoup de fois, il est donc préférable, lorsque c'est possible de passer les paramètres par référence de manière à avoir un programme plus rapide.
mais il faut retenir aussi que lorsqu'une fonction n'est pas appellée des milliers (ou plus) de fois, passer les paramètres par référence ne changera pas de manière visible la rapidité du programme.
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
-1
Merci
Salut Elise,

Il n'y a aucune honte à avoir de ne pas connaître la différence, et je pense que beaucoup de VBéistes ne la conaissent pas.
Alors c'est tout simple, il suffit de comprendre ce que çà veux dire en anglais :

ByVal : par valeur, c'est-à-dire que tu envoie une valeur comme paramètre à ta fonction.
ByRef : par référence, c'est-à-dire que tu envoie la référence de la variable à ta fonction.

Donc, pour résumer : Quand tu utilise ByVal, la variable d'origine n'est pas affectée par les changements, ce qui n'est pas le cas avec ByRef.

J'espère avoir été assez clair. (ce qui n'est peut-être pas une explication simple... ;-(

DARK SIDIOUS