[Résolu] [Calc] Modifier le contenu d'une cellule

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
andréb
Fraîchement OOthentifié
Messages : 7
Inscription : 18 oct. 2008 06:16

[Résolu] [Calc] Modifier le contenu d'une cellule

Message par andréb »

Bonjour

J'ai un macro assez complexe, et tout marche parfaitement bien sauf une chose.
Je ne réussis pas à changer la valeur des cellules depuis le macro. Le macro est dans le tableur en question.
Dbg_Properties indique qu'une cellule (comme défini dans mon macro) a accès à .String et .Value, et Dbg_Methods indique qu'une cellule a accès à getString(), setString(), getValue() et setValue().
Je n'ai aucun problème lire la valeur des cellules auxquelles je tente écrire.
Un exemple de ce qui ne marche pas :

Code : Tout sélectionner

Function test(optional c0)
Dim oCel, oFeuille
Dim c1$, c2$
	oFeuille = thisComponent.currentController.ActiveSheet
	oCel = oFeuille.getCellByPosition(5,0)  'cellule F1
	c1$ = oCel.String
	oCel.String = "*"
	c2$ = oCel.String
	msgbox "ancienne valeur=" & c1$ & ", devrait être *, valeur actuelle=" & C2$
End Function ''test''
Si la valeur à F1 est "x", msgbox affiche
"ancienne valeur=x, devrait être *, valeur actuelle=x"
indiquant que la valeur ne change pas.
Aussi, F1 ne change pas.

J'ai essayé

Code : Tout sélectionner

setString(oCel) = "*"
avec le même résultat.

J'utilise OOo 3.0.1 (téléchargé depuis le site de OOo) sur Mandriva 2009.0.
(J'avais le même problème avec OOo 2.4 et 3.0 sur Mandriva 2008.1)

Je ne sais pas si je fais quelque sorte d'erreur ou il y a un problème de configuration ou autre problème avec OOo.

Est-ce que ça peut avoir qq chose à faire avec le réglage de sécurité des macros à niveau moyen ? (Confirmation en ouverture du tableur.) Si oui, comment régler ça ?

Si quelqu'un a une idée :?:
Merci d'avance :)
Dernière modification par Oukcha le 24 avr. 2009 13:59, modifié 2 fois.
Raison : Titre corrigé ; ancien titre"[calc + basic] Changer une cellule depuis le macro". Merci de consulter urgemment http://user.services.openoffice.org/fr/forum/viewtopic.php?p=1002#p1002 + balisage [Résolu]
Avatar de l’utilisateur
Maverick93
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 02 avr. 2009 08:36

Re: [Calc] Modifier le contenu d'une cellule

Message par Maverick93 »

Bonjour,

Je n'arrive pas à reproduire votre problème même avec une version OOO 2.4.1. Votre code fonctionne bien sur ma machine, même en formatant la cellule différemment.
Pourriez-vous joindre une copie de votre fichier posant problème ?
OpenOffice 3.2.1 - Windows XP Pro SP3
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Re: [Calc] Modifier le contenu d'une cellule

Message par Pierre-Yves Samyn »

Bonjour

Je suppose que tu tentes d'utiliser ta fonction dans le classeur...
Dans ce contexte une fonction ne peut modifier la valeur que de la cellule qui l'appelle.

En revanche, comme l'indique Maverick93 ce code serait fonctionnel s'il était appelé par une procédure...
andréb
Fraîchement OOthentifié
Messages : 7
Inscription : 18 oct. 2008 06:16

Re: [Calc] Modifier le contenu d'une cellule

Message par andréb »

Désolé, j'aurais dû joindre un fichier.
test.ods
(Juste assez pour démontrer le problème.)

Il ne suffit que modifier a2 pour déclencher la fonction.
(J'aimerais mieux un bouton pour déclencher la fonction.
C'est ma prochaine amélioration :) )

@Pierre-Yves
Oui, la fonction est dans le classeur.
Et je n'essaie pas modifier la cellule qui appèle la fonction.

Si ça marche pour vous autres, il doit être un problème avec mon installation de OOo.
(Probablement j'aurais dû désinstaller OOo avant faire des mises à jour.)
Merci :)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Avatar de l’utilisateur
Loopingss
InconditiOOnnel
InconditiOOnnel
Messages : 783
Inscription : 17 déc. 2008 01:50

Re: [Calc] Modifier le contenu d'une cellule

Message par Loopingss »

Bonsoir.
Je viens d'essayer votre code.
Il marche très bien, en ce sens qu'il fait ce qu'il est sensé faire lorsque lancé dans calc et non par une procédure. Il ne fait donc pas ce que vous vouliez faire. J'avais soulevé le même problème il y a un mois à un mois et demi.
La formule qui utilise test() est en A1, un résultat sera rendu en A1.
Pierre Yves Samyn avait parfaitement compris ce que vous aviez fait. Inutile de réinstaller OOo.
COOordialement.
andréb
Fraîchement OOthentifié
Messages : 7
Inscription : 18 oct. 2008 06:16

Re: [Calc] Modifier le contenu d'une cellule

Message par andréb »

Je ne suis pas certain que je comprends.
Est-ce que vous voulez dire que si on utilise une fonction, on ne peut pas changer des autres cellules ?
Car la seule raison utiliser une fonction est pour déclencher la routine, qui change plusieurs autres cellules en conséquence des valeurs de plusieurs cellules. On n'a pas besoin de retourner une valeur.
(Je ne sais pas encore comment créer un bouton pour déclencher une routine -- il semblait ne pas avoir un évènement lié à un bouton)
J'avais depuis longtemps des fonctions assez complexes qui retournent une seule valeur à la cellule de la formule. Je voulais faire plus avec moins de code.
Je vais essayer si ça marche si ma fonction appèle un sous-routine ordinaire.
Merci :)
andréb
Fraîchement OOthentifié
Messages : 7
Inscription : 18 oct. 2008 06:16

Re: [Calc] Modifier le contenu d'une cellule

Message par andréb »

Bien, ma routine marche parfaitement si je n'utilise pas de fonction. (Utilisant une sous-routine ordinaire.)
Mais pas si j'invoque la sous-routine à partir d'une fonction.
(Une drôle de restriction, à mon avis.)

Alors je dois trouver une façon invoquer la routine sans fonction ... avec un bouton :?:
andréb
Fraîchement OOthentifié
Messages : 7
Inscription : 18 oct. 2008 06:16

[Calc] Modifier le contenu d'une cellule

Message par andréb »

Enfin, j'ai trouvé la solution ...
il ne faut que suivre les instructions dans l'aide sous index::boutons::ajout pour ajouter un bouton.
- Sous évènements j'ai mis 'relâcher le bouton de souris' + 'relâcher la touche'
(Mieux relâcher, car si on change d'avis après pousser, on peut glisser à côté avant relâcher pour ne pas déclencher l'évènement.)
- Je n'ai rien fait pour formulaire
(C'est pas nécessaire utiliser une formulaire.)
- Ensuite, pour activer le bouton, il faut désactiver le mode conception en cliquant le bouton '(dés)activer la mode conception'
(Quand la conception est activée, on voit des petites boites vertes autour du bouton lorsque la souris survole le bouton, et le bouton ne marche pas.)

C'est tout!
Merci encore de votre aide :super: