OVH Cloud OVH Cloud

Débutant VBA

10 réponses
Avatar
JacMar
Je commence à essayer de programmer en VBA. Mes connaissances en
programmation datent du "FORTRAN", que j'ai utilisé, dans le temps, de
nombreuses années!! Ce qui indique probablement mon age!!!

En VBA, comment transporte-t-on les valeurs de variables d'une sous-routine
à une autre. Je pensais que c'était ce à quoi servaient les "()" qui
apparaissent chaque fois qu'on écrit: "Sub XXXX ()", mais j'ai essayé, en
inscrivant le nom de la variable entre ces parenthèses pour les deux routines
en question, et ça n'a pas marché.
Suis-je sur la bonne voie, ou non.

Merci d'avance pour votre patience avec un commençant!!!

10 réponses

Avatar
JacMar
J'ai oublié de mentionner que je travaille avec Excel 2002, et Windows XP.
Merci.

"JacMar" wrote:

Je commence à essayer de programmer en VBA. Mes connaissances en
programmation datent du "FORTRAN", que j'ai utilisé, dans le temps, de
nombreuses années!! Ce qui indique probablement mon age!!!

En VBA, comment transporte-t-on les valeurs de variables d'une sous-routine
à une autre. Je pensais que c'était ce à quoi servaient les "()" qui
apparaissent chaque fois qu'on écrit: "Sub XXXX ()", mais j'ai essayé, en
inscrivant le nom de la variable entre ces parenthèses pour les deux routines
en question, et ça n'a pas marché.
Suis-je sur la bonne voie, ou non.

Merci d'avance pour votre patience avec un commençant!!!


Avatar
michdenis
Bonjour JacMar,

Voici 2 façons de faire illustrer de ces petits exemple :

A ) passer la variable en paramètre à une fonction :
'------------------------
Sub test()
MsgBox Digits("Maison")
End Sub
'------------------------

Function Digits(mot As String)
Digits = Left(mot, 3)
End Function
'------------------------

B) Déclaration de la variable au niveau du module

'Dans le haut du module :
Dim MaVar As String
'------------------------
Sub test()
MaVar = "Maison"
End Sub
'------------------------
Sub Digits()
MsgBox Left(MaVar, 3)
End Sub
'------------------------

Et si tu désires que ta variable soit accessible dans tous les modules de ton projet,
tu la déclares comme Public dans un module Standard.
Public MaVar as String


Salutations!




"JacMar" a écrit dans le message de news:
Je commence à essayer de programmer en VBA. Mes connaissances en
programmation datent du "FORTRAN", que j'ai utilisé, dans le temps, de
nombreuses années!! Ce qui indique probablement mon age!!!

En VBA, comment transporte-t-on les valeurs de variables d'une sous-routine
à une autre. Je pensais que c'était ce à quoi servaient les "()" qui
apparaissent chaque fois qu'on écrit: "Sub XXXX ()", mais j'ai essayé, en
inscrivant le nom de la variable entre ces parenthèses pour les deux routines
en question, et ça n'a pas marché.
Suis-je sur la bonne voie, ou non.

Merci d'avance pour votre patience avec un commençant!!!
Avatar
JacMar
Merci MichDennis. Je vais essayer cela demain a.m., et je reviendrai
surement si j'ai encore des difficultés.



"michdenis" wrote:

Bonjour JacMar,

Voici 2 façons de faire illustrer de ces petits exemple :

A ) passer la variable en paramètre à une fonction :
'------------------------
Sub test()
MsgBox Digits("Maison")
End Sub
'------------------------

Function Digits(mot As String)
Digits = Left(mot, 3)
End Function
'------------------------

B) Déclaration de la variable au niveau du module

'Dans le haut du module :
Dim MaVar As String
'------------------------
Sub test()
MaVar = "Maison"
End Sub
'------------------------
Sub Digits()
MsgBox Left(MaVar, 3)
End Sub
'------------------------

Et si tu désires que ta variable soit accessible dans tous les modules de ton projet,
tu la déclares comme Public dans un module Standard.
Public MaVar as String


Salutations!




"JacMar" a écrit dans le message de news:
Je commence à essayer de programmer en VBA. Mes connaissances en
programmation datent du "FORTRAN", que j'ai utilisé, dans le temps, de
nombreuses années!! Ce qui indique probablement mon age!!!

En VBA, comment transporte-t-on les valeurs de variables d'une sous-routine
à une autre. Je pensais que c'était ce à quoi servaient les "()" qui
apparaissent chaque fois qu'on écrit: "Sub XXXX ()", mais j'ai essayé, en
inscrivant le nom de la variable entre ces parenthèses pour les deux routines
en question, et ça n'a pas marché.
Suis-je sur la bonne voie, ou non.

Merci d'avance pour votre patience avec un commençant!!!





Avatar
Clément Marcotte
Bonjour,

