Autres Transformation ESTNUM en 1 ou 0

ALS35

XLDnaute Impliqué
Bonjour à tous,

Pour transformer le résultat d'un test ESTNUM en 1 ou 0, j'utilise fréquemment les méthodes suivantes :
  • le double signe moins : --ESTNUM(A2)
  • la fonction N : N(ESTNUM(A2)
  • la multiplication par 1: ESTNUM(A2)*1
Quelqu'un saurait-il dire (et quantifier ?) quelle est la méthode la plus véloce ?
Merci d'avance
 

Pièces jointes

  • Estnum.xlsx
    14.9 KB · Affichages: 0

Dranreb

XLDnaute Barbatruc
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.
 
Dernière édition:

ALS35

XLDnaute Impliqué
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.
 

Dranreb

XLDnaute Barbatruc
À 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.
 

job75

XLDnaute Barbatruc
Bah exécutez 3 fois cette macro :
VB:
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
Chez moi -- est 5 fois plus rapide que N().
 

ALS35

XLDnaute Impliqué
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.
 

job75

XLDnaute Barbatruc
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
En ce qui concerne le nombre d'octets voyez ce fil de 2009 :
https://excel-downloads.com/threads/nombre-doctets-memoire-dune-expression.129833/#post-761014

et celui-ci de 2010 :
https://excel-downloads.com/threads...ule-calcule-par-macro-vba.148601/#post-887148
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 090
Messages
2 116 101
Membres
112 661
dernier inscrit
ceucri