Bonjour.
Alors là c'est vraiment nanoscopique comme différence !
À mon avis la multiplication par 1 est moins judicieuse par rapport aux deux autres que la multiplication, à l'occasion, par une autre expression booléenne simulant ainsi un ET considéré numérique.
Sinon ma préférée est la fonction N parce qu'elle est faite pour ça: renvoyer sous forme de nombre la valeur du nombre déjà existant en tant que représentation interne de la valeur non numérique du point de vue formel, ce qui est différent d'une conversion en nombre d'une donnée qui ne contient pas de nombre.
Bonjour,
Merci Dranreb, oui bien sûr c'est nanoscopique sur un exemple de quelques lignes, mais mon interrogation portait en fait sur un grand nombre de lignes.
J'ai également nettement tendance à préférer la fonction N que je trouve plus lisible, mais dans le doute je me pose la question.
À mon avis cette façon de compter des octets n'a pas à entrer en ligne de compte. On ne sait rien de la façon dont est stockée la formule en mémoire. La façon dont elle est affichée de façon très temporaire dans la barre de formule résulte probablement d'un traitement d'édition d'une représentation interne propice à la rapidité des calculs et à l'établissement des correspondances dans les deux sens avec les styles A1, R1C1, A1 Local et L1C1.
Sub Test()
Dim t, i, x
t = Timer
For i = 1 To 1000000
x = Evaluate("--TRUE") '7,7 secondes
'x = Evaluate("N(TRUE)") '37,8 secondes
'x = Evaluate("1*TRUE") '35,6 secondes
Next
MsgBox Timer - t
End Sub
Bonjour,
Merci job75, et comment on connaît le nombre d'octets en mémoire ?
Les temps de calcul que tu as mesurés, ne sont pas proportionnels aux nombres d'octets que tu indiques, alors ce dernier critère n'a peut-être pas trop d'influence.
En testant dans une cellule l'écart est nettement moins important :
VB:
Sub Test2()
Dim t, i
[A1] = "=--ISNUMBER(RAND())" '176 secondes
'[A1] = "=N(ISNUMBER(RAND()))" '180 secondes
'[A1] = "=1*ISNUMBER(RAND())" '181 secondes
t = Timer
For i = 1 To 1000000
Calculate 'car ALEA() rend les formules volatiles
Next
MsgBox Timer - t
End Sub