Somme de cellule avec un texte de couleur noir

- - Dernière réponse :  mamar10 - 2 août 2019 à 12:15
Bonjour,

J'ai besoin pour un tableau, d'automatiser le calcul du nombre de cellule contenant du texte noir, ou non rouge (ce sont les deux couleurs que j'utilise).

Pour exemple, mon calcul se base sur des chambres d’hôpital vides ou pleine. Si la chambre est vide, le numéro de la chambre est en rouge, si elle est pleine, il est en noir.
Les modifications des couleurs des chambres se fait à la main, mais je souhaite automatiser le calcul des chambre pleine (ou non vide).

J'ai rechercher sur le forum mais sans réussite.

Merci d'avance
Afficher la suite 

3 réponses

Messages postés
9062
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
23 août 2019
1609
0
Merci
Bonjour

Puisque la couleur ne provient pas d'une MFC, il faudra passer par vba (macro). Pour ça, il te faut envoyer ton fichier (sans données confidentielles)
Utilises https://mon-partage.fr/ et joins le lien obtenu à ton prochain message

Cdlmnt
L'idée de la formule c'est de calculer le nombre de chambre non vide (texte noir) dans la cellule "total après Répart" en colonne I
danielc0
Messages postés
641
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
23 août 2019
45 > mamar10 -
J'ai écrit cette fonction VBA :
Function Noir(Plage As Range) As Integer
  Dim C As Range
  Application.Volatile True
  For Each C In Plage
    If C.Font.ColorIndex <> 3 Then
      Noir = Noir + 1
    End If
  Next C
End Function


Il faut enregistrer ton classeur au format .xlsm et copier le code dedans. Si tu ne sais pas le faire, dis-le. pour l'utiliser, écris dans une cellule :

=noir(H3:H6)

Je peux changer le nom de la fonction.
Celle-ci compte les cellules dont la couleur de police est différente de rouge pétant (index 3).

https://mon-partage.fr/f/bEAjiLa3/

Daniel
> danielc0
Messages postés
641
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
23 août 2019
-
C'est super efficace, merci. Il y a malgré tout un hic. Les cellules vide sont considérées comme noir (alors qu'il n'y a pas de texte). Est-il possible de rectifier ça?

Merci d'avance
danielc0
Messages postés
641
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
23 août 2019
45 > mamar10 -
Voici :

Function Noir(Plage As Range) As Integer
  Dim C As Range
  Application.Volatile True
  For Each C In Plage
    If C.Font.ColorIndex <> 3 And C.Value <> "" Then
      Noir = Noir + 1
    End If
  Next C
End Function


Daniel
> danielc0
Messages postés
641
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
23 août 2019
-
C'est parfait.
Avec ça je vois pouvoir frimer un peu au boulot.
Merci encore et bon weekend.
Commenter la réponse de ccm81
Messages postés
641
Date d'inscription
mardi 5 juin 2018
Statut
Membre
Dernière intervention
23 août 2019
45
0
Merci
Bonjour,

Est-ce qu'il y a un moyen logique de déterminer si une chambre est vide ou non ? Parce que, s'il n'y en a pas, il ne te reste que l'usage d'une fonction perso (VBA). L'inconvénient, c'est que le changement de couleur d'une cellule ne provoque pas le recalcul. Tu risques donc de te retrouver avec un résultat erroné.

Cordialement.

Daniel
Non aucun moyen logique de déterminer si une chambre est vide ou non. C'est aléatoire.
Commenter la réponse de danielc0
Messages postés
6155
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2019
383
0
Merci
Bonjour,

en vba faire Alt F11 pour accéder au module de la feuille concernée et mettre ce code qui se déclenchera au double clic:

Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
testcouleur
End Sub
Sub testcouleur()
Dim FL1 As Worksheet, Cell As Range, NoCol As Integer, NoLig As Long
Dim DerLig As Long, DerCol As Integer, Var As Variant
Dim i As Integer 'noir
Dim j As Integer 'rouge

  Set FL1 = Worksheets("Feuil1") 'a adapter
     'Détermine la dernière ligne renseignée de la feuille de calculs
    DerLig = Split(FL1.UsedRange.Address, "$")(4)
      'Détermine la dernière colonne renseignée de la feuille de calculs
    DerCol = Columns(Split(FL1.UsedRange.Address, "$")(3)).Column
     For NoLig = 1 To DerLig
        For NoCol = 1 To DerCol
            Var = FL1.Cells(NoLig, NoCol)
           If Var = "" Then
           Else
           If FL1.Cells(NoLig, NoCol).Font.ColorIndex = xlAutomatic Then 'noir
           i = i + 1
           ElseIf FL1.Cells(NoLig, NoCol).Font.ColorIndex = 3 Then 'rouge
           j = j + 1
            End If
             End If
           Next
            Next
            MsgBox "noir: " & i
             MsgBox "rouge : " & j
 End Sub




voilà
Commenter la réponse de cs_Le Pivert