Autres Transformation ESTNUM en 1 ou 0

  • Initiateur de la discussion Initiateur de la discussion ALS35
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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:
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.
 
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().
 
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
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
6
Affichages
534
Retour