Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Compter les couleurs de cellules

paseg

XLDnaute Nouveau
Bonsoir,
Je souhaiterais répertorier et comptabiliser des couleurs de cellules dans une plage donnée.
J'ai joint un fichier en pièce jointe (j'utilise une fonction, crée par quelqu'un d'autre, j'espère d'ailleurs en avoir le droit...) mais ce fichier est trop lourd car la fonction semble opérationnelle en permanence : elle recalcule sans cesse les données et ralentit énormément mon PC. J'effectue des calculs sur les plages A11:R600 mais j'ai réduit ici ce fichier

Donc, dans ma plage B11:B18 par exemple, j'ai 1 cellule bleue, 2 vertes, 1 jaune, 3 transparentes et 1 grise.
La procédure utilisée m'affiche ces résultats dans les cellules B1 à B5.
Pourrais-je optimiser cette procédure ? Par exemple la lancer avec un "bouton" puis la figer.
Ou une autre solution.
Merci d'avance si vous vous penchez sur ce petit problème.
Paseg
 

Pièces jointes

  • Compte couleurs.zip
    34.9 KB · Affichages: 108
  • Compte couleurs.zip
    34.9 KB · Affichages: 113
  • Compte couleurs.zip
    34.9 KB · Affichages: 111
Dernière édition:

jeanpierre

Nous a quitté
Repose en paix
Re : Compter les couleurs de cellules

Bonsoir paseg,

Comprends pas ta question.

Ce n'est pas une procédure que l'on lance...

Pas une procédure évenementielle qui réagit à tout changement...

C'est une fonction que l'on appele comme une fonction native d'Excel par ="le nom de la fonction"...

Vois pas le problème de ralentissement.

Mais, bon, je crois n'avoir rien compris.

Si tu pouvais expliciter un peu ....

Bonne soirée en attendant.

Jean-Pierre
 

paseg

XLDnaute Nouveau
Re : Compter les couleurs de cellules

Hum,
Je vais tenter de faire mieux.
Je me suis donc servi d'un fichier crée par une personne. Dans ce fichier il y avait donc une fonction (dans le module 1 de VB). Je n'ai pas trop cherché à comprendre et je l'ai utilisé. J'ai juste apporté quelques modifications.
Seulement, quand je colle une plage de données conséquente (de A11 à R600), le PC ralentit...
En effet, je laisse ce fichier ouvert et remplace les données (de A11 à R600) par d'autres, je copie les résultats obtenus (les pourcentages de A6 à R8) sur une autre feuille. J'effectue également d'autres calculs sur d'autres fichiers excel.
Et bien tout devient long, même les déplacements dans un fichier excel. Dès que je ferme ce fichier "compte couleurs", tout redevient "normal", comme si cette fonction calculait et recalculait, mobilisant les ressources du PC.
Alors, soit je change de méthode (je ne sais plus quel terme employer), soit je sais comment lancer et stopper cette fonction.
Je ne suis pas sur d'avoir été plus clair.
J'espère
Cordialement
Paseg
 

jeanpierre

Nous a quitté
Repose en paix
Re : Compter les couleurs de cellules

Re,

Sans voir et pouvoir analyser le fichier en question, il me semble très difficile de pouvoir répondre mieux.

Néanmoins, un collage A11-R600 peut demander un peu de temps pour peu que la machine ait d'autres faiblesses aussi.
 

paseg

XLDnaute Nouveau
Re : Compter les couleurs de cellules

Bonsoir,
Je tente à nouveau.
J'ai donc ajouté des plages. Si je ne l'ai pas fait avant, c'est que je pensais que le fichier aurait été trop lourd.
J'ai un P IV 2.8 et je ne pense pas qu'il rame. Quand ce fichier est ouvert, tous les fichiers excel peinent lorsque je lance une macro. C'est le seul fichier qui me pose ce problème.
Chez moi, les déplacements dans cette zone A11:R600 sont longs. Pas chez toi jeanpierre ?
Cordialement
Paseg
 

