Comment garder une variable d'une procédure à une autre

Mathioustone Messages postés 20 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 16 mai 2011 - 4 mars 2011 à 09:31
Mathioustone Messages postés 20 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 16 mai 2011 - 7 mars 2011 à 09:05
Bonjour à tous!

Sur mon programme, j'ai trois fonctions qui sont les suivantes:


?sub worksheet_change(Byval target as range) qui effectue une première saisie
?sub saisie2() qui permet une saisie manuelle des cellules restantes
?sub calcul() qui effectue les calculs selon les infos précédemment remplies

Le problème est le suivant:
j'utilise dans la fonction worksheet_change
i Target.Row afin d'avoir la ligne sélectionnée> date_travaux = Range("AV" & i)

Cependant, la valeur de i disparaît dès que je quitte ma fonction sub worksheet_change... j'ai pourtant essayé de déclarer avec static, avec public mais rien -_-
A quoi celà est dû? puis-je parer ce problème et si oui comment?
Merci de l'attention et bonne continuation
Math'

Apprendre le français avant d'apprendre tout autre langage est une chose essentielle

8 réponses

4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
4 mars 2011 à 09:44
Tu as deux solutions.

1) déclare i en public. Pour cela tu dois taper dim i as string à la première ligne de ta macro (la deuxième si tu as un option explicite). i serra visible partout et serra modifiable partout.

2) tu créer un fonction. Car "a fonction sub" c impossible(crois moi ) qui retourne i. Tu auras un truc genre.
'appelle de la fonction
ValeurI = worksheet_change...()


'La fonction worksheet_change...
public function worksheet_change...() as string
dim i as string
...
...
i = Target.Row
worksheet_change... = i
end function

A la fin de la fonction ValeurI = i .
0
Mathioustone Messages postés 20 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 16 mai 2011
4 mars 2011 à 10:21
Dans ce cas, dans mon code au lieu d'avoir:
[list]
Sub Worksheet_Change(ByVal Target As Range)
i = target.row avec le code qui suit

sub saisie2()

sub calculs()
/list

j'aurais:
public function worksheet_change(byval target as range)
et le reste de mon code.

Quelle est la différence entre sub et function? ( je dormirais moins idiot ce soir^^)


Apprendre le français avant d'apprendre tout autre langage est une chose essentielle
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
4 mars 2011 à 10:34
Pas exactement. Tu auras

public function worksheet_change(byval target as range) as string
dim i as string 'je te conseil il ne faut pas gaspiller la mémoire
i = target.row 'avec le code qui suit

sub saisie2()

sub calculs()
worksheet_change = i
end function

un function te permet de retouner une valeur. Une sub ne te le permet pas.
0
Mathioustone Messages postés 20 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 16 mai 2011
4 mars 2011 à 13:06
lorsque je compile, le débogueur m'affiche:
"erreur de compilation: la déclaration de la procédure ne correspond pas à la description de l'évenement ou de la procédure de même nom"
erreur dans la synthaxe peut-être?

Apprendre le français avant d'apprendre tout autre langage est une chose essentielle
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
4 mars 2011 à 13:23
Comme tu ne me transmets pas la ligne, je pars du principe que c'est depuis que tu as changé ta fonction comme cela plublic function Worksheet_Change(ByVal Target As Range) as string.

Il faut que la variable qui récupère la valeur de i soit du même type que i. Si i est un string l'appelle va ressemblé a cela

dim ValRetour as string
ValRetour = Worksheet_Change(Target)

et ta fonction (je me répète volontairement) serra

public function worksheet_change(byval target as range) as string
dim i as string 'je te conseil il ne faut pas gaspiller la mémoire
i = target.row 'avec le code qui suit

sub saisie2()

sub calculs()
worksheet_change = i
end function

Si i n'est pas un string il faut que tu adaptes.

Si tu as tjs des problèmes envoi la ligne d'appelle de la fonction et la fonction.
0
Mathioustone Messages postés 20 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 16 mai 2011
4 mars 2011 à 16:26
pb résolu cf. lien vers forum dans le message précédent pour le fichier.


Apprendre le français avant d'apprendre tout autre langage est une chose essentielle
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
4 mars 2011 à 16:34
G pas bien compris "cf. lien vers forum dans le message précédent pour le fichier. "

Tout es ok ? Ta fonction fonctionne ?
0
Mathioustone Messages postés 20 Date d'inscription mercredi 22 décembre 2010 Statut Membre Dernière intervention 16 mai 2011
7 mars 2011 à 09:05
oupss j'ai dû oublier un post -_- *boulet^^
Forum en question voir post #14.
Voilà, avec ceci ça devrait être mieux :) J'ai changé la stucture de mon programme et j'ai pas réconditionné les variables et autres. je link prochainement ma code lorsqu'il sera finit définitivement pour les curieux :p

Merci à tous et bonne continuation

Math'


Apprendre le français avant d'apprendre tout autre langage est une chose essentielle
0
Rejoignez-nous