Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

transfert de parametres entre procedures

15 réponses
Avatar
jcp66
Bonjour
J'ai une procedure

Sub LectureParam()
Lecture Feuille excel avec .....
nbpersonnes=cells(i,1)
etc

Puis d'autres procedures qui doivent utiliser ces donnees
Sub Creafich()
LectureParam
For i=1 to nbpersonnes
etc

Ors la valeur de nbpersonnes lue dans la 1ere procedure n'est pas transmise
à la 2ème

Il y a donc quelque chose que je ne fais pas comme il faut mais je ne sais
pas quoi. Si quelqu'un peut m'aider, par avance merci.


Cordialement
jcp

5 réponses

1 2
Avatar
LSteph
..heu oui Fredo et Jacky
en relisant le sujet c'est "un peu" à côté de la plaque ...
mais sur cette propension à vouloir s'affranchir systématiquement
de ci ou ça c'est un peu le même principe...

Merci de votre soutien.
;-)

Fredo P. a écrit :
Merci LSteph pour cette longue tirade, mon interrogation était orientée
principalement sur l'utilité, non pas envers l'utilisateur mais seulement
sur le déroulement de la routine s'il s'en trouva amélioré par l'emploi de
Call. Mais je conviens que cela peut aidé à la compréhension du code sur
tout pour ceux dont la programation n'a pas commencé avec VBA.

"LSteph" a écrit dans le message de
news:OO$
bonsoir ,

amha...

c'est pas toujours dans la ligne en question mais
quand au fait de déclarer ou non ses variables cela en dit tout de suite
long sur celui qui code !

Même quand ce n'est pas obligatoire c'est nettement plus efficace!

Et quand ça ne servirait visiblement à rien pour certains qui se
complaisent dans le camp de ceux qui pensent qu'on peut s'en affranchir...
c'est précisément là que c'est important et que cela apporte au moins de
savoir ce qu'on utilise et ce que cela pèse dans ce que l'on en fait.
Certains pros peuvent sans doute s'en passer parfois .
Dire que c'est indispensable c'est une autre question et s'en passer
quand on sait que le contexte le permet c'est possible..

Toutefois dans bien des cas cela posera pb si on a pas compris pourquoi
et si un autre utilisateur prend l'habitude soigneuse d'utiliser mais
sans trop savoir pourquoi
ce qui donne un potentiel bien plus grand en efficacité
selon l'ampleur des besoins que l'on a au regard des ressources dont on
dispose cela peut peser lourd et lui donner un truc qui ne passe pas
chez lui alors qu'il s'attache à faire propre c'est un peu vilain !

...donc plus humblement et simplement en s'y habituant on se rendra
compte rapidement que l'on a gagné au moins de faire quelque chose qui
pourra être utilisé plus efficacement et même si il y a des cas ou cela
ne changerait absolument rien cela a au moins le mérite de nous
contraindre à comprendre.

Regarde ce qui concerne le type des variables, leur poids..etc

Après, ce n'est pas toujours une question de poids ..!
Les possibilités de l'informatique actuelle permettraient de "s'en
affranchir dans nombre de cas.

mais savoir qu'on utilise un booleeen un byte un integer un long un
entier , un objet, un variant.. et pourquoi, voire l'histoire qui a mené
aux solutions d'aujourd'hui.


Ce sont des besoins du code et de ce que l'on veut en faire qu'il est
question!

Mon petit avis d'un 28/11/2008

--
lSteph








jcp66 a écrit :
Merci
On est donc obligés de citer les noms des variables dans la ligne Sub.




N'y a
t il pas moyen de s'en affranchir ?
Merci
jcp

"Jacky" a écrit dans le message de news:

Bonsoir,

Par exemple:
'---------
Sub LectureParam()
i = 1
Call Creafich(Cells(i, 1))
End Sub
'--------------
Sub Creafich(nbpersonnes)
MsgBox "Incrementation dans la boucle " & nbpersonnes
'For i = 1 To nbpersonnes
'----
'----
Next
End Sub
'------------

