Bonsoir,
On peut tenter de se passer de l'extension et des styles en utilisant la propriété CellBackColor d'une cellule. Il est possible d'embarquer dans le fichier (voir ci-joint) la fonction suivante :
Code : Tout sélectionner
Function CodeCouleur (Arg As String) As Long'donne le code couleur long de la cellule pointée
Dim monDocument As Object
Dim lesFeuilles As Object
Dim maFeuille As Object
Dim maCellule As Object
monDocument = ThisComponent
lesFeuilles = monDocument.Sheets
If monDocument.IsLoaded = true Then
maFeuille = monDocument.CurrentController.ActiveSheet
Else
Exit Function
End If
maCellule = maFeuille.getCellRangeByName(Arg)
CodeCouleur = maCellule.CellBackColor
End Function
Comme je ne suis pas expert en adressage de cellules dans les macros, celle-ci fonctionne en récupérant la référence d'une seule cellule sous forme textuelle. Le code couleur est le code long décimal. La mise en œuvre est la suivante (pour la cellule E8) :
Code : Tout sélectionner
=TEXTE(DECHEX(CODECOULEUR(CELLULE("adresse";E8))+ALEA()*0);"000000")
CELLULE retourne la référence d'E8 sous forme textuelle, CODECOULEUR() retourne le code long décimal, DECHEX() retourne l"équivalent hexadécimal du code long décimal.
+ALEA()*0 permet un recalcul forcé dès qu'on change de couleur d'arrière-plan de la cellule pointée. TEXTE() transforme le code hexa en chaîne textuelle.
DECHEX() n'est pas indispensable pour faire la comparaison, je l'ai ajouté, car sous LibreOffice, on connaît directement le code hexa avec la couleur d'arrière plan de la cellule (menu Format>Cellule>Arrière-plan, champ
Hexa). Sous OpenOffice, il suffit d'aller chercher le code par la formule ci-dessus (par exemple, en D1, la formule récupère le code hexa de la couleur d'arrière-plan de la cellule C1.
Il suffit donc de faire une plage-miroir de la plage dont certaines cellules sont colorées, en faisant un test dans chaque cellule (ici en E16) :
Code : Tout sélectionner
=TEXTE(DECHEX(CODECOULEUR(CELLULE("adresse";E8))+ALEA()*0);"000000")=$B$1
formule à propager sur la plage E16:T21 (de la même dimension que la plage E8:T13). Pour chaque cellule, on fait la comparaison avec le code voulu (stocké en B1). La somme de cette plage est faite en A9, le résultat est le même que celui donné en A8.
Le compte des cellules colorées d'une couleur donnée est donc effectué.
Je précise que je me suis inspiré de ce
fil pour éviter un dysfonctionnement de la fonction CODECOULEUR().
Tel quel, le fichier fonctionne aussi bien sous OpenOffice que sous LibreOffice.
À tester ci-joint.
Cordialement,
Jean-Louis
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibO 24.2.7.2 (x64 et Java 1.8.0_451) et AOO 4.1.15 (et Java x32 1.8.0_431), Windows 7 Édition Intégrale 64 SP1