Ecriture de formule par VBA

vgendron

XLDnaute Barbatruc
Bonjour le forum,

j'ai un souci de compréhension sur l'écriture d'une formule par VBA avec Formula / FormulaLocal
Je ne comprend pas pourquoi dans certains cas, la formule écrite par VBA est "instantanément" reconnue comme une formule alors que dans d'autres cas, il faut double cliquer dans la cellule pour qu'Excel voit la formule

en clair: dans mon fichier joint

les deux formules à écrire
=NB(E5:E12)
et
=NB.SI(F5:F12;,"Rejected")

1ere macro
Code:
Sub test()
MEASURED_VALUES_RANGES = "E5:E12"
REJECTED_MEASURES_RANGES = "F5:F12"

Cells(2, 5).Formula = "=NB(" & MEASURED_VALUES_RANGES & ")"
Cells(2, 6).Formula = "=NB.SI(" & REJECTED_MEASURES_RANGES & ",""Rejected"")"
End Sub
pour qu'excel daigne faire le calcul, il faut double cliquer dans les deux cellules

2eme macro (avec juste Formulalocal au lieu de Formula)
Code:
Sub test2()
MEASURED_VALUES_RANGES = "E5:E12"
REJECTED_MEASURES_RANGES = "F5:F12"

Cells(2, 5).FormulaLocal = "=NB(" & MEASURED_VALUES_RANGES & ")"
Cells(2, 6).Formula = "=NB.SI(" & REJECTED_MEASURES_RANGES & ",""Rejected"")"
End Sub
avec un formulalocal sur la première formule, plus besoin de double cliquer.. Excel a bien reconnu la formule

donc je me dis. chouette. avec un formulalocal, mon problème est réglé. je vais donc faire la meme chose pour la deuxième formule..

Code:
Sub test3()
MEASURED_VALUES_RANGES = "E5:E12"
REJECTED_MEASURES_RANGES = "F5:F12"

Cells(2, 5).FormulaLocal = "=NB(" & MEASURED_VALUES_RANGES & ")"
Cells(2, 6).Formulalocal = "=NB.SI(" & REJECTED_MEASURES_RANGES & ",""Rejected"")"
End Sub
et la.. bah. VBA n'aime pas et plante..

Des idées?
 

Pièces jointes

  • Vgendron Pb Formule.xlsm
    17 KB · Affichages: 28

Dranreb

XLDnaute Barbatruc
Re : Ecriture de formule par VBA

Bonjour.
En Formula ce sont les noms anglais des fonctions qu'il faut prendre.
En FormulaLocal le séparateur de paramètres est le ";"
Moi dans les macros je parle toujours en FormulaR1C1, et, souvent, j'utilise l'enregistreur de macro pour la récupérer, après mise au point manuelle.
 

laurent950

XLDnaute Barbatruc
Re : Ecriture de formule par VBA

Bonjour,

Suite à une petite correction cela fonctionne :

VB:
Sub test4()

' Mise en mémoire de la plage Variable Object de la classe Range
Dim MEASURED_VALUES_RANGES As Range
Set MEASURED_VALUES_RANGES = Range("E5:E12")

Dim REJECTED_MEASURES_RANGES As Range
Set REJECTED_MEASURES_RANGES = Range("F5:F12")

' Ici 
' MEASURED_VALUES_RANGES.Address  Soit la plage ("$E$5:$E$12") ' Référence Absolu 
' Les 0 apres .Address(0,0)  Enléve le referencement Absolu
' MEASURED_VALUES_RANGES.Address(0, 0) Soit la plage ("E5:E12") ' Référence Relatif

Cells(2, 5) = "=COUNT(" & MEASURED_VALUES_RANGES.Address(0, 0) & ")"
Cells(2, 6) = "=COUNTIF(" & REJECTED_MEASURES_RANGES.Address(0, 0) & ",""Rejected"")"

End Sub

Laurent
 

Pièces jointes

  • Vgendron Pb Formule camarche.xlsm
    23.2 KB · Affichages: 36

Discussions similaires

Réponses
9
Affichages
504

Statistiques des forums

Discussions
312 938
Messages
2 093 784
Membres
105 833
dernier inscrit
newfel123