OVH Cloud OVH Cloud

Macro / function

9 réponses
Avatar
le pierre
Bonjour,

je ne comprends pas pourquoi si je copie le contenu d'une macro dans
une focntion et que dans une cellule je fait appel =E0 cette fonction,
alors j'ai une erreur !!!

Voici le code associ=E9 :

Sub myMacro1()
MsgBox ("ma macro1")
End Sub

Sub myMacro2()
Range("C15").Select
ActiveCell.FormulaR1C1 =3D "ca marche pas"
Range("C16").Select
End Sub

Function myFunc1()
Call myMacro1
End Function

Function myFunc2()

Range("C15").Select
ActiveCell.FormulaR1C1 =3D "ca marche pas"
Range("C16").Select
End Function



La question est pourquoi si dans une cellule je siaisi :

=3Dmyfunc2()

j'obtiens une erreur ?

merci

9 réponses

Avatar
Garette
Bonjour,

Peut etre parce qu'une Function renvoi une valeur alors qu'un Sub effectue
une action ?
Avatar
le pierre
je ne pense pas que ce soit seulement ca, car si je fais retourner une
valeur à ma fonction c'est la meme chose.
je pense qu'il s'agit d'une histoire d'espace de travail!!!!

En mode Macro, l'espace de travail par defaut est la page active, en
VBA les appels aux objets doivent peut etre faire reference a l'espace
de travail actif !!!



Bonjour,

Peut etre parce qu'une Function renvoi une valeur alors qu'un Sub effectue
une action ?


Avatar
papou
Bonjour
Ta fonction ne renvoie rien parce que tu ne lui affectes aucune valeur !
Si tu souhaites qu'elle te renvoie quelque chose, essaie plutôt ceci :

Function MaFonction()
MaFonction = "Ca marche!"
End Function

Cordialement
Pascal

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

je ne pense pas que ce soit seulement ca, car si je fais retourner une
valeur à ma fonction c'est la meme chose.
je pense qu'il s'agit d'une histoire d'espace de travail!!!!

En mode Macro, l'espace de travail par defaut est la page active, en
VBA les appels aux objets doivent peut etre faire reference a l'espace
de travail actif !!!



Bonjour,

Peut etre parce qu'une Function renvoi une valeur alors qu'un Sub effectue
une action ?


Avatar
le pierre
j'ai fait comme tu dis, maintenant avec mes fonctions je retourne un
entier.
le pb est toujours le meme. Quand j'execute ma macro directement à
partir du menu ca marche mais quand je veux executer ma macro au
travers d'une fonction, ca ne marche pas !!!!!


Bonjour
Ta fonction ne renvoie rien parce que tu ne lui affectes aucune valeur !
Si tu souhaites qu'elle te renvoie quelque chose, essaie plutôt ceci :

Function MaFonction()
MaFonction = "Ca marche!"
End Function

Cordialement
Pascal

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

je ne pense pas que ce soit seulement ca, car si je fais retourner une
valeur à ma fonction c'est la meme chose.
je pense qu'il s'agit d'une histoire d'espace de travail!!!!

En mode Macro, l'espace de travail par defaut est la page active, en
VBA les appels aux objets doivent peut etre faire reference a l'espace
de travail actif !!!



Bonjour,

Peut etre parce qu'une Function renvoi une valeur alors qu'un Sub effec tue
une action ?




Avatar
le pierre
en fait pour etre plus clair, la veritable question est pourquoi le
code issue d'une macro, n'est pas executable au travers de l'appel
d'une fonction par le bieais d'une formule.

je m'explique :

1) j'ai une macro qui m'affiche "bonjour" dans une cellule.

2) je crée une fonction qui contient le code associée à la macro et
qui en plus me retourne une valeur !! pourquoi pas ?

3) j'appelle ma fonction au travers d'une formule dans une cellule.

Tout simplement, et bien la j'ai une erreur !!!!! essayez vous verez.



j'ai fait comme tu dis, maintenant avec mes fonctions je retourne un
entier.
le pb est toujours le meme. Quand j'execute ma macro directement à
partir du menu ca marche mais quand je veux executer ma macro au
travers d'une fonction, ca ne marche pas !!!!!


Bonjour
Ta fonction ne renvoie rien parce que tu ne lui affectes aucune valeur !
Si tu souhaites qu'elle te renvoie quelque chose, essaie plutôt ceci :

Function MaFonction()
MaFonction = "Ca marche!"
End Function

Cordialement
Pascal

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

je ne pense pas que ce soit seulement ca, car si je fais retourner une
valeur à ma fonction c'est la meme chose.
je pense qu'il s'agit d'une histoire d'espace de travail!!!!

En mode Macro, l'espace de travail par defaut est la page active, en
VBA les appels aux objets doivent peut etre faire reference a l'espace
de travail actif !!!



Bonjour,

Peut etre parce qu'une Function renvoi une valeur alors qu'un Sub eff ectue
une action ?






Avatar
papou
Le problème reste le même !
Si ta macro ne définit pas de valeur alors ça ne marchera pas.
Par contre avec ça tu auras le résultat que tu souhaites :
'cette 1ère ligne à positionner en tête de module
Public LaValeur

Sub Macro1()
LaValeur = "Toto"
End Sub

Function MaFonction()
Macro1
MaFonction = LaValeur
End Function

Cordialement
Pascal



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