--
Salutations
JJ


"jcp66" a écrit dans le message de news:
49304cf6$0$915$
Bonjour
J'ai une procedure

Sub LectureParam()
Lecture Feuille excel avec .....
nbpersonnesÎlls(i,1)
etc

Puis d'autres procedures qui doivent utiliser ces donnees
Sub Creafich()
LectureParam
For i=1 to nbpersonnes
etc

Ors la valeur de nbpersonnes lue dans la 1ere procedure n'est pas
transmise à la 2ème

Il y a donc quelque chose que je ne fais pas comme il faut mais je ne
sais pas quoi. Si quelqu'un peut m'aider, par avance merci.


Cordialement
jcp
















Avatar
Jacky
Re..
Tel que je l'avais présenté, "Public nbpersonnes" est en dehors de la sub.
Exemple simple ici
http://www.cijoint.fr/cjlink.php?file=cj200811/cijfzWb7FQ.xls
--
Salutations
JJ


"jcp66" a écrit dans le message de news:
4930655b$0$873$
Public nbpersonnes
Cela me donne un message "Attribut incorrect dans une procedure Sub ou
Function"



"Jacky" a écrit dans le message de news:

Re..
Autres façon peut être en déclaration public ??
'-------------
Public nbpersonnes




'---------------
Sub LectureParam()
i = 1
nbpersonnes = Cells(i, 1)
Creafich
End Sub
'--------------
Sub Creafich()
MsgBox nbpersonnes
End Sub
--
Salutations
JJ


"jcp66" a écrit dans le message de news:
49305c46$0$957$
Merci Jacky.
Oui tout à fait mais j'ai une quinzaine de variables que je lis dans Sub
LectureParam() et que je vais utiliser dans Sub Creafich
Ce qui me donnera
Sub Creafich (nbpersonnes, var2, var3, var4, var5 etc etc)
C'est de cette liste que j'aimerais m'affranchir.
Cordialement


"Jacky" a écrit dans le message de news:

Re...
On est donc obligés de citer les noms des variables dans la ligne Sub.
N'y a t il pas moyen de s'en affranchir ?


Je ne saisie pas vraiment la question.....
Dans==> Sub Creafich(nbpersonnes)
On récupère la valeur mise par==> Call Creafich(Cells(i, 1))
Ici la valeur de la cellule (i,1) que l'on récupère dans une variable
dans la 2 ème procédure.
J'avais pris "nbpersonnes" parce que la suite laissait penser que
......mais ce nom peut être n'importe lequel.
Sub Creafich(x)
ou
Sub Creafich(x as long)
C'était bien un transfert de variable d'une sub à une autre qui est
demandé ??
--
Salutations
JJ


"jcp66" a écrit dans le message de news:
49305386$0$969$
Merci
On est donc obligés de citer les noms des variables dans la ligne Sub.
N'y a t il pas moyen de s'en affranchir ?
Merci
jcp

"Jacky" a écrit dans le message de news:

Bonsoir,

Par exemple:
'---------
Sub LectureParam()
i = 1
Call Creafich(Cells(i, 1))
End Sub
'--------------
Sub Creafich(nbpersonnes)
MsgBox "Incrementation dans la boucle " & nbpersonnes
'For i = 1 To nbpersonnes
'----
'----
Next
End Sub
'------------

--
Salutations
JJ


"jcp66" a écrit dans le message de news:
49304cf6$0$915$
Bonjour
J'ai une procedure

Sub LectureParam()
Lecture Feuille excel avec .....
nbpersonnesÎlls(i,1)
etc

Puis d'autres procedures qui doivent utiliser ces donnees
Sub Creafich()
LectureParam
For i=1 to nbpersonnes
etc

Ors la valeur de nbpersonnes lue dans la 1ere procedure n'est pas
transmise à la 2ème

Il y a donc quelque chose que je ne fais pas comme il faut mais je
ne sais pas quoi. Si quelqu'un peut m'aider, par avance merci.


Cordialement
jcp































