Affecter une valeur dans une cellule depuis une fonction

F

Fabien

Guest
Bonjour,

Je souhaiterais affecter le contenu d'une cellule par un Worksheets(...).Cells(...).Value="..." dans une fonction. Or, je recupere une erreur "#VALEUR!".
Le meme code execute depuis une macro Sub() fonctionne par contre.

En detail, voici mon code ecrit dans un module:

Sub sub_test()
Worksheets("Feuil1").Cells(1,2).Value = "titi"
End Sub

Function fonc_test()
Worksheets("Feuil1").Cells(1,2).Value = "toto"
fonc_test = "fin"
End Function

Dans la cellule A1, j'appelle la fonction "=fonc_test()" et j'obtiens l'erreur #VALEUR!. La cellule A2 ne contient pas "toto".
Par contre, lorsque je lance sub_test(), la cellule A2 contient bien "titi".

Avez-vous des infos sur ce type de comportement SVP?


Merci

Fabien
 
J

jyM

Guest
salut Fabien,

je crois que tu devrais attendre "fin" dans ta cellule.
En fait, tu lui fais d'abord écrire "toto" dans la cellule et puis tu évalues la fonction à "fin" pour qu'elle te renvoie "fin" dans la cellule.

Mais surtout, je ne sais pas si tu peux écrire une fonction sans argument
genre >Function fonc_test(QUELQUE_CHOSE)<

vi vi, je viens d'essayer,
donne-lui à manger entre ses parenthèses,
ça se passera sûrement mieux.

salut
jyM
 
F

Fabien

Guest
Salut,

Merci pour ta reponse, mais en fait je n'avais pas suffisamment detaille mon pb.

En fait, le code que j'ai poste est un extrait simplifie d'une fonction plus longue que j'ai ecrit, et qui, elle, a des arguments. J'ai aussi fait le test en mettant un argument bidon dans la fonction, ce qui ne change rien.

De plus, mon attente est que ma fonction me renvoie un statut d'execution dans la cellule dans laquelle je l'appelle (d'ou le fonc_test="fin"), et un resultat de calcul dans une autre cellule (d'ou le ...Value = "toto").

En faisant un debogage pas a pas, il sort bien de la fonction au moment de l'evaluation du ....Value = "toto", c'est donc cette ligne qui pose probleme.

En fait, je n'ai pas un besoin urgent de cette fonction et je pourrais contourner le probleme, mais je suis surtout curieux de savoir si c'est une limitation d'Excel ( je suis en version Excel 2002 SP2).

Merci

Fabien.
 
J

jyM

Guest
salut Fabien,

je lis en vitesse la ri-spote au post ...

bon et bref :
à ce que je crois :

la ligne cells(x,y).value="machin" ne peut fonctionner QUE DANS UNE SUB.
dans un fonction tu dois évaluer la fonction à "machin".
fonc_test = "toto" si tu veux renvoyer toto ou
fonc_test = "fin" si tu veux renvoyer fin.

ta cellule x y ne peut être directement modifiée deouis l'INTERIEUR de la onction ; c'est le retou de fonction lui-même qui colle la valeur idoine.

je te re-suggère bien humblement d'appeler ta fonxtion avec un argument fût-il bidon et de renvoyer tes valeurs par le seul intermédiaire de
fonc_test = "ce qui te chante".

Si je comprends mal ton problème, veux-tu me le faire savoir ET re-poser
ta question afin que d'autres, mieux au fait te répondent.

bye
jyM
 
F

Fabien

Guest
Salut jyM,

Merci pour tes reponses, je crois qu'on est d'accord maintenant.

En fait, ma question portait uniquement sur la possibilite de lancer un "cells(x,y).value="machin"" dans une fonction. Tu viens de confirmer ce qu'il me semblait, c'est-a-dire que cette commande ne peut etre lancee que dans une sub.
J'avais pourtant cherche dans l'aide Excel et VBA, mais apparemment cette limitation n'est mentionnee nulle part.

... je me coucherai moins bete ce soir!

A+

Fabien
 

Discussions similaires

Statistiques des forums

Discussions
314 633
Messages
2 111 417
Membres
111 126
dernier inscrit
vitam