Re: [prog] Différence entre function et sub

2010-06-14 Par sujet xavier roguiez

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

2010-06-13 Par sujet Pascal Chantriaux

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

2010-06-12 Par sujet xavier roguiez

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

2010-06-12 Par sujet xavier roguiez

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

2010-06-12 Par sujet christianwtd

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

2010-06-12 Par sujet xavier roguiez

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

2010-06-12 Par sujet christianwtd

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

2010-06-12 Par sujet Sharpminded Gmail
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

2010-06-12 Par sujet xavier roguiez

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

2010-06-12 Par sujet christianwtd

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

2010-06-12 Par sujet Christophe Devalland
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

2010-06-12 Par sujet Delmas Jean-Marc
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

2010-06-11 Par sujet Laurent Godard

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

2010-06-11 Par sujet Pascal Chantriaux

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