Bonjour @RodrigueM
Très intéressante question !
Les formules indiquées dans l’exemple numérique ne donnaient pas les mêmes résultats chez moi avec LO 6.4.6.2. Je trouvais respectivement 10, rien, 6 et 4 au lieu de 3, 7, 6 et 4. J’ai modifié les Outils
>Options
>LibreOffice Calc
>Calcul
en cochant Autoriser les expressions régulières dans les formules
pour Caractères génériques dans les formules
au lieu de Autoriser les caractères génériques dans les formules
et je retrouve vos résultats.
Les expressions régulières utilisées dans LO sont détaillées sur cette page de l’aide en ligne. Je n’y trouve pas mention de l’expression “caractère zéro”. Elles découlent de l’implémentation de ICU dans LO.
Avec la fonction NB.SI, le filtre peut ne pas comporter d’opérateur; alors l’opérateur est supposé être “=”.
La chaîne ".*"
recherche une chaîne comportant n’importe quel caractère avec le .
en n’importe quelle quantité avec le *
. Il peut y avoir 0 ou plus de n’importe quel caractère.
Le critère “<>.*” mélange l’opérateur <>
, différent de
et l’expression régulière .*
Dans le fichier content.xml où Calc mémorise les formules, les constantes et les valeurs calculées avant sauvegarde, les cellules vides de texte, de valeur ou de formule sont simplement “sautées”. Alors que les cellules qui contiennent, comme résultat, une chaîne vide, c’est-à-dire une chaîne de longueur nulle, autrement notée “”, sont mémorisées en tant que telles. Sur cette base, Calc fait très bien la différence entre une cellule vide et une cellule qui contient une chaîne de longueur nulle. (La même différence entre NULL et une chaîne de longueur nulle en base de données.)
Ensuite,il faut se reporter aux spécificités de chaque fonction, telle que présentées dans les différents guides et tutoriels…
Dans le cas présent, NB.SI(plage;"") ne fait pas la différence entre une cellule vide et une cellule contenant une cellule vide, puisque =NB.SI(A2:A11;"")
compte aussi bien les 3 cellules vides A5
, A6
et A10
que la cellule dont la formule a comme résultat momentané une chaîne vide : A7
.
Alors que NB.SI(plage;“expression régulière”) fait cette différence : la formule A qui est sensée trouver le même résultat que la formule D ne le fait pas : elle considère que A7
n’est pas une cellule vide et fournit seulement 3 comme résultat.
Chaque fois qu’une fonction implémentée existe, comme celle présentée par @Didier_Excel_LibO elle est préférable, pour le non-expert, à l’emploi des expressions régulières, auxquelles il ne fera appel qu’en dernier recours. A condition de bien maîtriser ces fonctions implémentées !
Pour montrer à la communauté que la question a trouvé sa réponse, cliquez sur ✓ à côté de la “bonne” réponse, et “votez” en cliquant sur la flèche ^ de toute réponse utile. Ce sont les mécanismes utilisés pour communiquer la qualité des questions et réponses sur ce site. Merci!
Pour tout complément d’information, utilisez les boutons situés en dessous de votre question et éditez
votre question ou simplement ajouter un commentaire
. SVP ! Ne répondez pas à votre propre question à moins d’y apporter une réelle réponse.
Cordialement, Michel