Appeler routine/fonction depuis le tableur
Résolu
ezor
Messages postés
177
Date d'inscription
Statut
Membre
Dernière intervention
-
ezor Messages postés 177 Date d'inscription Statut Membre Dernière intervention -
ezor Messages postés 177 Date d'inscription Statut Membre Dernière intervention -
Bonjour tout le monde,
J'ai créé un petit programme, et j'aimerai pouvoir lancer la routine global (une sorte de main) depuis le tableur excel lui même.
Mais la macro n'apparaît (alt+F8) que si la routine ne prend aucun argument.
Hors justement, j'aimerai que l'utilisateur puisse choisir de lancer cette routine sur la plage de donnée qu'il veut.
en somme, je voudrais pouvoir rentrer dans excel
=ma_procedure(A1:A12) (par exemple)
et que le programme correspondant se lance avec cet argument A1:A12
La procédure en question fonctionne très bien si je lui rentre directement dans le code la plage à utiliser, mais c'est pas pratique de demander à quelqu'un d'ouvrir la bonne page VBA à chaque fois qu'il veut changer sa sélection.
Voilà, j'espère que c'est à peu près clair, et merci d'avance à tous ceux qui essayeront de m'aider
PS : si je pouvais rentrer cette plage de cellule directement depuis une boite de dialogue ça serait encore mieux, mais j'ai vais faire par étape ^^
ezor
J'ai créé un petit programme, et j'aimerai pouvoir lancer la routine global (une sorte de main) depuis le tableur excel lui même.
Mais la macro n'apparaît (alt+F8) que si la routine ne prend aucun argument.
Hors justement, j'aimerai que l'utilisateur puisse choisir de lancer cette routine sur la plage de donnée qu'il veut.
en somme, je voudrais pouvoir rentrer dans excel
=ma_procedure(A1:A12) (par exemple)
et que le programme correspondant se lance avec cet argument A1:A12
La procédure en question fonctionne très bien si je lui rentre directement dans le code la plage à utiliser, mais c'est pas pratique de demander à quelqu'un d'ouvrir la bonne page VBA à chaque fois qu'il veut changer sa sélection.
Voilà, j'espère que c'est à peu près clair, et merci d'avance à tous ceux qui essayeront de m'aider
PS : si je pouvais rentrer cette plage de cellule directement depuis une boite de dialogue ça serait encore mieux, mais j'ai vais faire par étape ^^
ezor
A voir également:
- Appeler routine/fonction depuis le tableur
- Fonction si et - Guide
- Appeler en privé - Guide
- Somme tableur - Guide
- Tableur gratuit - Télécharger - Tableur
- Tableur open office - Télécharger - Suite bureautique
10 réponses
Bonjour,
Essayez de rentrez une instance
Si vous utilisez votre procédure sur une cellule Excel,
Essayez de rentrez une instance
rangeà votre procédure.
Si vous utilisez votre procédure sur une cellule Excel,
=ma_procedure(A1:A12)consiste à entrer l'argument
sheet.range("A1:A12"). Tenez en compte dans le code de votre procédure.
'abord merci de ton aide.
Par contre, je ne sais pas si j'ai bien compris la réponse. Mon code actuelle ressemble à ça
où remplir_tab est une fonction (function) qui prend un Range en argument.
Quelle est la différence avec ce que vous me proposez? je comprend pas bien
(j'ai oublié de dire que je ne me suis mis au vba qu'au début du mois, donc même pas 20 jours d'expérience, ceci expliquant surement cela)
ezor
Par contre, je ne sais pas si j'ai bien compris la réponse. Mon code actuelle ressemble à ça
Sub ma_procedure(donnees As Range) Dim mon_tableau() As Double .... mon_tableau = remplir_tab(donnees) .... End Sub
où remplir_tab est une fonction (function) qui prend un Range en argument.
Quelle est la différence avec ce que vous me proposez? je comprend pas bien
(j'ai oublié de dire que je ne me suis mis au vba qu'au début du mois, donc même pas 20 jours d'expérience, ceci expliquant surement cela)
ezor
Bonjour,
L'utilisation que vous faites de
Ta procédure peut être utilisée avec un bouton de lancement sur la feuille, mais n'a pas de sens à être utilisée dans une cellule. Pour qu'elle fonctionne, vous devez l'utilisez comme suit :
ça peut ne pas avoir de sens dans votre programme si remplir_tab ne retourne pas de valeur scalaire telle qu'un nombre ou une chaîne de caractères. Mais la syntaxe
L'utilisation que vous faites de
ma_procédurenécessite qu'elle soit une fonction, pas une procédure. Si vous voulez connaitre la différence regardez ce lien ...
=ma_procedure(A1:A12)signifie que ta cellule contiendra le résultat de votre fonction
ma_procedure. Or, votre fonction est une procédure qui ne retourne rien. Ainsi, ta cellule ne contiendra pas de résultat.
Ta procédure peut être utilisée avec un bouton de lancement sur la feuille, mais n'a pas de sens à être utilisée dans une cellule. Pour qu'elle fonctionne, vous devez l'utilisez comme suit :
Function ma_procedure(donnees As Range) Dim mon_tableau() As Double .... ma_procedure = remplir_tab(donnees) End Function
ça peut ne pas avoir de sens dans votre programme si remplir_tab ne retourne pas de valeur scalaire telle qu'un nombre ou une chaîne de caractères. Mais la syntaxe
=ma_procedure(A1:A12)suppose que vous utilisez une fonction qui retourne quelque chose.
j'ai déjà essayé avec une routine et une fonction.
Je comprend le problème de mettre =fonction(...) dans une cellule, qui ne reverra qu'une valeur, mais c'est vrai que je n'y avais pas pensé
En réalité, le vrai problème est que dès que mon programme, que ce soit une fonction ou une routine, demande en entrée des arguments, je ne peux pas la lancer autrement que depuis l'éditeur vba.
Autrement dit, je ne peux pas lui associer un bouton (car à aucun moment je ne rentrerai l'argument nécessaire) car elle n'apparaît pas dans le menu avec les autres routine déjà présente
Ce que je souhaite faire c'est donner la possibilité à tout utilisateur de :
-----rentrer ses données dans la ligne qu'il veut (mettons entre A1 et A12 comme plus haut)
-----cliquer sur un bouton (ou autre, peu importe)
-----sélectionner l'endroit où il a rentrée ses données (A1:A12)
-----le programme se lance en utilisant les valeurs contenues dans cette ligne pour
Je comprend le problème de mettre =fonction(...) dans une cellule, qui ne reverra qu'une valeur, mais c'est vrai que je n'y avais pas pensé
En réalité, le vrai problème est que dès que mon programme, que ce soit une fonction ou une routine, demande en entrée des arguments, je ne peux pas la lancer autrement que depuis l'éditeur vba.
Autrement dit, je ne peux pas lui associer un bouton (car à aucun moment je ne rentrerai l'argument nécessaire) car elle n'apparaît pas dans le menu avec les autres routine déjà présente
Ce que je souhaite faire c'est donner la possibilité à tout utilisateur de :
-----rentrer ses données dans la ligne qu'il veut (mettons entre A1 et A12 comme plus haut)
-----cliquer sur un bouton (ou autre, peu importe)
-----sélectionner l'endroit où il a rentrée ses données (A1:A12)
-----le programme se lance en utilisant les valeurs contenues dans cette ligne pour
Si vous avez la possibilité de m'envoyer un exemple sur lequel est expliqué ce que vous cherchez à faire et ce que vous voulez obtenir, ça aidera à mieux comprendre la problématique. Parfois, il faut changer la logique du programme pour qu'il tienne.
Le fait de ne pas voir la procédure signifie qu'elle n'est pas définie en public dans le bon module. Vous devez définir cette procédure dans la feuille de code qui correspond à la feuille qui en fait usage, sinon, en public dans un module :
Le fait de ne pas voir la procédure signifie qu'elle n'est pas définie en public dans le bon module. Vous devez définir cette procédure dans la feuille de code qui correspond à la feuille qui en fait usage, sinon, en public dans un module :
Public Function ma_fonction(...)
Je ne sais pas comment vous envoyer ça.
La routine est en public, dans le code de la feuille correspondante, et dans un module (sous un autre nom, pour tester les deux)
Non, le vrai problème c'est qu'elle prend en entrée un argument.
Si je fais la même routine sans argument (en remplaçant "donnees" par un
Je veux savoir si on peut lancer, depuis la feuille excel, une routine qui demande un argument en entrée.
C'est vraiment la chronologie que j'ai indiqué dans mon message précédent en fait
La routine est en public, dans le code de la feuille correspondante, et dans un module (sous un autre nom, pour tester les deux)
Non, le vrai problème c'est qu'elle prend en entrée un argument.
Si je fais la même routine sans argument (en remplaçant "donnees" par un
Range("A1:A12")directement dans le code, tout se passe bien, j'y ai accès depuis la feuille excel en faisant Alt+F8, je peux mettre un bouton etc....
Je veux savoir si on peut lancer, depuis la feuille excel, une routine qui demande un argument en entrée.
C'est vraiment la chronologie que j'ai indiqué dans mon message précédent en fait
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour à tous
Je ne sais pas si j'ai bien compris
Un exemple ou les macros s'exécutent sur la plage selectionnée au moment du lancement
https://www.cjoint.com/?3Hsog21WhSW
Cdlmt
Je ne sais pas si j'ai bien compris
Un exemple ou les macros s'exécutent sur la plage selectionnée au moment du lancement
https://www.cjoint.com/?3Hsog21WhSW
Cdlmt
Bonjour ccm81,
Ce n'est pas exactement ça que je cherche, mais merci de ton aide.
Je cherche en réalité à pouvoir lancer ma routine quand je le souhaite, sur la plage de donnée (qui est l'argument que reçoit la routine) que je souhaite
Exemple :
Supposons que ma routine remplissent un tableau de double avec les valeurs qui sont entrées sur une feuille excel
Je vais donc entrer mes données n'importe où sur la feuille excel (en ligne quand même^^), disons entre B1 et B4
et je décide de lancer ma routine sur la plage B1:B4
Je voudrais donc pouvoir
---cliquer sur un bouton
---entrer (B1:B4)
====>la routine se lance en traitant les données contenues dans B1:B4
Voilà, j'espère que c'est plus clair comme explication comme ça.
Encore merci pour ton aide,
ezor
Ce n'est pas exactement ça que je cherche, mais merci de ton aide.
Je cherche en réalité à pouvoir lancer ma routine quand je le souhaite, sur la plage de donnée (qui est l'argument que reçoit la routine) que je souhaite
Exemple :
Supposons que ma routine remplissent un tableau de double avec les valeurs qui sont entrées sur une feuille excel
Je vais donc entrer mes données n'importe où sur la feuille excel (en ligne quand même^^), disons entre B1 et B4
et je décide de lancer ma routine sur la plage B1:B4
Je voudrais donc pouvoir
---cliquer sur un bouton
---entrer (B1:B4)
====>la routine se lance en traitant les données contenues dans B1:B4
Voilà, j'espère que c'est plus clair comme explication comme ça.
Encore merci pour ton aide,
ezor
oui, c'est exactement ça! merci beaucoup
je vais essayer de regarder le code de près pour comprend comment ça marche.
Est-ce qu'il y a un moyen de rentrer la plage en la sélectionnant à la souris (un peu comme quand on utilise une fonction excel)? si non c'est pas grave, la boite de dialogue c'est déjà très bien
ezor
je vais essayer de regarder le code de près pour comprend comment ça marche.
Est-ce qu'il y a un moyen de rentrer la plage en la sélectionnant à la souris (un peu comme quand on utilise une fonction excel)? si non c'est pas grave, la boite de dialogue c'est déjà très bien
ezor