Pièces jointes

  • Compte couleurs.zip
    36.6 KB · Affichages: 75
  • Compte couleurs.zip
    36.6 KB · Affichages: 72
  • Compte couleurs.zip
    36.6 KB · Affichages: 76

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Compter les couleurs de cellules

Bonsoir paseg, JeanPierre, le forum

je viens de sélectionner toutes les cellules A10:R594 et ensuite les "repeindre"
La procédure a compté les couleurs en moins d'une seconde et pourtantmon processeur ne tourne qu'à 1.8Ghz.


Ton problème est le suivant: à chaque déplacement sur la feuille, la macro recalcule.................et si tu as la bougeotte sur ta feuille, pas étonnant que tu croies que ta Ram elle rame

J'ai transformé et mis le (re)calcul sur un bouton

à+
 

Pièces jointes

  • 111.zip
    38.9 KB · Affichages: 87
  • 111.zip
    38.9 KB · Affichages: 83
  • 111.zip
    38.9 KB · Affichages: 83

paseg

XLDnaute Nouveau
Re : Compter les couleurs de cellules

Merci phlaurent55
Mais ça ne change rien à mon problème...
Les calculs sont très rapides chez moi aussi mais dès que j'ouvre un autre fichier excel tout est ralentit dans ce nouveau fichier.
Je dois fermer "compte couleurs" pour que tout redevienne normal.
N'y aurait-il pas une procédure, fonction...
Merci d'avance
Paseg
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Compter les couleurs de cellules

Re, paseg
Les calculs sont très rapides chez moi aussi mais dès que j'ouvre un autre fichier excel tout est ralentit dans ce nouveau fichier.
Je dois fermer "compte couleurs" pour que tout redevienne normal.
...

Si tu as également dans d'autres fichiers des procédures "ralentisseuses" telles que celles de ce fichier alors ne t'étonne pas

Saurais-tu manger de la farine et siffler la Marseillaise en même temps
 

Fo_rum

XLDnaute Accro
Re : Compter les couleurs de cellules

Salut,

un essai sans fonction.
 

Pièces jointes

  • CompteCouleurs.zip
    14.7 KB · Affichages: 141
  • CompteCouleurs.zip
    14.7 KB · Affichages: 134
  • CompteCouleurs.zip
    14.7 KB · Affichages: 136

paseg

XLDnaute Nouveau
Re : Compter les couleurs de cellules

Merci Fo rum
A première vue c'est exactement ça.
Le ralentissement était bien du à cette fonction qui devait tourner en tâche de fond. je ne sais pas pourquoi d'ailleurs.
J'aurai été bien incapable d'écrire cette fonction.
Encore merci
A bientôt
Paseg
 

job75

XLDnaute Barbatruc
Re : Compter les couleurs de cellules

Bonjour paseg, le fil,

Le ralentissement était bien du à cette fonction qui devait tourner en tâche de fond. je ne sais pas pourquoi d'ailleurs.

Les cellules contenant la fonction sont systématiquement recalculées car la fonction est rendue volatile par l'instruction Application.Volatile.

Note : pour voir s'il y a recalcul d'une feuille, mettre la macro suivante dans le code de la feuille :

Code:
Private Sub Worksheet_Calculate()
MsgBox "Recalcul"
End Sub

EDITION : supprimer donc Application.Volatile, et pour que les cellules contenant la fonction soient recalculées, modifier la macro SelectionChange :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[COLOR="Red"]Range("A11:R11").Value = Range("A11:R11").Value[/COLOR]
End Sub

A+
 
Dernière édition:

PMG

XLDnaute Junior
Bonjour Fo_rum, le fil,

Pourriez vous m'aider sur un problème de macro de couleurs svp?

J'essaye de mettre en forme le code du fichier du poste #9, mais mes compétence en vba sont (encore) trop limité.