j'ai fait comme tu dis, maintenant avec mes fonctions je retourne un
entier.
le pb est toujours le meme. Quand j'execute ma macro directement à
partir du menu ca marche mais quand je veux executer ma macro au
travers d'une fonction, ca ne marche pas !!!!!


Bonjour
Ta fonction ne renvoie rien parce que tu ne lui affectes aucune valeur !
Si tu souhaites qu'elle te renvoie quelque chose, essaie plutôt ceci :

Function MaFonction()
MaFonction = "Ca marche!"
End Function

Cordialement
Pascal

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

je ne pense pas que ce soit seulement ca, car si je fais retourner une
valeur à ma fonction c'est la meme chose.
je pense qu'il s'agit d'une histoire d'espace de travail!!!!

En mode Macro, l'espace de travail par defaut est la page active, en
VBA les appels aux objets doivent peut etre faire reference a l'espace
de travail actif !!!



Bonjour,

Peut etre parce qu'une Function renvoi une valeur alors qu'un Sub
effectue
une action ?




Avatar
Garette
Re-bonjour,

Comme le dit papou, la fontion retourne un résultat.
A l'endroit où elle est saisie.
Si la fonction appelle une procédure qui se balade dans la feuille ça n'a
plus de sens.
Qui plus est, pour peu que la fonction soit volatile à chaque recalcul dans
la feuille il y aurait une selection fantaisiste des cellules.

Ce que je comprend, c'est que les Sub executent des actions, Select, insert,
etc .., les Functions font des calculs et renvoient des résultats en lieu et
place où elles sont tapées.
Je pense que c'est pour ça que dans ton cas ça ne fonctionne pas.
Dans Insertion/Fonction je ne vois aucune fonction integrée d'Excel qui
fasse ce genre de truc... Elles ne renvoient que des données

Essaye ça, colle la fonction dans une cellule puis saisis des valeurs dans
d'autres cellules ....
Function myFunc2()
Application.Volatile
MsgBox "Coucou"
End Function
Avatar
Ange Ounis
le pb est toujours le meme. Quand j'execute ma macro directement à
partir du menu ca marche mais quand je veux executer ma macro au
travers d'une fonction, ca ne marche pas !!!!!


Et ça ne peut pas marcher parce qu'Excel l'interdit purement et simplement, _et
volontairement_ : ce n'est _pas_ un bug, c'est "by design". Une fonction n'a pas
le droit d'exécuter une action (sauf rares exceptions), elle ne peut que
renvoyer un résultat.
C'est comme ça... Il faut apprendre à faire avec ;)

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

j'ai fait comme tu dis, maintenant avec mes fonctions je retourne un
entier.
le pb est toujours le meme. Quand j'execute ma macro directement à
partir du menu ca marche mais quand je veux executer ma macro au
travers d'une fonction, ca ne marche pas !!!!!


Bonjour
Ta fonction ne renvoie rien parce que tu ne lui affectes aucune valeur !
Si tu souhaites qu'elle te renvoie quelque chose, essaie plutôt ceci :

Function MaFonction()
MaFonction = "Ca marche!"
End Function

Cordialement
Pascal

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

je ne pense pas que ce soit seulement ca, car si je fais retourner une
valeur à ma fonction c'est la meme chose.
je pense qu'il s'agit d'une histoire d'espace de travail!!!!

En mode Macro, l'espace de travail par defaut est la page active, en
VBA les appels aux objets doivent peut etre faire reference a l'espace
de travail actif !!!



Bonjour,

Peut etre parce qu'une Function renvoi une valeur alors qu'un Sub effectue
une action ?







Avatar
Ange Ounis
Petit précision : on parle bien là de fonctions persos (VBA) utilisées dans une
feuille de calcul. (Dans du code VBA, une fonction peut faire exactement la même
chose qu'une macro, et, en plus, renvoyer un résultat).

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

le pb est toujours le meme. Quand j'execute ma macro directement à
partir du menu ca marche mais quand je veux executer ma macro au
travers d'une fonction, ca ne marche pas !!!!!


Et ça ne peut pas marcher parce qu'Excel l'interdit purement et
simplement, _et volontairement_ : ce n'est _pas_ un bug, c'est "by
design". Une fonction n'a pas le droit d'exécuter une action (sauf rares
exceptions), elle ne peut que renvoyer un résultat.
C'est comme ça... Il faut apprendre à faire avec ;)

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

j'ai fait comme tu dis, maintenant avec mes fonctions je retourne un
entier.
le pb est toujours le meme. Quand j'execute ma macro directement à
partir du menu ca marche mais quand je veux executer ma macro au
travers d'une fonction, ca ne marche pas !!!!!


Bonjour
Ta fonction ne renvoie rien parce que tu ne lui affectes aucune valeur !
Si tu souhaites qu'elle te renvoie quelque chose, essaie plutôt ceci :

Function MaFonction()
MaFonction = "Ca marche!"
End Function

Cordialement
Pascal

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

je ne pense pas que ce soit seulement ca, car si je fais retourner une
valeur à ma fonction c'est la meme chose.
je pense qu'il s'agit d'une histoire d'espace de travail!!!!

En mode Macro, l'espace de travail par defaut est la page active, en
VBA les appels aux objets doivent peut etre faire reference a l'espace
de travail actif !!!



Bonjour,

Peut etre parce qu'une Function renvoi une valeur alors qu'un Sub
effectue
une action ?