Cela fait bien longtemps que je n'ai pas touché au FORTRAN et je ne me
souviens plus comment FORTRAN traite les variables ainsi transférées.
Aussi, me semble-t-il opportun de compléter un peu ce que dis Denis.

A ) passer la variable en paramètre à une fonction :
'------------------------
Sub test()
MsgBox Digits("Maison")
End Sub
'------------------------

Function Digits(mot As String)
Digits = Left(mot, 3)
End Function
'------------------------



Cela peut aussi être fait de sub() à sub().

D'une manière plus générale, on peut passer les variables de deux façons,
soit par référence (avec le mot-clef ByRef, ou aucun mot-clef). C'est le
mode par défaut. Dans ce cas, c'est l'adresse de la variable qui est en fait
transférée. Cela a pour effet que toute modification de la valeur de la
variable dans la procédure de destination, se répercute automatiquement dans
la procédure d'origine.

On peut aussi passer la variable par valeur (avec le mot-clef ByVal), ce qui
signifie que la procédure de destination n'a pas accès à l'adresse de la
variable mais à une copie du contenu de la variable. Dans ce cas, la
modification de la valeur dans la procédure de destination ne se répercute
pas dans la procédure d'origine.

Pour quelqu'un qui ne le sait pas, ou qui l'oublie, cela peut causer
quelques surprises. Mais comme je disais, je ne me souviens plus comment
c'est dans FORTRAN.


Avatar
JacMar
Merci beaucoup Clément Marcotte. (Entre parenthèses, on est peut-être
parents: le Mar de JacMar, est pour Marcotte.)

Si je me souviens bien de mon Fortran, dans l'appel de la sous-routine, on
avait qu'à indiquer à l'intérieur des (), le nom des variables qu'on voulait
transférer à la routine. C'est pour cela que je me demande encore le
pourquoi des (), dans toutes les procédures de VBA, comme dans "Sub ... ()"


"Clément Marcotte" wrote:

Bonjour,

Cela fait bien longtemps que je n'ai pas touché au FORTRAN et je ne me
souviens plus comment FORTRAN traite les variables ainsi transférées.
Aussi, me semble-t-il opportun de compléter un peu ce que dis Denis.

A ) passer la variable en paramètre à une fonction :
'------------------------
Sub test()
MsgBox Digits("Maison")
End Sub
'------------------------

Function Digits(mot As String)
Digits = Left(mot, 3)
End Function
'------------------------



Cela peut aussi être fait de sub() à sub().

D'une manière plus générale, on peut passer les variables de deux façons,
soit par référence (avec le mot-clef ByRef, ou aucun mot-clef). C'est le
mode par défaut. Dans ce cas, c'est l'adresse de la variable qui est en fait
transférée. Cela a pour effet que toute modification de la valeur de la
variable dans la procédure de destination, se répercute automatiquement dans
la procédure d'origine.

On peut aussi passer la variable par valeur (avec le mot-clef ByVal), ce qui
signifie que la procédure de destination n'a pas accès à l'adresse de la
variable mais à une copie du contenu de la variable. Dans ce cas, la
modification de la valeur dans la procédure de destination ne se répercute
pas dans la procédure d'origine.

Pour quelqu'un qui ne le sait pas, ou qui l'oublie, cela peut causer
quelques surprises. Mais comme je disais, je ne me souviens plus comment
c'est dans FORTRAN.







Avatar
Ange Ounis
C'est pour cela que je me demande encore le
pourquoi des (), dans toutes les procédures de VBA, comme dans "Sub ... ()"


Les parenthèses servent à déclarer des paramètres dont la procédure (Sub) a
éventuellement besoin pour travailler. Des parenthèses vident indiquent qu'aucun
paramètre n'est nécessaire.

Petit exemple :
''''''''''''''''
Sub TesteLeTest()
TestMot "Mot"
End Sub

Sub TestMot(S)
MsgBox Left(S, 1)
End Sub
''''''''''''''''

----------
Ange Ounis
----------

Merci beaucoup Clément Marcotte. (Entre parenthèses, on est peut-être
parents: le Mar de JacMar, est pour Marcotte.)

Si je me souviens bien de mon Fortran, dans l'appel de la sous-routine, on
avait qu'à indiquer à l'intérieur des (), le nom des variables qu'on voulait
transférer à la routine. C'est pour cela que je me demande encore le
pourquoi des (), dans toutes les procédures de VBA, comme dans "Sub ... ()"


"Clément Marcotte" wrote:


Bonjour,

Cela fait bien longtemps que je n'ai pas touché au FORTRAN et je ne me
souviens plus comment FORTRAN traite les variables ainsi transférées.
Aussi, me semble-t-il opportun de compléter un peu ce que dis Denis.


A ) passer la variable en paramètre à une fonction :
'------------------------
Sub test()
MsgBox Digits("Maison")
End Sub
'------------------------