Avatar
LSteph
> tout pour ceux dont la programation n'a pas commencé avec VBA.


et surtout ceux qui croient qu'on devrait s'en paser avec vba

Fredo P. a écrit :
Merci LSteph pour cette longue tirade, mon interrogation était orientée
principalement sur l'utilité, non pas envers l'utilisateur mais seulement
sur le déroulement de la routine s'il s'en trouva amélioré par l'emploi de
Call. Mais je conviens que cela peut aidé à la compréhension du code sur
tout pour ceux dont la programation n'a pas commencé avec VBA.

"LSteph" a écrit dans le message de
news:OO$
bonsoir ,

amha...

c'est pas toujours dans la ligne en question mais
quand au fait de déclarer ou non ses variables cela en dit tout de suite
long sur celui qui code !

Même quand ce n'est pas obligatoire c'est nettement plus efficace!

Et quand ça ne servirait visiblement à rien pour certains qui se
complaisent dans le camp de ceux qui pensent qu'on peut s'en affranchir...
c'est précisément là que c'est important et que cela apporte au moins de
savoir ce qu'on utilise et ce que cela pèse dans ce que l'on en fait.
Certains pros peuvent sans doute s'en passer parfois .
Dire que c'est indispensable c'est une autre question et s'en passer
quand on sait que le contexte le permet c'est possible..

Toutefois dans bien des cas cela posera pb si on a pas compris pourquoi
et si un autre utilisateur prend l'habitude soigneuse d'utiliser mais
sans trop savoir pourquoi
ce qui donne un potentiel bien plus grand en efficacité
selon l'ampleur des besoins que l'on a au regard des ressources dont on
dispose cela peut peser lourd et lui donner un truc qui ne passe pas
chez lui alors qu'il s'attache à faire propre c'est un peu vilain !

...donc plus humblement et simplement en s'y habituant on se rendra
compte rapidement que l'on a gagné au moins de faire quelque chose qui
pourra être utilisé plus efficacement et même si il y a des cas ou cela
ne changerait absolument rien cela a au moins le mérite de nous
contraindre à comprendre.

Regarde ce qui concerne le type des variables, leur poids..etc

Après, ce n'est pas toujours une question de poids ..!
Les possibilités de l'informatique actuelle permettraient de "s'en
affranchir dans nombre de cas.

mais savoir qu'on utilise un booleeen un byte un integer un long un
entier , un objet, un variant.. et pourquoi, voire l'histoire qui a mené
aux solutions d'aujourd'hui.


Ce sont des besoins du code et de ce que l'on veut en faire qu'il est
question!

Mon petit avis d'un 28/11/2008

--
lSteph








jcp66 a écrit :
Merci
On est donc obligés de citer les noms des variables dans la ligne Sub.




N'y a
t il pas moyen de s'en affranchir ?
Merci
jcp

"Jacky" a écrit dans le message de news:

Bonsoir,

Par exemple:
'---------
Sub LectureParam()
i = 1
Call Creafich(Cells(i, 1))
End Sub
'--------------
Sub Creafich(nbpersonnes)
MsgBox "Incrementation dans la boucle " & nbpersonnes
'For i = 1 To nbpersonnes
'----
'----
Next
End Sub
'------------

--
Salutations
JJ


"jcp66" a écrit dans le message de news:
49304cf6$0$915$
Bonjour
J'ai une procedure

Sub LectureParam()
Lecture Feuille excel avec .....
nbpersonnesÎlls(i,1)
etc

Puis d'autres procedures qui doivent utiliser ces donnees
Sub Creafich()
LectureParam
For i=1 to nbpersonnes
etc

Ors la valeur de nbpersonnes lue dans la 1ere procedure n'est pas
transmise à la 2ème

Il y a donc quelque chose que je ne fais pas comme il faut mais je ne
sais pas quoi. Si quelqu'un peut m'aider, par avance merci.


Cordialement
jcp
















Avatar
LSteph
plus simplement exemple de structure:



Dim nbperson as integer

sub fixmavar()
nbperson=8
end sub

