Nous sommes le Ven 18 Juil, 2025 16:38
Supprimer les cookies

Page 1 sur 21, 2 Suivantrecherche une fonction couleur sur OOo

Sur le logiciel libre en général ou un logiciel libre en particulier

Ven 13 Mai, 2005 09:33

Bonjour,
:shock: Je cherche à calculer dans une cellule le nombre de cellules dont l'arrière-plan est de couleur "Bleu" (ou "rouge clair", "magenta 4" etc) dans une colonne (ou une feuille)
Quelqu'un a-t-il une solution ?
Merci :P
dantou

Messages : 9

Ven 13 Mai, 2005 13:29

Salut,
Je pense pas que la fonction existe telle qu'elle dans OOo. Il faudrait passer par une macro.
Je pense à une macro qui vérifie la couleur des cellules dans une plage donnée. C'est une opération qui peut être plus ou moins longue suivant la taille de la plage de cellules.
Tu en as beaucoup des cellules ?

stan
R.Stan

Messages : 68
Géo : 42

Ven 13 Mai, 2005 14:11

:? Resalut. Merci pour ta réponse.
J'ai approx 75 cellules par colonne pour 100 colonnes.
Le pbe, c'est la macro, car la dernière macro que j'ai faite, c'était en 1985 !
Depuis, le langage a changé, et je n'ai jamais eu l'occasion de m'y remettre.
Je vais chercher un peu.
dantou

Messages : 9

Ven 13 Mai, 2005 19:52

Voici ce à quoi je pensais :

Code: Tout sélectionner
sub test
dim CellColor
' les différents codes couleur
'sans=-1
'blanc=166777215
'rouge clair =16711680
'bleu=128
'Magenta4=10053324
NbColor=0
MaCouleur=10053324 'Magenta4
for j=0 to 100 'colonnes
For i=0 to 100 'lignes
CellColor=ThisComponent.CurrentController.ActiveSheet.getCellByPosition(j,i).CellBackColor
if CellColor=MaCouleur then
NbColor=NbColor+1
end if

next i
next j

MsgBox NbColor
end sub


Mais comme je le craignait, c'est assez lent.
Je vais essayer de trouver autre chose.

stan
R.Stan

Messages : 68
Géo : 42

Mar 17 Mai, 2005 08:58

Merci beaucoup pour cette macro. C'est vraiment sympa
Je vais l'essayer et te tiens au courant
Dan
dantou

Messages : 9

Mer 18 Mai, 2005 08:16

Code: Tout sélectionner
sub testCoul
dim CellColor as long
oCell=ThisComponent.CurrentController.ActiveSheet
' les différents codes couleur
'sans=-1
'blanc=166777215
'rouge clair =16711680
'bleu=128
'Magenta4=10053324
NbColor=0
MaCouleur=10053324 'Magenta4
   for j=0 to 100 'colonnes
      For i=0 to 100 'lignes
      CellColor=oCell.getCellByPosition(j, i).CellBackColor
      if CellColor=MaCouleur then NbColor=NbColor+1
      next i
   next j

MsgBox NbColor
end sub


En changeant 2 ou 3 bricoles, je gagne environ 40% de temps.
J'ai pas réussis à faire mieux.

J'ai essayé d'adapter le "for each" de vba, mais il n'y a pas d'équivalents pour OOo. Il y a bien une fonction qui place toutes les valeurs d'une plage de cellules dans un tableau, mais ça ne marche que pour les valeurs.

stan
R.Stan

Messages : 68
Géo : 42

Mer 18 Mai, 2005 08:49

Salut.
Merci bcp à Stan
Ca fonctionne bien.
Mais, si ce n'est pas trop, comment inscrire le résultat en bas de chaque colonne (en 101 p.e.) ?
Sinon, encore merci.
Dan
dantou

Messages : 9

Mer 18 Mai, 2005 09:22

Code: Tout sélectionner
sub testCoul
dim CellColor as long
oCell=ThisComponent.CurrentController.ActiveSheet
'les différents codes couleur
'sans=-1
'blanc=166777215
'rouge clair =16711680
'bleu=128
'Magenta4=10053324
NbColor=0
NumCase=101' numéro de ligne où mettre le résultat
MaCouleur=10053324 'Magenta4

   for j=0 to 100 'colonnes
         For i=0 to 100 'lignes
         CellColor=oCell.getCellByPosition(j, i).CellBackColor
         if CellColor=MaCouleur then NbColor=NbColor+1
         next i
      oCell.getCellByPosition(j,NumCase).value=NbColor
      NbColor=0
   next j

end sub
R.Stan

Messages : 68
Géo : 42

Jeu 19 Mai, 2005 09:20

:D :D :D Bonjour et grand merci à Stan. Ca marche.
Je l'ai même améliorée un peu pour pouvoir choisir mes couleurs.
En résumé, la macro permet de trouver le nombre de cellules d'une couleur de fond déterminée, colonne / colonne, ou avec un certain pas, et d'inscrire le résultat dans une cellule de la colonne.
REM ***** BASIC *****
REM ***** Macro de Stan pour la couleur *******
sub testCoul
dim CellColor as long
oCell=ThisComponent.CurrentController.ActiveSheet
'les différents codes couleur
'sans=-1
'blanc=166777215
'rouge clair =16711680
'bleu=128
'Magenta4=10053324
NbColor=0
for NumCase=77 to 87 ' numéro de lignes où mettre le résultat -1
MaCouleur=oCell.getCellByPosition(1,NumCase).CellBackColor '(1, NumCase sont les coordonnées de la couleur de référence
for j=3 to 155 step 2 'colonnes -1 et pas de 2 colonnes en 2 colonnes
For i=0 to 75 'lignes à caluler
CellColor=oCell.getCellByPosition(j, i).CellBackColor
if CellColor=MaCouleur then NbColor=NbColor+1
next i
oCell.getCellByPosition(j,NumCase).value=NbColor
NbColor=0
next j
next NumCase

end sub

En outre, la fonction "Style()" permet d'obtenir une couleur de fond, selon la valeur de celle-ci. =...+STYLE(SI(ACTUELLE()>3;"Rouge";"Vert")) applique le style "Rouge" si la valeur est supérieure à 3 ou "Vert" pour les autres cas.

En combinant les 2, il est donc possible de gérer des cellules par leur couleur.
Dantou
dantou

Messages : 9

Jeu 19 Mai, 2005 10:41

Content de t'avoir aidé. :wink:

Tu peux aussi modifier le format des cellules avec le formatage conditionnel (Format => formatage conditionnel...). C'est peut-etre plus intéressant si une grande plage de cellules a le même format.

En combinant les 2, il est donc possible de gérer des cellules par leur couleur.


:shock: Si je comprend bien, tu obtiens des cellules colorisées d'après les valeurs de celles-ci, puis tu comptes combien tu as de cases de couleurs...
Ce serait pas plus simple de compter les cellules qui contiennent les valeurs que tu recherches ?

stan
R.Stan

Messages : 68
Géo : 42

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit