On résume :
La formule 'classique' pour ce calcul :
=SOMMEPROD(1/NB.SI(E3:E3902;E3:E3902))
donne 1920, elle est cadrée sur la plage, le résultat inclut 0 (qui est une valeur).
Ta formule rectifiée :
=SOMME(SI(E3:E5896<>0;1/NB.SI(E3:E5896;E3:E5896);0))
rectifiée pour éliminer la prise en compte de '0' (car NB.SI(......;0) renvoyait normalement 10 et donc ne l'éliminait pas ; le 0 à la fin est pour ordre car 0 ou "" c'est pareil pour SOMME)
mais laissée avec ta plage élargie par rapport à ta plage utilisée
résultat : 1919, elle élimine effectivement la valeur 0.
Ta formule non rectifiée :
=SOMME(SI(NB.SI(E3:E3902;E3:E3902)<>0;1/NB.SI(E3:E3902;E3:E3902);""))
mais ajustée à la plage de valeurs
elle donne 1920, le '0' n'est en effet pas éliminée.
Voyant ça, j'ai aussi essayé ta formule sur la plage 3903:5896 => résultat : 0
J'ai alors détruit cette portion de plage (et rétabli la formule à 5896, car la destruction l'avait ramenée automatiquement à 3902 (et alors elle donnait 1920). Après rétablissement, elle redonne 2119 !
Pourquoi elle calcule faux ainsi formulée ? Je n'en sais rien, mais elle n'en démort pas !