Nombre de case par couleur ?, macro

elrika

XLDnaute Nouveau
bonjour
Comment indiqué dans mon précedement topic.
Je cherchais un solution par macro( car avec mise en forme conditionnelle, cela n'est pas possible ou alors il
faut tous chambouler le tableau, car il y a du texte différent dans les cases de couleur)
pour calculer le nombre de case verte et rouge
j'ai trouvé ce topic
https://www.excel-downloads.com/threads/nombre-de-cases-par-couleur.72320/
(merci à l'auteur)

Cella fonctionnais
Par contre j'avais un problème pourl 'actualiser même en appuyant sur la touche F9.
J'ai voulu donc créer une macro à la "main", c'est à dire par enregistrement.

Et maintenant "c'est le drame" la fonction ne simple plus s'activé.
Il est indiqué #NOM? a la place et si je clique sur Evaluation de la formule il sembel que
NBcolor ne soit pas reconnu alors que si je clique sur Alt F11, la fonction existe bien.

quelqu'un pourrait m'aider ?

bonne journée
 

tototiti2008

XLDnaute Barbatruc
Re : Nombre de case par couleur ?, macro

Bonjour elrika,

Garde la fonction proposée par Celeda et ajoute juste une ligne "Application.Volatile" dans le code comme ça

Code:
Public Function NbColor(Plage As Range, vCellcolor As Range) As Byte
Dim vColorTest As Long
Dim Compteur As Long
Dim vColorCell As Range
Application.Volatile
Compteur = 0
vColorTest = vCellcolor.Interior.Color
For Each vColorCell In Plage
If vColorCell.Interior.Color = vColorTest Then
Compteur = Compteur + 1
End If
Next vColorCell

NbColor = Compteur
End Function
ça permettra le recalcul avec la touche F9
 

Theze

XLDnaute Occasionnel
Re : Nombre de case par couleur ?, macro

Bonjour,

Ajoute Application.Volatile en début de fonction, ceci oblige Excel à calculer cette fonction même si les plages qui y font référence ne sont pas modifiées (des valeurs je parle). Par contre, cette fonction ne sera pas calculée tant que tu n'auras pas fait une modif dans une cellule (ce qui provoque le calcul automatique de la feuille). Ce que tu peux faire, c'est obliger Excel à exécuter le calcul de la feuille sur l'évènement SelectionChange de la feuille ce qui fait qu'une fois que tu aura mis en couleur ta cellule tu en sélectionne une autre (ou tabulation, Entrée, etc...) et la fonction sera calculée.
A mettre dans le module de la feuille :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Application.Calculate

End Sub
La fonction avec Application.Volatile :
Code:
Public Function NbColor(Optional Plage As Range, _
                        Optional vCellcolor As Range) As Byte

    Dim vColorTest As Long
    Dim Compteur As Long
    Dim vColorCell As Range
    
    'oblige Excel à calculer cette fonction même
    'si pas de changement de valeur dans les plages concernés
    Application.Volatile
    
    Compteur = 0
      
    vColorTest = vCellcolor.Interior.Color
    
    For Each vColorCell In Plage
    
        If vColorCell.Interior.Color = vColorTest Then
        
            Compteur = Compteur + 1
            
        End If
        
    Next vColorCell
    
    NbColor = Compteur

End Function

Hervé.
 

Efgé

XLDnaute Barbatruc
Re : Nombre de case par couleur ?, macro

Bonjour elrika, tototiti2008, Theze,
Comme sur l'autre fil de elrika j'ai fait la même proposition que Theze (sans le savoir), je poste ici une variante qui limite le re calcul au seul changement de couleur de la cellule, ce qui évite des recalculs permanents (j'ai mis une MsgBox pour visualiser le moment du calcul):
VB:
Private Couleur As Long
Private Cellule As String
Private Fanion As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Fanion = False Then
    Couleur = ActiveCell.Interior.ColorIndex
    Cellule = ActiveCell.Address
    Fanion = True
Else
    If Range(Cellule).Interior.ColorIndex <> Couleur Then
        Application.Calculate
        MsgBox "Calculate"
        Fanion = False
    Else
        Couleur = ActiveCell.Interior.ColorIndex
        Cellule = ActiveCell.Address
        Fanion = True
    End If
End If
End Sub
Coridlament
 

Pièces jointes

  • Copie de Additionncouleur(1).xls
    26.5 KB · Affichages: 92

Si...

XLDnaute Barbatruc
Re : Nombre de case par couleur ?, macro

Salut

Exit Fonction. Si ... I1 et I2 ont pour fond les 2 couleurs, un message donne les nombres correspondants quand on sélectionne une plage :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim C As Range, N1 As Byte, N2 As Byte
  If Target.Count = 1 Then Exit Sub
  For Each C In Target
    If C.Interior.Color = [I1].Interior.Color Then N1 = N1 + 1
    If C.Interior.Color = [I2].Interior.Color Then N2 = N2 + 1
  Next
  MsgBox "Dans " & Target.Address & " il y a " & Chr(10) & _
          N1 & " cellule" & IIf(N1 > 1, "s", "") & " en jaune et " & _
          N2 & " cellule" & IIf(N2 > 1, "s", "") & " en rouge !"
End Sub
 

Discussions similaires

Réponses
7
Affichages
736

Statistiques des forums

Discussions
314 630
Messages
2 111 384
Membres
111 118
dernier inscrit
gmc