[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 !
CathyContact3
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 26 juil. 2016 09:00

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

Message par CathyContact3 »

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

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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par micmac le 10 nov. 2019 10:00, modifié 1 fois.
Raison : Balisage dans le tiotre du premier message SVP
Libre Office 7.0.4.2 (X64)
Windows 10.0.19041
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 501
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: [Calc]Erreur sur écriture de formule

Message par Noonours »

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 procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
CathyContact3
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 26 juil. 2016 09:00

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

Message par CathyContact3 »

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 7.0.4.2 (X64)
Windows 10.0.19041