Function Digits(mot As String)
Digits = Left(mot, 3)
End Function
'------------------------



Cela peut aussi être fait de sub() à sub().

D'une manière plus générale, on peut passer les variables de deux façons,
soit par référence (avec le mot-clef ByRef, ou aucun mot-clef). C'est le
mode par défaut. Dans ce cas, c'est l'adresse de la variable qui est en fait
transférée. Cela a pour effet que toute modification de la valeur de la
variable dans la procédure de destination, se répercute automatiquement dans
la procédure d'origine.

On peut aussi passer la variable par valeur (avec le mot-clef ByVal), ce qui
signifie que la procédure de destination n'a pas accès à l'adresse de la
variable mais à une copie du contenu de la variable. Dans ce cas, la
modification de la valeur dans la procédure de destination ne se répercute
pas dans la procédure d'origine.

Pour quelqu'un qui ne le sait pas, ou qui l'oublie, cela peut causer
quelques surprises. Mais comme je disais, je ne me souviens plus comment
c'est dans FORTRAN.









Avatar
Clément Marcotte
Bonjour,

Merci beaucoup Clément Marcotte. (Entre parenthèses, on est peut-être
parents: le Mar de JacMar, est pour Marcotte.)



Ça dépend. J'ai bien un cousin du nom de Jacques dans la région de Québec,
et des cousins et des cousines dans la région de Montréal.

J'ai même des cousins et des cousines que je n'ai jamais rencontrés.

P.S. Si tu es parent avec Benoît Marcotte de l'Agence spatiale canadienne,
nous pourrions bien être parents.

Avatar
JacMar
J'ai pris ma retraite de l'Agence Spatiale Canadienne en Sept 1997. Le nom
Benoit Marcotte m'est familier quoique je suis incapable d'y mettre un
visage. Cependant, je ne crois pas être parent. Mes Grand-parents venait de
la région de Portneuf, près de Québec.

"Clément Marcotte" wrote:

Bonjour,

Merci beaucoup Clément Marcotte. (Entre parenthèses, on est peut-être
parents: le Mar de JacMar, est pour Marcotte.)



Ça dépend. J'ai bien un cousin du nom de Jacques dans la région de Québec,
et des cousins et des cousines dans la région de Montréal.

J'ai même des cousins et des cousines que je n'ai jamais rencontrés.

P.S. Si tu es parent avec Benoît Marcotte de l'Agence spatiale canadienne,
nous pourrions bien être parents.






Avatar
JacMar
je ne suis pas certain que je comprends. . . . ou plutôt, je suis certain
que je ne comprends pas. Que représente le "S" dans cet exemple?

Peut-on transferer des variables de cette façon?

"Ange Ounis" wrote:

C'est pour cela que je me demande encore le
pourquoi des (), dans toutes les procédures de VBA, comme dans "Sub ... ()"


Les parenthèses servent à déclarer des paramètres dont la procédure (Sub) a
éventuellement besoin pour travailler. Des parenthèses vident indiquent qu'aucun
paramètre n'est nécessaire.

Petit exemple :
''''''''''''''''
Sub TesteLeTest()
TestMot "Mot"
End Sub

Sub TestMot(S)
MsgBox Left(S, 1)
End Sub
''''''''''''''''

----------
Ange Ounis
----------



Avatar
Ange Ounis
S est un nom de variable (nom que tu peux choisir à ta guise sous certaines
réserves) et c'est un paramètre dont la procédure TestMot a besoin (pour
renvoyer la première lettre d'un mot, il faut lui fournir un mot).
Ici la variable est non typée, cad qu'elle est, par défaut, du type Variant.

On peut affecter de cette manière une valeur à une variable et permettre à une
autre procédure d'utiliser cette nouvelle valeur.
Petit exemple (dans un module de code ordinaire) :

'''''''''''''
Sub TesteLeTest()
Dim S As String
S = "Mot"
MsgBox S
TestMot S
MsgBox S
End Sub

Sub TestMot(sMot As String)
sMot = "Coucou"
End Sub
'''''''''''''

----------
Ange Ounis
----------

je ne suis pas certain que je comprends. . . . ou plutôt, je suis certain
que je ne comprends pas. Que représente le "S" dans cet exemple?

Peut-on transferer des variables de cette façon?

"Ange Ounis" wrote:


C'est pour cela que je me demande encore le
pourquoi des (), dans toutes les procédures de VBA, comme dans "Sub ... ()"


Les parenthèses servent à déclarer des paramètres dont la procédure (Sub) a
éventuellement besoin pour travailler. Des parenthèses vident indiquent qu'aucun
paramètre n'est nécessaire.

Petit exemple :
''''''''''''''''
Sub TesteLeTest()
TestMot "Mot"
End Sub

Sub TestMot(S)
MsgBox Left(S, 1)
End Sub
''''''''''''''''

----------
Ange Ounis
----------