Appeler routine/fonction depuis le tableur
Résolu/Fermé
ezor
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
-
Modifié par ezor le 18/08/2014 à 11:23
ezor Messages postés 176 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - 20 août 2014 à 09:51
ezor Messages postés 176 Date d'inscription dimanche 1 mars 2009 Statut Membre Dernière intervention 27 octobre 2016 - 20 août 2014 à 09:51
A voir également:
- Appeler routine/fonction depuis le tableur
- Fonction si et - Guide
- Appeler en privé - Guide
- Tableur gratuit - Télécharger - Tableur
- Formule tableur somme - Guide
- Tableur open office - Télécharger - Suite bureautique
10 réponses
commentcamarcheeay
Messages postés
666
Date d'inscription
mercredi 24 février 2010
Statut
Membre
Dernière intervention
30 mars 2020
86
18 août 2014 à 10:40
18 août 2014 à 10:40
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.
ezor
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
Modifié par ezor le 18/08/2014 à 11:02
Modifié par ezor le 18/08/2014 à 11:02
'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
commentcamarcheeay
Messages postés
666
Date d'inscription
mercredi 24 février 2010
Statut
Membre
Dernière intervention
30 mars 2020
86
18 août 2014 à 11:17
18 août 2014 à 11:17
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.
ezor
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
18 août 2014 à 11:41
18 août 2014 à 11:41
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
commentcamarcheeay
Messages postés
666
Date d'inscription
mercredi 24 février 2010
Statut
Membre
Dernière intervention
30 mars 2020
86
18 août 2014 à 11:58
18 août 2014 à 11:58
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(...)
ezor
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
Modifié par ezor le 18/08/2014 à 13:55
Modifié par ezor le 18/08/2014 à 13:55
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
commentcamarcheeay
Messages postés
666
Date d'inscription
mercredi 24 février 2010
Statut
Membre
Dernière intervention
30 mars 2020
86
18 août 2014 à 15:17
18 août 2014 à 15:17
Le lien cijoint permet d'attacher des fichiers.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ccm81
Messages postés
10853
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 avril 2024
2 404
18 août 2014 à 14:08
18 août 2014 à 14:08
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
ezor
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
Modifié par ezor le 19/08/2014 à 13:19
Modifié par ezor le 19/08/2014 à 13:19
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
ccm81
Messages postés
10853
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 avril 2024
2 404
19 août 2014 à 13:41
19 août 2014 à 13:41
Quelque chose comme ça? Feuille 2
https://www.cjoint.com/?3HtnPlbeeUo
Cdlmnt
https://www.cjoint.com/?3HtnPlbeeUo
Cdlmnt
ezor
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
Modifié par ezor le 19/08/2014 à 15:29
Modifié par ezor le 19/08/2014 à 15:29
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
ccm81
Messages postés
10853
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
24 avril 2024
2 404
Modifié par ccm81 le 19/08/2014 à 17:27
Modifié par ccm81 le 19/08/2014 à 17:27
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)
c'est ce que je t'ai proposé en feuille 1
Tu sélectionnes ta plage puis Ctrl+r pour lancer la macro sur la plage sélectionnée et tu n'as plus besoin de bouton!
c'est ce que je t'ai proposé en feuille 1
Tu sélectionnes ta plage puis Ctrl+r pour lancer la macro sur la plage sélectionnée et tu n'as plus besoin de bouton!
ezor
Messages postés
176
Date d'inscription
dimanche 1 mars 2009
Statut
Membre
Dernière intervention
27 octobre 2016
11
20 août 2014 à 09:51
20 août 2014 à 09:51
ah d'accord, j'avais pas compris l'idée de la feuille 1. Du coup, problème résolu. encore merci.