OVH Cloud OVH Cloud

ByRef... question très bête

18 réponses
Avatar
NTH
Bonsoir
J'ai une question très bête mais je ne comprends pas pourquoi... pourtant je
ne suis pas débutant en vb...
Voici :

Sub Test(ByRef x As String)
x = "XXX"
End Sub

Private Sub Form_Load()
Dim x As String
x = "ABC"
Test(x)
MsgBox (x)
Ens Sub

Ca m'écrit "ABC" pourtant je croyais que ça devait écrire XXX ?
Bizarre non? mon système est corrompu ou quoi?

Merci

10 réponses

1 2
Avatar
Jean-Marc
"NTH" a écrit dans le message de
news:416589df$0$25753$
Bonsoir
J'ai une question très bête mais je ne comprends pas pourquoi... pourtant


je
ne suis pas débutant en vb...
Voici :

Sub Test(ByRef x As String)
x = "XXX"
End Sub

Private Sub Form_Load()
Dim x As String
x = "ABC"
Test(x)
MsgBox (x)
Ens Sub

Ca m'écrit "ABC" pourtant je croyais que ça devait écrire XXX ?
Bizarre non? mon système est corrompu ou quoi?



Hello,

Héhé!!
Que celui qui ne s'est jamais fait avoir à celle la te jette la première
pierre.
Pour que cela fonctionne, tu dois écrire, au choix:

Test x ' sans parenthèses

ou alos

Call Test(x) ' Avec un Call explicite devant!

Pour les explication techniques, je n'ai pas
les références de MSDN sous les yeux, mais ça
y est qq part. SI je retrouve, je poste le link.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
TTT
> dans la sub test il va te dire variable inconnue.


pourquoi variable inconnue ? il y a bien la déclaration ByRef x As String
dans la sub Test?
Avatar
Alain CROS
Bonjour.

Ecrire Test x
sans parenthèses.

Alain CROS

"NTH" a écrit dans le message de news: 416589df$0$25753$
Bonsoir
J'ai une question très bête mais je ne comprends pas pourquoi... pourtant je
ne suis pas débutant en vb...
Voici :

Sub Test(ByRef x As String)
x = "XXX"
End Sub

Private Sub Form_Load()
Dim x As String
x = "ABC"
Test(x)
MsgBox (x)
Ens Sub

Ca m'écrit "ABC" pourtant je croyais que ça devait écrire XXX ?
Bizarre non? mon système est corrompu ou quoi?

Merci




Avatar
Jean-Marc
"christophe-pasde<> @wanadoo.fr>" <"christophe-pasde<> a écrit dans le
message de news:4165914d$0$16592$
bonjour,

ta variable X est déclarée uniquement dans form_load

en entête de ta form ecrit
option explicit et tu verras de suite l'erreur à la compilation,
dans la sub test il va te dire variable inconnue.



Hello,

Tu te trompes. Tu méconnais gravement VB (et tous les autres
lanages de programmation) pour écrire cela.

La variable X n'est pas du tout inconnue dans SUb Test, c'est
son paramètre.

Le fait que par hasard le nom du paramètre soit x, comme dans
la Sub form_load n'a rien à voir ici.

Voir de toute urgence:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vastmSub.asp

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
TTT
quelle différence entre :
test x
et
test(x)
?
Avatar
christophe-pasde
bonjour,

ta variable X est déclarée uniquement dans form_load

en entête de ta form ecrit
option explicit et tu verras de suite l'erreur à la compilation,
dans la sub test il va te dire variable inconnue.

Christophe

NTH a écrit :

Bonsoir
J'ai une question très bête mais je ne comprends pas pourquoi... pourtant je
ne suis pas débutant en vb...
Voici :

Sub Test(ByRef x As String)
x = "XXX"
End Sub

Private Sub Form_Load()
Dim x As String
x = "ABC"
Test(x)
MsgBox (x)
Ens Sub

Ca m'écrit "ABC" pourtant je croyais que ça devait écrire XXX ?
Bizarre non? mon système est corrompu ou quoi?

Merci




Avatar
Jean-Marc
"TTT" a écrit dans le message de
news:4165935a$0$286$
quelle différence entre :
test x
et
test(x)
?



Hello,

voila j'ai retrouvé dans la doc:
Remarks

You are not required to use the Call keyword when calling a procedure.
However, if you use the Call keyword to call a procedure that requires
arguments, argumentlist must be enclosed in parentheses. If you omit the
Call keyword, you also must omit the parentheses around argumentlist.

et la référence complète est:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vastmCall.asp

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
TTT
> You are not required to use the Call keyword when calling a procedure.
However, if you use the Call keyword to call a procedure that requires
arguments, argumentlist must be enclosed in parentheses. If you omit the
Call keyword, you also must omit the parentheses around argumentlist.

et la référence complète est:



http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vastmCall.asp

Et à quel moment ils disent :
Si call est ignoré (comme par ex test(x)) alors si x est passée par
référence alors x n'est pas modifiée?
Avatar
TTT
désolé mais il n'y a pas d'explication satisfaisante pour le moment...
en plus
si j'exécute le même code en visual studio .net le x est bien modifiée :

Autrement dit :

Sub Test(ByRef x As String)
x = "XXX"
End Sub

Private Sub Form_Load()
Dim x As String
x = "ABC"
Test(x)
MsgBox (x)
Ens Sub

Sous VS6 ça m'affiche ABC
et sous VS.NET 2003 ça m'affiche XXX

je ne comprends plus rien, c'est mon VS6 qui est mal installé ou corrompu?
Avatar
Jean-Marc
"christophe-pasde<> @wanadoo.fr>" <"christophe-pasde<> a écrit dans le
message de news:4165967e$0$17758$
Bon ça arrive de dire des conneries de temps en temps et à tout le monde.

Je ne pense pas méconnaître gravement VB ( ni quelques autres langages,
le et tout les autres me parait présomptueux), mais être étourdi et un
peu fatigué.

Christophe.



Oui, j'ai aussi eu une journée fatigante... Désolé!

Amicalement,

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
1 2