sub usemavar()
msgbox "il y a " & nbperson & " personne(s)"
end sub


jcp66 a écrit :
Public nbpersonnes
Cela me donne un message "Attribut incorrect dans une procedure Sub ou
Function"



"Jacky" a écrit dans le message de news:

Re..
Autres façon peut être en déclaration public ??
'-------------
Public nbpersonnes




'---------------
Sub LectureParam()
i = 1
nbpersonnes = Cells(i, 1)
Creafich
End Sub
'--------------
Sub Creafich()
MsgBox nbpersonnes
End Sub
--
Salutations
JJ


"jcp66" a écrit dans le message de news:
49305c46$0$957$
Merci Jacky.
Oui tout à fait mais j'ai une quinzaine de variables que je lis dans Sub
LectureParam() et que je vais utiliser dans Sub Creafich
Ce qui me donnera
Sub Creafich (nbpersonnes, var2, var3, var4, var5 etc etc)
C'est de cette liste que j'aimerais m'affranchir.
Cordialement


"Jacky" a écrit dans le message de news:

Re...
On est donc obligés de citer les noms des variables dans la ligne Sub.
N'y a t il pas moyen de s'en affranchir ?


Je ne saisie pas vraiment la question.....
Dans==> Sub Creafich(nbpersonnes)
On récupère la valeur mise par==> Call Creafich(Cells(i, 1))
Ici la valeur de la cellule (i,1) que l'on récupère dans une variable
dans la 2 ème procédure.
J'avais pris "nbpersonnes" parce que la suite laissait penser que
......mais ce nom peut être n'importe lequel.
Sub Creafich(x)
ou
Sub Creafich(x as long)
C'était bien un transfert de variable d'une sub à une autre qui est
demandé ??
--
Salutations
JJ


"jcp66" a écrit dans le message de news:
49305386$0$969$
Merci
On est donc obligés de citer les noms des variables dans la ligne Sub.
N'y a t il pas moyen de s'en affranchir ?
Merci
jcp

"Jacky" a écrit dans le message de news:

Bonsoir,

Par exemple:
'---------
Sub LectureParam()
i = 1
Call Creafich(Cells(i, 1))
End Sub
'--------------
Sub Creafich(nbpersonnes)
MsgBox "Incrementation dans la boucle " & nbpersonnes
'For i = 1 To nbpersonnes
'----
'----
Next
End Sub
'------------

--
Salutations
JJ


"jcp66" a écrit dans le message de news:
49304cf6$0$915$
Bonjour
J'ai une procedure

Sub LectureParam()
Lecture Feuille excel avec .....
nbpersonnesÎlls(i,1)
etc

Puis d'autres procedures qui doivent utiliser ces donnees
Sub Creafich()
LectureParam
For i=1 to nbpersonnes
etc

Ors la valeur de nbpersonnes lue dans la 1ere procedure n'est pas
transmise à la 2ème

Il y a donc quelque chose que je ne fais pas comme il faut mais je ne
sais pas quoi. Si quelqu'un peut m'aider, par avance merci.


Cordialement
jcp


























Avatar
Michel Angelosanto
Si tu es dans un même module, il suffit de définir tes variables en début de
module (publiques)
Si les procédures sont dans des modules différents, il faut les passer en
paramètres dans la procédure d'appel.

"jcp66" a écrit dans le message de
news:49304cf6$0$915$
Bonjour
J'ai une procedure

Sub LectureParam()
Lecture Feuille excel avec .....
nbpersonnesÎlls(i,1)
etc

Puis d'autres procedures qui doivent utiliser ces donnees
Sub Creafich()
LectureParam
For i=1 to nbpersonnes
etc

Ors la valeur de nbpersonnes lue dans la 1ere procedure n'est pas
transmise à la 2ème

Il y a donc quelque chose que je ne fais pas comme il faut mais je ne sais
pas quoi. Si quelqu'un peut m'aider, par avance merci.


Cordialement
jcp





--
Michel Angelosanto, Bordeaux
http://angelosa.free.fr/
1 2