Somme de cellule avec un texte de couleur noir

Fermé
mamar10 - 1 août 2019 à 13:03
 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

3 réponses

ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
1 août 2019 à 16:19
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
0
Bonjour,

Je vous ai partagé mon fichier. Merci pour l’intérêt que vous portez à ma requête.
0
mamar10 > mamar10
2 août 2019 à 10:12
https://mon-partage.fr/f/WYPYUES2/
0
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
0
danielc0 Messages postés 838 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 23 avril 2024 74 > mamar10
2 août 2019 à 11:01
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
0
mamar10 > danielc0 Messages postés 838 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 23 avril 2024
2 août 2019 à 11:35
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
0
danielc0 Messages postés 838 Date d'inscription mardi 5 juin 2018 Statut Membre Dernière intervention 23 avril 2024 74
1 août 2019 à 16:22
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
0
Non aucun moyen logique de déterminer si une chambre est vide ou non. C'est aléatoire.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
1 août 2019 à 16:39
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à
0