[Résolu] [Calc]Erreur sur écriture de formule

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 !

[Résolu] [Calc]Erreur sur écriture de formule

Messagepar CathyContact3 » 10 Nov 2019 01:53

Bonjour
Je veux écrire une formule dans une colonne de mon classeur en fonction du nombre de valeurs dans une autre colonne.
La formule est : =SI($Fx<>"";NB.SI(MESANN_PLAGE_REF;$Fx);"")
La formule fonctionne très bien en directe dans le classeur. Mais si je l'écris dans une macro alors le résultat est #nom?. J'ai essayé plusieurs façons d'écrire la formule avec et sans utiliser de plage de nom.
Pour que le résultat soit bon, il suffit de se placer dans la cellule ou la formule est écrite et de modifier le contenu (par exemple ajouter puis supprimer un espace à la fin) et le résultat s'affiche alors. Je ne comprends pas pourquoi
Je joins un classeur exemple.
Je remercie d'avance si quelqu'un peut m'aider.
Code : Tout sélectionner   AgrandirRéduire
public doc, classeur, feuille as object
sub service
   doc = thiscomponent
   classeur = doc.currentcontroller
   feuille = classeur.activesheet
end sub

sub ecrireformule
dim x as integer
   service
   ' formule = SI($Fx<>"";NB.SI(MESANN_PLAGE_REF;$Fx);"")

   for x = 5 to 15
   ' formule simple qui marche
      feuille.getcellrangebyname("A" & x).setformula("=$F" & x)
   ' formule avec plage de nom qui donne #nom?
      feuille.getcellrangebyname("B" & x).setformula("=SI($F" & x & "<>"""";NB.SI(MESANN_PLAGE_REF;$F" & x & ");"""")")
   ' formule sans plage de nom qui donne #nom?
      feuille.getcellrangebyname("C" & x).setformula("=SI($F" & x & "<>"""";NB.SI($F5:$F15;$F" & x & ");"""")")
   ' formule compliquée qui donne #nom?
      feuille.getcellrangebyname("D" & x).setformula(join(split("=SI($Fx<>"""";NB.SI(MESANN_PLAGE_REF;$Fx);"""")", "x"), x))
   next x
end sub
Pièces jointes
test_formule.ods
(15.42 Kio) Téléchargé 4 fois
Dernière édition par micmac le 10 Nov 2019 11:00, édité 1 fois.
Raison: Balisage dans le tiotre du premier message SVP
Libre Office 5.1.4.2
Windows 10
CathyContact3
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 26 Juil 2016 10:00

Re: [Calc]Erreur sur écriture de formule

Messagepar Noonours » 10 Nov 2019 02:49

Bonjour,

Une petite recherche sur ce forum donne une piste vers un suprême de code rédigé par Loopingss.
Il te faudra rédiger tes fonctions en anglais (pour la plupart) ou bien utiliser FormulaLocal, fortement déconseillé par bm92 (voir la discussion du lien ci-dessus).


Cordialement,
Noonours plantigrade râleur

Pour obtenir la réponse la plus précise possible, N’HÉSITEZ SURTOUT PAS À JOINDRE UN FICHIER

LibO 6.2.8.2 sous Windows 10
LibO 5.0.6.3 (obligation de version) sous Win 7
Avatar de l’utilisateur
Noonours
Membre cOOnverti
Membre cOOnverti
 
Message(s) : 319
Inscrit le : 11 Mai 2013 01:11
Localisation : Aix en Provence

Re: [Résolu][Calc]Erreur sur écriture de formule

Messagepar CathyContact3 » 10 Nov 2019 10:48

Excellent. En fait j'avais essayé formulalocal car j'ai fait des recherches sur le site et j'ai pris un exemple et cela n'a pas marché.
Certainement du aux parametrage de Calc au vu de l'explication de bm92.
Comme la formule se mettait a marcher juste en ajoutant un espace, je ne comprenais pas le problème.

En associant les bons paramètres ensemble ca fonctionne mieux !
sFormuleLocal = feuille.getcellrangebyname("I5").Formulalocal
sFormule = feuille.getcellrangebyname("I5").Formula

feuille.getcellrangebyname("A6").formulalocal = sFormuleLocal
feuille.getcellrangebyname("A5").formula = sFormule
feuille.getcellrangebyname("A5").setformula (sFormule)

Merci à Noonours pour cette réponse rapide et très claire
Libre Office 5.1.4.2
Windows 10
CathyContact3
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 19
Inscrit le : 26 Juil 2016 10:00


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Google [Bot], MSN [Bot] et 4 invité(s)