Re: [prog] Différence entre function et sub
Le 13/06/2010 22:40, Pascal Chantriaux a écrit : Bonjour, 1) Dans le livre Programmation OpenOffice.org 3 de Marcelly/Godard page 465 il est expliqué qu'une fonction calc ne peu pas modifier la cellule en cours ou une autre cellule et que l'API ignore les actions que peut produire la fonction. Il s'agit donc bien d'une fonction au sens mathématique du terme, elle renvoie une valeur mais ne modifie pas l'environnement. Inutile donc de tenter de modifier une cellule en appelant une fonction depuis cette cellule ou une autre. Merci pour ces eclaircissements, vous n'auriez pas le titre de chapitre, j'ai la version 2 du livre ? Par ailleurs par quel moyen peut on transmettre des arguments à une procédure hormis la boite de dialogue ? Est ce possible ? C'est la raison pour laquelle j'avais fait une fonction Cordialement xavier - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Bonjour, 1) Dans le livre Programmation OpenOffice.org 3 de Marcelly/Godard page 465 il est expliqué qu'une fonction calc ne peu pas modifier la cellule en cours ou une autre cellule et que l'API ignore les actions que peut produire la fonction. Il s'agit donc bien d'une fonction au sens mathématique du terme, elle renvoie une valeur mais ne modifie pas l'environnement. Inutile donc de tenter de modifier une cellule en appelant une fonction depuis cette cellule ou une autre. 2) Par contre, je fais une petite remarque concernant les sub et les fonctions de OOoBasic dans le cadre d'une exécution ordinaire par macro. Là, il n'y pratiquement pas de différence entre sub et function. Par exemple si on code : sub test() as long print salut test = 5 end sub sub essai dim num as long num = test print num end sub l'exécution de essai affiche salut puis 5. Le sub test se comporte exactement comme une fonction. Inversement si on code : function truc() print Hello end function sub essai2 truc end sub l'exécution de essai2 affiche Hello. La fonction truc se comporte exactement comme une sub. En fait, OpenOffice ne semble avoir qu'une sorte de sous-programme, la différence de nom n'étant qu'une déclaration d'intention du contexte dans lequl on souhaite l'utiliser. Bien entendu, je ne recommande pas d'utiliser ce genre de codage et, personnellement, je fais bien attention à ne définir : - que des fonctions qui ne font que renvoyer une valeur et ne modifie pas l'environnement (cad qui n'agissent pas) - que des sub (actions) qui ne renvoient pas de valeur (sauf éventuellement un code d'erreur d'exécution par exemple, cela peut être pratique) mais il faut savoir que OOoBasic permet la confusion des 2 ce qui peut empêcher de détecter rapidement certaines erreur. Pascal - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Le 12/06/2010 00:19, Pascal Chantriaux a écrit : Bonjour, Avec votre code, j'ai testé ces deux cas : cas 1 : je définis Engins2 en tant que fonction comme vous l'avez fait puis je définis sub test dim e as variant e = Engins2 end sub et j'exécute test cas 2 : je définis Engins2 en tant que sub comme vous l'avez fait puis je définis sub test Engins2 end sub et j'exécute test Dans les deux cas il se passe exactement la même chose : la coloration en rouge sombre de la cellule B2. Où y a-t-il un problème ? Que voulez-vous dire par j'appelle cette fonction depuis une cellule ? J'appelle la fonction depuis une cellule du tableur : Si je suis dans A1, j'y écris, =Engins2(2) Je vais tester la remarque de laurent sur le retour de la fonction que j'avais zappé. xavier Pascal xavier roguiez a écrit : Bonjour Je dois passer à quelque chose d'évident, c'est pourquoi je viens chercher une explication rationnelle.. Je voulais naïvement créer une fonction qui en fonction d'un paramètre me change la couleur de la cellule (pour l'instant nombre de ne sert à rien, c'est pour illustrer l'ECM. function Engins2(nombre as integer) as variant Dim oDocument as object, oFeuilles as object Dim oFeuille as object, oCell as object, oZone as object oDocument = thisComponent oFeuilles = oDocument.Sheets oFeuille = oFeuilles.getByName(Feuille1) oCell=oFeuille.getCellByPosition(1,1) oCell.CellBackColor=RGB(150,0,0) end function Si j'appelle cette fonction depuis une cellule elle est sans effet, oCell contient bien les valeurs proprement dite, mais les affectations ne sont pas faites. sub Engins2() Dim oDocument as object, oFeuilles as object Dim oFeuille as object, oCell as object, oZone as object oDocument = thisComponent oFeuilles = oDocument.Sheets oFeuille = oFeuilles.getByName(Feuille1) oCell=oFeuille.getCellByPosition(1,1) oCell.CellBackColor=RGB(150,0,0) end sub Par contre, ce codage fonctionne, si j'affecte la macro à un bouton ou je la lance via le lanceur de macros... Quelle est l'explication de ce comportement ? On ne peut pas créer de fonction qui utilise l'API ? D'avance merci pour toute information xavier - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Bonjour Merci pour votre test, je confirme, de l'éditeur cela fonctionne. En revanche, le même appel de la fonction ne donne rien sur les cellules du tableur... Je pense que cela provient du contexte d'appel, mais mes infos s'arrêtent là, xavier - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Le 12/06/2010 11:01, xavier roguiez a écrit : Bonjour Merci pour votre test, je confirme, de l'éditeur cela fonctionne. En revanche, le même appel de la fonction ne donne rien sur les cellules du tableur... Je pense que cela provient du contexte d'appel, mais mes infos s'arrêtent là, xavier Bonjour Xavier, As-tu placé un Dim (en dehors des macros, début de feuille, par exemple) pour les variables qui circulent entre fonctions et Sub ? As-tu testé en mode pas à pas pour voir l'évolution des variables ? Peut-être que c'est par ici qu'il faut regarder. Bon surf, Christian -- Visitez http://christianwtd.free.fr/ pour débuter avec Calc, d'OpenOffice.org - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Le 12/06/2010 13:28, christianwtd a écrit : Le 12/06/2010 11:01, xavier roguiez a écrit : Bonjour Merci pour votre test, je confirme, de l'éditeur cela fonctionne. En revanche, le même appel de la fonction ne donne rien sur les cellules du tableur... Je pense que cela provient du contexte d'appel, mais mes infos s'arrêtent là, xavier Bonjour Xavier, As-tu placé un Dim (en dehors des macros, début de feuille, par exemple) pour les variables qui circulent entre fonctions et Sub ? En fait, j'ai juste besoin de créer une fonction qui est autonome. Elle est simplement appelée par la cellule C1 de la feuille Feuille1 depuis CALC. As-tu testé en mode pas à pas pour voir l'évolution des variables ? Oui, et en définition sub, les valeurs de champs de oCell sont modifiées, alors que en définition fonction, ces valeurs ont au départ les mêmes valeurs (je récupère donc bien le contenu de la cellule B1), en revanche les affectations sont sans effet. Suite à la remarque de Laurent, j'ai modifié la sortie et renvoyé un texte qui apparait effectivement dans la cellule appelante de calc. Mais pour le reste, la couleur est inchangée. Curieusement, la fonction Engins se lance à l'ouverture du document. J'ai modifié les couleurs et la modification se fait. Mais ensuite dans le document aucune modification. Je suis certain de faire une boulette à un endroit, mais je sèche pour l'instant... Un très grande majorité des exemples du livre de laurent et de bernard marcelly utilise des procédures (sub) et je n'ai pas vu de fonction Il y a certainement une raison, mais je ne la connais pas. xavier - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Le 12/06/2010 14:52, xavier roguiez a écrit : Le 12/06/2010 13:28, christianwtd a écrit : Le 12/06/2010 11:01, xavier roguiez a écrit : Bonjour Merci pour votre test, je confirme, de l'éditeur cela fonctionne. En revanche, le même appel de la fonction ne donne rien sur les cellules du tableur... Je pense que cela provient du contexte d'appel, mais mes infos s'arrêtent là, xavier Bonjour Xavier, As-tu placé un Dim (en dehors des macros, début de feuille, par exemple) pour les variables qui circulent entre fonctions et Sub ? En fait, j'ai juste besoin de créer une fonction qui est autonome. Elle est simplement appelée par la cellule C1 de la feuille Feuille1 depuis CALC. As-tu testé en mode pas à pas pour voir l'évolution des variables ? Oui, et en définition sub, les valeurs de champs de oCell sont modifiées, alors que en définition fonction, ces valeurs ont au départ les mêmes valeurs (je récupère donc bien le contenu de la cellule B1), en revanche les affectations sont sans effet. Suite à la remarque de Laurent, j'ai modifié la sortie et renvoyé un texte qui apparait effectivement dans la cellule appelante de calc. Mais pour le reste, la couleur est inchangée. Curieusement, la fonction Engins se lance à l'ouverture du document. J'ai modifié les couleurs et la modification se fait. Mais ensuite dans le document aucune modification. Je suis certain de faire une boulette à un endroit, mais je sèche pour l'instant... Un très grande majorité des exemples du livre de laurent et de bernard marcelly utilise des procédures (sub) et je n'ai pas vu de fonction Il y a certainement une raison, mais je ne la connais pas. xavier Effectivement, ça ne marche pas. Je ne sais pas, mais peut-être un piste sur le pourquoi du comment... une macro effectue une tâche, donne un résultat ou modifie quelque chose comme dans ton exemple ou tu changes la couleur de cellule. Une fonction (à mon avis), ne fait que donner un résultat de calculs plus ou moins complexes, mais ne modifie pas l'apparence d'une cellule, d'un texte. Je me trompe peut-être. L'avis de Laurent Godard ou Bernard Marcelly, sera utile. bon surf, Christian -- Visitez http://christianwtd.free.fr/ pour débuter avec Calc, d'OpenOffice.org - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Bonjour à tous, D'un point de vue général, une fonction retourne un résultat alors qu'une procédure fait quelque chose. C'est un comportement commun à beaucoup de langages de programmation (tous ?). Concernant ton cas de figure, je chercherais à déterminer le comportement que tu souhaite obtenir : Si tu veux obtenir quelque chose (un entier, une couleur...) alors l'utilisation d'une fonction est toute indiquée. Si tu veux faire quelque chose (un comportement, une modification...) alors l'utilisation d'une procédure convient d'avantage. À priori, je pense que tu cherches à faire quelque chose (modifier la couleur d'une cellule) donc que tu devrais utiliser une procédure. Maintenant, si la couleur doit être définie suivant des paramètres de valeurs inconnues lors du développement, tu peux toujours appeler une fonction retournant une couleur depuis la procédure principale. bon courage ! - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Le 12/06/2010 17:37, Sharpminded Gmail a écrit : Bonjour à tous, D'un point de vue général, une fonction retourne un résultat alors qu'une procédure fait quelque chose. C'est un comportement commun à beaucoup de langages de programmation (tous ?). Concernant ton cas de figure, je chercherais à déterminer le comportement que tu souhaite obtenir : Si tu veux obtenir quelque chose (un entier, une couleur...) alors l'utilisation d'une fonction est toute indiquée. Si tu veux faire quelque chose (un comportement, une modification...) alors l'utilisation d'une procédure convient d'avantage. À priori, je pense que tu cherches à faire quelque chose (modifier la couleur d'une cellule) donc que tu devrais utiliser une procédure. Maintenant, si la couleur doit être définie suivant des paramètres de valeurs inconnues lors du développement, tu peux toujours appeler une fonction retournant une couleur depuis la procédure principale. bon courage ! Bonjour Sans rentrer trop dans le détail technique de la fonction, je voulais : - a partir de la cellule d'appel de la fonction : =Engins(2) - récupérer le nombre 2 et - modifier la couleur de la cellule appelante et de celle du dessus. De manière à pouvoir utiliser la fonction a de nombreux endroits. Le problème de la procédure est que je sais l'affecter à un bouton, à une boite de dialogue, mais pas ce comportement ? Cordialement xavier - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Le 12/06/2010 18:01, xavier roguiez a écrit : Le 12/06/2010 17:37, Sharpminded Gmail a écrit : Bonjour à tous, bon courage ! Bonjour Sans rentrer trop dans le détail technique de la fonction, je voulais : - a partir de la cellule d'appel de la fonction : =Engins(2) - récupérer le nombre 2 et - modifier la couleur de la cellule appelante et de celle du dessus. De manière à pouvoir utiliser la fonction a de nombreux endroits. Le problème de la procédure est que je sais l'affecter à un bouton, à une boite de dialogue, mais pas ce comportement ? Cordialement xavier La fonction STYLE() ou tout simplement le formatage conditionnel ne suffisent pas ? Bon surf, Christian -- Visitez http://christianwtd.free.fr/ pour débuter avec Calc, d'OpenOffice.org - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Le 12 juin 2010 11:01, xavier roguiez x...@geo.hmg.inpg.fr a écrit : Bonjour En revanche, le même appel de la fonction ne donne rien sur les cellules du tableur... Je pense que cela provient du contexte d'appel, mais mes infos s'arrêtent là, effectivement, cela ne fonctionne pas lors d'un appel de type fonction. J'ai essayé oCell.String=xxx et cela ne marche pas non plus. C'est comme si la feuille de calcul était en lecture seule. A mon avis cela ressemble à un bug, il faudrait ouvrir une issue : http://qa.openoffice.org/issue_handling/project_issues.html (je n'ai rien trouvé de tel en cherchant parmi les bugs existants). Tu peux aussi essayer de poser la question sur le forum http://www.oooforum.org/forum/viewforum.phtml?f=9sid=fcfa293c294831e396d672af279315de(très actif) A+ -- Christophe Devalland
Re: [prog] Différence entre function et sub
Il me semble qu'il faut satisfaire à plusieurs condition pour qu'une fonction soit calculée : - D'abord vérifier que les options de recalcul de calc ne soient pas positionnées à à la demande (par défaut ce n'est pas le cas) - Faire en sorte que le résultat de la fonction dépende de la valeur écrite dans une cellule (où le paramètre 2 pourrait être saisi) - Autre condition, que la fonction soir dans la bibliothèque Standard du document Enfin il peut être utile d'utiliser la fonction F9 pour forcer le recalcul des feuilles Pouvez-vous tester toutes ces conditions Jean-Marc Le samedi 12 Juin 2010 23:06, christophe.devall...@ac-rouen.fr a écrit : Le 12 juin 2010 11:01, xavier roguiez x...@geo.hmg.inpg.fr a écrit : Bonjour En revanche, le même appel de la fonction ne donne rien sur les cellules du tableur... Je pense que cela provient du contexte d'appel, mais mes infos s'arrêtent là, effectivement, cela ne fonctionne pas lors d'un appel de type fonction. J'ai essayé oCell.String=xxx et cela ne marche pas non plus. C'est comme si la feuille de calcul était en lecture seule. A mon avis cela ressemble à un bug, il faudrait ouvrir une issue : http://qa.openoffice.org/issue_handling/project_issues.html (je n'ai rien trouvé de tel en cherchant parmi les bugs existants). Tu peux aussi essayer de poser la question sur le forum http://www.oooforum.org/forum/viewforum.phtml?f=9sid=fcfa293c294831e396d672af279315de(très actif) A+ - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Bonjour xavier function Engins2(nombre as integer) as variant Dim oDocument as object, oFeuilles as object Dim oFeuille as object, oCell as object, oZone as object oDocument = thisComponent oFeuilles = oDocument.Sheets oFeuille = oFeuilles.getByName(Feuille1) oCell=oFeuille.getCellByPosition(1,1) oCell.CellBackColor=RGB(150,0,0) end function ne te manque t i l pas un retour de valeur de ta fonction juste avant end function genre Engins2= sinon, je ne vois pas comme ca à brule pourpoing bonne journee Laurent - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org
Re: [prog] Différence entre function et sub
Bonjour, Avec votre code, j'ai testé ces deux cas : cas 1 : je définis Engins2 en tant que fonction comme vous l'avez fait puis je définis sub test dim e as variant e = Engins2 end sub et j'exécute test cas 2 : je définis Engins2 en tant que sub comme vous l'avez fait puis je définis sub test Engins2 end sub et j'exécute test Dans les deux cas il se passe exactement la même chose : la coloration en rouge sombre de la cellule B2. Où y a-t-il un problème ? Que voulez-vous dire par j'appelle cette fonction depuis une cellule ? Pascal xavier roguiez a écrit : Bonjour Je dois passer à quelque chose d'évident, c'est pourquoi je viens chercher une explication rationnelle.. Je voulais naïvement créer une fonction qui en fonction d'un paramètre me change la couleur de la cellule (pour l'instant nombre de ne sert à rien, c'est pour illustrer l'ECM. function Engins2(nombre as integer) as variant Dim oDocument as object, oFeuilles as object Dim oFeuille as object, oCell as object, oZone as object oDocument = thisComponent oFeuilles = oDocument.Sheets oFeuille = oFeuilles.getByName(Feuille1) oCell=oFeuille.getCellByPosition(1,1) oCell.CellBackColor=RGB(150,0,0) end function Si j'appelle cette fonction depuis une cellule elle est sans effet, oCell contient bien les valeurs proprement dite, mais les affectations ne sont pas faites. sub Engins2() Dim oDocument as object, oFeuilles as object Dim oFeuille as object, oCell as object, oZone as object oDocument = thisComponent oFeuilles = oDocument.Sheets oFeuille = oFeuilles.getByName(Feuille1) oCell=oFeuille.getCellByPosition(1,1) oCell.CellBackColor=RGB(150,0,0) end sub Par contre, ce codage fonctionne, si j'affecte la macro à un bouton ou je la lance via le lanceur de macros... Quelle est l'explication de ce comportement ? On ne peut pas créer de fonction qui utilise l'API ? D'avance merci pour toute information xavier - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org - To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org For additional commands, e-mail: prog-h...@fr.openoffice.org