Ajout : CountStyle a été refondu et est maintenant disponible sur le site des extensions de LibreOffice (voir aussi ici) |
Une demande récurrente sur le forum (et ailleurs) concerne la possibilité d’effectuer des calculs sur base du formatage des cellules. Plusieurs solutions existent sur le site, mais qui se heurtent à deux principales difficultés : l’actualisation en temps réel (contournée par l’association avec une fonction dite "volatile" comme ALEA()) et la non-adaptabilité de la plage de référence, passée comme chaîne de caractères.
Comme ce problème est un exercice idéal pour explorer et mettre en pratique les types avancés disponibles pour la création d’un addin, je vous propose ci-dessous un premier essai, qui prend la forme d’une d’extension ajoutant une nouvelle fonction nommée COUNTSTYLE().
Avertissement
Cette extension est encore en version bêta. Si vous l’utilisez avec des données sensibles, pensez à les sauvegarder !
Caractéristiques
L'extension est codée en python.
Comme tout "add-in", la fonction est disponible dans l'assistant de fonctions et la liste des arguments apparaît lors de la frappe dans la barre de formule.
Pour le reste, le moteur de formules de Calc gère les références comme pour une fonction native : la plage source est adaptée en fonction des déplacements, ajouts ou suppressions de cellules; les références entre feuilles différentes sont évidemment possibles.
Limitations
1. Par choix, cette fonction ne compte que les cellules du style fourni en paramètre et ne tient pas compte du formatage direct.
2. La fonction ne compte pas les styles appliqués par formatage conditionnel : ce serait d’abord un réel casse-tête à programmer, c’est ensuite peu utile puisqu’il suffit a priori de compter les cellules sur base du même critère que celui du formatage conditionnel.
Mode d’emploi
La fonction attend trois arguments, le troisième étant optionnel (voir l'image plus haut) :
- <plage> : les cellules de référence;
- <style> : le style à compter (sensible à la casse);
- <fonction> : un entier représentant le type d’opération à effectuer.
Si le troisième argument est omis ou égal à 0, COUNTSTYLE() compte simplement les cellules du style donné. Les autres fonctions sont :
1 : calcule la somme des cellules
2 : compte les cellules non vides
3 : calcule la moyenne
4 : renvoie la valeur maximale
5 : renvoie la valeur minimale
6 : compte les valeurs numériques
Installation
Télécharger le fichier joint, l'installer à partir du gestionnaire d'extensions (accessible depuis le menu Outils) et relancer OpenOffice/LibreOffice.
Un grand merci d’avance pour vos retours, en particulier sur toute éventuelle erreur d’affichage ou de comportement.
Et si vous avez une bonne idée pour franciser le nom, n’hésitez pas non plus...
Ajout : Problèmes connus Avec LibreOffice, l'assistant de fonction plante le programme dès qu'il est en mesure d'évaluer la formule COUNTSTYLE() (voir messages ci-dessous). En revanche pas de problème depuis l'interface normale. OpenOffice ne présente pas ce problème. [Problème résolu dans la version 2] Dans de rares cas, la formule peut ne pas être mise à jour automatiquement. Il faut alors forcer le recalcul avec la touche F9. La fonction ne marchera pas lorsqu'un style est appliqué avec la fonction STYLE(), ce qui équivaut à un formattage conditionnel (voir "Limitations" ci-dessus). |