VBA byval byref ??

Hervé

XLDnaute Barbatruc
Bonjour tout le monde :)


Quelqu'un pourrait-il m'expliquer l'interet de passer des arguments à une fonction en utilisant les mots clés byval ou byref.

quel est la différence entre ces deux types ?

dans quel cas les utiliser ?

merci de votre attention, en espérant avoir été clair.

salut
 

Jacques87

XLDnaute Accro
Bonjour Hervé

Une fois de plus je fais référence à mes connaissances issues d'Access, j'espère qu'il en est de même avec Excel

Quand on définit le comportement des arguments à une procédure, par défaut tous les arguments qui seront spécifiés seront considérés par référence(ByRef), donc la procédure agira directement sur la valeur de la variable.
Avec l'option ByVal, on force la procédure Sun ou Fonction à travailler sur une 'copie' de la variable. Cette copie créée en mémoire est abandonnée à la fin de la procédure, et l'original reste intact

remarque : l'inconvénient de passer par ByVal c'est le supplément de temps et de mémoire demandés pour créer et stocker la copie.

J'espère avoir répondu à ta question en fonction de mes connaissances sur le sujet

Bonne journée

Cordialement
 

Jacques87

XLDnaute Accro
Re

Hervé un petit exemple sera peut être plus clair

Sub MaValeur ()
Dim X As Integer
X = 10
Carre(X)
MsgBox(X)
End Sub

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

ceci te permet d'élever 10 au carré, réponse 100

Quand tu appelles la MsgBox, quelle est la valeur de X ? 10 ou 100 ? Evidemment ce sera 100 et ce changement de valeur pour cette variable X peut avoir des conséquences non négligeables sur la suite de ton projet

N'ayant pas défini le comportement de la variable X, par défaut il s'agira d'un comportement par référence (ByRef), donc la procédure agit directement sur X et non sur une copie

Pour empêcher que la valeur prise temporairement par X (soit 100) devienne la nouvelle valeur , mais pour l'obliger à être toujours égale à la valeur initiale 10, il te suffit de travailler avec une copie de cette variable et pour cela il te suffit de la définir avec ByVal

Sub Carre(ByVal nombre As Integer)

Voila, j'espère que ce sera plus clair comme cela

Au plaisir de te croiser sur le Forum

Message édité par: Jacques87, à: 13/03/2006 10:46
 

excalibur

XLDnaute Impliqué
bonjour herve jacques le forum

Voici quelques explications trouvées dans un bouquin de john walkenbach si ca peut aider salutations [file name=test_20060313104435.zip size=2474]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/test_20060313104435.zip[/file]

Message édité par: Pascal76, à: 13/03/2006 13:18
 

Pièces jointes

  • test_20060313104435.zip
    2.4 KB · Affichages: 376
T

To_

Guest
Salut Hervé, tu peux aller voir sur mon blog, où j'explique justement l'importance de passer les paramètres Byval ou Byref, et notamment quelques astuces pour détourner l'obligation qu'on a parfois d'utiliser des arguments Byref alors que le type ne correspond pas forcément...
Et au moins je pourrai dire que quelqu'un est allé voir ce blog, arf

http://blogdeti.over-blog.com/
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour Hervé, Jacques, Excalibur et To_ ,
Bonjour à la tantine d'Hervé,

Très intéressant, je connaissais la différence entre ByRef et Byval mais pas la transformation de ByRef en ByVal suite au transtypage ou simplement à l'utilisation des parenthèses !!! C'est pourtant assez logique :whistle:

A+ ;)
 

Ti_

Nous a quitté
Repose en paix
Arf, je regarde l'historique des réponses en rentrant du boulot, et je me dis, 'Qui s'appelle To_ ici ?' et là, surprise, c'est moi... Bon, vous aurez rectifié de vous mêmes... (en fait je me suis connecté d'une bécane qui n'est pas une des miennes)
 

Discussions similaires

Réponses
5
Affichages
354
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 305
Messages
2 087 083
Membres
103 458
dernier inscrit
Vulgaris workshop