VBA: executer une macro depuis une fonction

cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 4 février 2009 - 19 janv. 2009 à 15:25
cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 4 février 2009 - 4 févr. 2009 à 12:24
Bonjour à tous,

j'ai un souci, j'arrive pas à exécuter une fonction (personnalisée) qui appelle une macro:

dans la cellule B1 de la feuille "Control" j'ai tapé la fonction:
=Execution(A1)
cette fonction est définie dans le Module1:

function Execution(byVal InP1 as Object) as String
...
Call Execute(arguments) 'c'est ma macro
...
end function

la macro est
sub Execute(arguments)
'code
ThisWorkBook.Worksheets("Actions").Activate
ThisWorkbook.Worksheets("Actions").Cells(1,1).value = "Nom"
'code
end Sub

lorsque j'appelle la macro directement (par exemple à l'aide d'un bouton, elle tourne sans problème), mais lorsque j'utilise la fonction j'ai des problèmes sur ces deux lignes.

Le ".Activate" reste sans effet, et au moment d'affecter la cellule Cells(1,1) d' "Actions" l'exécution s'interrompe.

J'imagine que le probleme c'est que je ne peux pas jouer avec d'autres feuilles dans une fonction.

A1 c'est l'heure qui est mise à jour chaque second et je dois exécuter cette macro à 17h00 (ce n'est pas l'heure de l'ordi).

Est-ce que quelqu'un a une idée alternative?
Comment je peux déclancher une macro suivant une valeur d'une cellule et renvoyer "OK" si cette macro a été exécutée. (il y a d'autres contraintes externes).

Merci à ceux qui ont des idées.

4 réponses

cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 4 février 2009
19 janv. 2009 à 15:31
je m'excuse le message n'a pas été bien formaté:

Bonjour à tous, j'ai un souci, j'arrive pas à exécuter une fonction (personnalisée) qui appelle une macro: dans la cellule B1 de la feuille "Control" j'ai tapé la fonction:

=Execution(A1)

cette fonction est définie dans le Module1:

Function Execution(byVal InP1 as Object) as String ... Call Execute(arguments) 'c'est ma macro ... end Function

la macro est

Sub Execute(arguments)
'code

ThisWorkBook.Worksheets("Actions").Activate
ThisWorkbook.Worksheets("Actions"). _
Cells(1,1).value = "Nom" 'code

end Sub

lorsque j'appelle la macro directement (par exemple à l'aide d'un bouton, elle tourne sans problème), mais lorsque j'utilise la fonction j'ai des problèmes sur ces deux lignes.

Le ".Activate" reste sans effet, et au moment d'affecter la cellule Cells(1,1) d' "Actions" l'exécution s'interrompe.

J'imagine que le probleme c'est que je ne peux pas jouer avec d'autres feuilles dans une fonction. A1 c'est l'heure qui est mise à jour chaque second et je dois exécuter cette macro à 17h00 (ce n'est pas l'heure de l'ordi).

Est-ce que quelqu'un a une idée alternative? Comment je peux déclancher une macro suivant une valeur d'une cellule et renvoyer "OK" si cette macro a été exécutée. (il y a d'autres contraintes externes).

Merci à ceux qui ont des idées.
0
cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 4 février 2009
19 janv. 2009 à 15:35
Je suis vraiment désolé pour la polution, j'étais sur un navigateur qui ne me permettait pas de donner format à mon texte, j'espère que cette fois va marcher.

Bonjour à tous,

j'ai un souci, j'arrive pas à exécuter une fonction
(personnalisée) qui appelle une macro:
dans la cellule B1 de la feuille
"Control" j'ai tapé la fonction:

=Execution(A1) cette fonction est
définie dans le Module1:

Function Execution(byVal InP1 as Object) as
String
    ...
   Call Execute(arguments) 'c'est ma macro
   ...
End Function

la
macro est:
Sub Execute(arguments)
   'code

   ThisWorkBook.Worksheets("Actions").Activate  

   ThisWorkbook.Worksheets("Actions").Cells(1,1).value = "Nom"
   'code

End Sub

lorsque j'appelle la macro directement (par exemple à l'aide
d'un bouton, elle tourne sans problème), mais lorsque j'utilise la
fonction j'ai des problèmes sur ces deux lignes.

Le ".Activate" reste
sans effet, et au moment d'affecter la cellule Cells(1,1) d' "Actions"
l'exécution s'interrompe.

J'imagine que le problème c'est que je ne
peux pas jouer avec d'autres feuilles dans une fonction.
"A1" c'est
l'heure qui est mise à jour chaque second et je dois exécuter cette
macro à 17h00 (ce n'est pas l'heure de l'ordi).

Est-ce que quelqu'un a
une idée alternative? Comment je peux déclencher une macro suivant une
valeur d'une cellule et renvoyer "OK" si cette macro a été exécutée.
(il y a d'autres contraintes externes).

Merci à ceux qui ont des idées.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
19 janv. 2009 à 23:14
Bonsoir,

Et si tu essai simplement comme ça ?

Private Function Execute(arguments)
   'code
   ThisWorkbook.Worksheets("Actions").Activate
   ThisWorkbook.Worksheets("Actions").Cells(1, 1).Value = "Nom"
   'code
End Function



Function Execution()
   Call Execute(arguments)  'c'est ma macro
End Function



Amicalement,
Us.
0
cs_edoo82 Messages postés 8 Date d'inscription jeudi 12 juin 2008 Statut Membre Dernière intervention 4 février 2009
4 févr. 2009 à 12:24
Merci pour ta réponse,
mais non, justement la ligne
ThisWorkbook.Worksheets("Actions").Cells(1, 1).Value = "Nom"

n'est pas exécutable dans une fonction, je sais pas la raison et je peux pas capturer le type d'erreur (la gestion d'erreurs en VBA est très mauvaise), en fait c'est comme si le fichier se bloque comme "seul lecture" et ne permet pas de faire de modification (j'imagine que c'est pour éviter de modifier des cellules que la même fonction appelle, ce qui pourrair provoquer un appel en cascade, si on est on mode calcul automatique, enfin, je sais pas et j'ai pas de pistes )

ce que j'essaye pour le moment est d'exécuter la macro que je souhaite depuis une fonction qui se trouve dans un autre .xls

merci!
0