Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres Ambiguïté entre NB.SI et EQUIV

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,
Je me suis lamentablement planté sur un post ( Lien ), et après moult recherches j'ai fini par circonscrire le souci.
Soit une liste d'heures, le but est de rechercher une heure dans cette liste.
( à noter que les heures de la liste ne sont pas toujours exactement celui qu'on attend, il peut y avoir de très légères différences de l'ordre de 1E-11 , mais cela est hors contexte )
Il est des cas où NB.SI(Plage, Valeur ) donne 1 soit valeur présente dans la liste, mais EQUIV(Valeur,Plage,0) donne #N/A, avec évidemment même plage et même valeur.
En d'autres termes il est des cas où NB.SI trouve la valeur présente alors que EQUIV donne la valeur absente.
Par ex dans la PJ, ligne 2 Heure=08:36:14.000 NB.Si donne 1 Equiv donne 2, ce qui est logique.
ligne 3 Heure=08:36:15.000 NB.Si donne 1 Equiv donne #N/A, ce qui est beaucoup moins logique.

Quelqu'un aurait il une explication ?
( peut être est ce dû à la version XL, je suis sous XL2007, et dans la PJ je trouve 65 incohérences )

NB: Dans le post donné, les différents contributeurs ont utilisés soit NB.SI soit PowerQuerry, et là tout marche.
 

Pièces jointes

  • NbSi et Equiv.xlsx
    27.3 KB · Affichages: 17
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir sylvanu,

Pour ne pas avoir de problème en comparant les heures il faut encadrer leur différence.

Pour EQUIV formule matricielle en E2 :
Code:
=EQUIV(VRAI;ABS(A$2:A$199-B2)<0,00000000001;0)
A+
 

Pièces jointes

  • NbSi et Equiv.xlsx
    28.6 KB · Affichages: 9

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Job,
J'ai trouvé une solution.
Mais mon problème est plus théorique.
Comment une fonction peut détecter une valeur dans une liste alors qu'une autre fonction ne la trouve pas.
Si les deux fonctions donnaient les memes résultats, même erronés dû aux arrondis je le comprendrais, mais ça me laisse perplexe.
 

dysorthographie

XLDnaute Accro
Bonjour,
Essaie d'utiliser la fonction `ARRONDI` pour ajuster les heures, comme `ARRONDI(Heure, 10^(-11))`, avant de faire les comparaisons avec `NB.SI` ou `EQUIV`. Cela pourrait résoudre les problèmes liés aux variations minimes.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
On a vu avec Cousinhub que PowerQuerry arrondissait automatiquement avec 10 chiffres après la virgule, c'est pour ça que ça marche.
Il semble aussi que NB.SI fait de même alors que Equiv ne le fait pas.
Ce qui est gênant est qu'on ne peut pas toujours se fier au fait que si l'un trouve l'autre trouvera forcément.
 

Cousinhub

XLDnaute Barbatruc
Inactif
Il est marrant de constater que c'est la fonction qui renvoie des résultats faux qui nous donne le résultat qu'on attend.
Bonjour,
Je pense que le sujet de la question ne correspond en rien à ta pseudo réponse...
Qui t'a parlé de "résultats faux"?
J'ai juste fait remarquer que lorsqu'on chargeait les données dans Power Query, icelles apparaissaient avec 9 décimales, je n'ai jamais osé certifier que les calculs se basaient sur cette "observation"
Bonne journée
 

dysorthographie

XLDnaute Accro
Il me semble que le problème n'est pas qu'il y ait une différence mais sans doute la difficulté de trouver l'information.

Je pourrais m'étonne de l'inverse selon le résultat escompté.

C'est commea différence entre cdbl et val!
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour à tous,

Sur le fichier du post #1 j'ai exécuté cette macro :
VB:
Sub Delta()
Dim i
[I:I].NumberFormat = "0.000E+00"
For i = 2 To 199
    Cells(i, 9) = Cells(i, 2) - Cells(i, 1)
Next
End Sub
Les différences entre les colonnes A et B se situent donc au niveau de la 17ème décimale.

NB.SI prend en compte 15 décimales seulement (comme l'affichage), EQUIV va plus loin.

A+
 

Pièces jointes

  • NbSi et Equiv.xlsm
    33.4 KB · Affichages: 4

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Quelqu'un aurait il une explication ?
je resterais juste à ce niveau et selon les recherches ( théorie)>
  • La raison probable est que la valeur “08:36:15.000” n’est pas exactement présente dans la plage. EQUIV recherche une correspondance exacte, tandis que NB.SI peut gérer des critères plus flexibles (comme les approximations ou les expressions).
  • Vérifiez si la valeur “08:36:15.000” est formatée différemment dans la plage (par exemple, avec des millisecondes) ou s’il y a des espaces invisibles.
En résumé, NB.SI est plus tolérant aux variations de format et peut donner des résultats même si la correspondance n’est pas exacte, tandis que EQUIV exige une correspondance précise. Assurez-vous que les valeurs sont formatées de manière identique pour obtenir des résultats cohérents entre ces deux fonctions.
Sinon sous 2010 > 70 erreurs Equiv
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…