J’aimerai calculer la somme des casses de couleurs en ligne et non en colonne, je ne veux pas de fonction mais bien une macro. Je ne dois pas être bien loin mais je cale!

Merci bcp par avance...
 

Pièces jointes

  • Addition en ligne des couleurs 01.xlsm
    19.7 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour PMG, le forum,
Votre fichier en retour avec la macro du bouton :
VB:
Sub CompteCouleur()
Dim ncol%, total%(), i&, j%, coul
With [B3:I12] 'à adapter
    ncol = .Columns.Count
    ReDim total(1 To .Rows.Count, 1 To 1)
    For i = 1 To .Rows.Count
        For j = 1 To ncol
            coul = .Cells(i, j).Interior.ColorIndex
            total(i, 1) = total(i, 1) + (coul <> xlNone) * (coul <> 2) 'ni incolore ni blanc
    Next j, i
    .Columns(ncol + 2) = total 'restitution
End With
End Sub
A quoi doivent servir les couleurs en B15:B25 ?

Bonne journée.
 

Pièces jointes

  • Addition en ligne des couleurs 01.xlsm
    19.7 KB · Affichages: 4

PMG

XLDnaute Junior
Bonjour Job75, le fil,

Merci bcp pour votre macro, effectivement je n'aurai pas trouvé, j'étais assez loin de la solution!
Je ne savais pas comment redéfinir les variables du tableau!

#Votre question:
Les cellules de couleurs servent à comparer des tâches sur des plannings.

#Mes questions:
1) Si j'ai plusieurs tableaux (fichier joint), j'ai doubler votre code sachant que les résultats de mon deuxième tableau ne sont pas au même endroit. Pourriez vous me dire si cela est correct?

2) Autre problématique, mais cette fois il faut compter la somme de toutes les couleurs présente dans le tableau individuellement. Je ne comprends pas comment intégrer une plage de recherche avec des plusieurs codes de couleurs. Je précise que les tableaux seront bcp plus grands mais pas le code couleur.


Je suis régulièrement le forum, merci infiniment pour votre aide et partage de connaissances, un vrai bonheur!
Bonne journée!
 

Pièces jointes

  • Copie de Addition en ligne des couleurs 02.xlsm
    21.9 KB · Affichages: 2

job75

XLDnaute Barbatruc
Pour la question (1) ce que vous avez fait est tout à fait correct, vous avez bien compris.

Seulement pour éviter de répéter le code on peut faire une boucle (n) sur les "Areas" :
VB:
Sub CompteCouleur()
Dim n As Byte, ncol%, total%(), i&, j%, coul
With [B4:I13,O4:V13] 'plages disjointes, à adapter
    For n = 1 To .Areas.Count
        With .Areas(n)
            ncol = .Columns.Count
            ReDim total(1 To .Rows.Count, 1 To 1)
            For i = 1 To .Rows.Count
                For j = 1 To ncol
                    coul = .Cells(i, j).Interior.ColorIndex
                    total(i, 1) = total(i, 1) + (coul <> xlNone) * (coul <> 2) 'ni incolore ni blanc
            Next j, i
            .Columns(ncol + IIf(n = 1, 2, -9)) = total 'restitution
        End With
    Next n
End With
End Sub
Pour la question (2) voici un code qui va bien :
VB:
Sub CompteCouleur_individuel()
Dim resu(), cel As Range, i As Variant
With [C7:C27] 'tableau des résultats, à adapter
    ReDim resu(1 To .Rows.Count, 1 To 1)
    For Each cel In [B4:I13] 'tableau à étudier
        i = Application.Match(cel.Interior.ColorIndex, .Columns(0), 0)
        If IsNumeric(i) Then resu(i, 1) = resu(i, 1) + 1
    Next
    .Value = resu  'restitution
End With
End Sub
Votre fichier en retour.
 

Pièces jointes

  • Copie de Addition en ligne des couleurs 02.xlsm
    22.7 KB · Affichages: 8
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…