[Excel] Macro permettant de compter des cellules d'une certaine couleur

Feyloki Messages postés 5 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 24 mars 2009 - 26 févr. 2009 à 10:48
Feyloki Messages postés 5 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 24 mars 2009 - 24 mars 2009 à 10:04
Bonjour,

Je suis actuellement sur la réalisation d'un tableau excel.

Chaque ligne de cellules a trois état différents:

-Les cellules entièrement vide, qui ne nous intéressent pas.
-Les cellules contenant un chiffre, mais pas de remplissage de couleur, qui signifie que les données on été traitées.
-Les cellules contenant un chiffre, la cellule colorée en orange, signifiant que les données restent à traiter.

Après moultes recherches, j'ai mis la main sur une macro qui fonctionne parfaitement:

Function CptCouleur(plage As Range, couleur As Range) As Long
Dim cpt As Long, cel As Range
cpt = 0
For Each cel In plage
cpt cpt - (cel.Interior.ColorIndex couleur.Interior.ColorIndex)
Next cel
CptCouleur = cpt
End Function

Le seul "petit" souci est que cette macro n'est pas dynamique.
Je veux dire par là que si la couleur de la case est amenée à changer, le chiffre ne se modifie pas de lui même..
En gros, la macro ne sert strictement à rien.

Petites précisions, la macro se réfère à la couleur d'une cellule spécifique du coup, que j'ai mis en légende du tableau, et compare
la couleur de cette dernière à toutes les cellules de la ligne en question.

Merci de m'apporter votre aide... parce que là je patine ^^

Cordialement

5 réponses

Feyloki Messages postés 5 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 24 mars 2009
26 févr. 2009 à 10:51
Function CptCouleur(plage As Range, couleur As Range) As Long
     Dim cpt As Long, cel As Range     
         cpt = 0     
         For Each cel In plage               cpt cpt - (cel.Interior.ColorIndex couleur.Interior.ColorIndex)
         Next cel     
         CptCouleur = cpt
End Function

(Incapable de trouver la touche édition, j'ai recopié les lignes de code que j'avais "copy paste" et qui semblent être mal passées)
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
26 févr. 2009 à 16:20
Salut,

Une petite remarque pour commencer : Tu n'es pas dans le bon theme !... Pour Excel et plus generalement le VBA c'est ici :

--->  Thèmes / Visual Basic 6 / Langages dérivés / VBA /

Non non !!! ne reposte pas ailleurs on continu malgré tout avec celui-ci !

je crois avoir compris que les couleurs des cellules sont changées manuellement. Si c'est bien le cas le probleme est qu'il n'y a pas d'evenement qui permet de detecter ce changement de couleur.
On vas donc ce creer cette evenement a partir de l'evenement Worksheet_SelectionChange de la feuille. il est donc a placer dans le code de la feuille qui t'interesse.

Option Explicit
Public PrevCell As Range, OriginalColor As Long

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If OriginalColor = 0 Then
        OriginalColor = Target.Interior.ColorIndex
        Set PrevCell = Target
    Else
        If Not PrevCell.Interior.ColorIndex = OriginalColor Then MsgBox "la couleur de la cellule precedente a changée"
        OriginalColor = Target.Interior.ColorIndex
        Set PrevCell = Target
    End If
End Sub

il te faut juste remplacer la message box par ta fonction

A+
0
Feyloki Messages postés 5 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 24 mars 2009
9 mars 2009 à 17:00
Bonjour !

Et merci de votre réponse.
Désolé pour l'erreur de section, il m'avais semblé bien faire. ^^

J'ai introduit l'evenement Worksheet_Selectionchange, mais il ne correspond pas tout à fait à ce qui est requis: Je ne comprends pas quoi mettre à la place de "la couleur de la cellule precedent a changée" si je remplace MsgBox par ma fonction.
Il me manque donc un argument pour faire marcher ma fonction ^^

Sinon pour synthétiser l'utilité que je souhaites donner à ma fonction:

Sur une ligne de 10 cellules, certaines blanches certaines orange claire, je souhaite donc calculer le nombre de cellules oranges claire, qui signifie qu'il y a des erreurs sur les données de la cellule associée.
Une fois l'erreur solutionnée, l'utilisateur change effectivement manuellement la couleur, et donc passe la cellule en =!orange clair.
Ainsi oui, la fonction (ou du moins l'evenement rajouté) doit prendre en compte cette manipulation, et se mettre à jour "en temps réel"

Merci de l'aide apportée, et en attente d'une précision sur l'argument, je vous souhaites à tous bonne soirée. :)
0
Feyloki Messages postés 5 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 24 mars 2009
9 mars 2009 à 17:10
En poussant le vice un peu plus loin, serait il possible de regrouper plusieurs modifications en une seule ?

Je m'explique:

Une cellule orange est constituée d'un chiffre, avec un lien hypertexte vers une autre feuille excel (en lecture seule). Ce chiffre est centré, et non gras.

L'idéal serait lors de la modification, que la cellule passe en couleur blanche (sans fond) en gras et ayant le lien hypertexte supprimé.

 Y a-t-il moyen de regrouper ces modifications en une seule, dans le même evenement Worksheet mais en ne tenant compte que de la couleur lors du comptage ?

Si ça devient trop complexe ou s'il y a simplification à apporter ailleurs, qu'on m'arrête desuite ^^

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Feyloki Messages postés 5 Date d'inscription jeudi 26 février 2009 Statut Membre Dernière intervention 24 mars 2009
24 mars 2009 à 10:04
Petit up ? ^^
0
Rejoignez-nous