Somme de cellule avec un texte de couleur noir

mamar10 -  
 mamar10 -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. mamar10
       
      Bonjour,

      Je vous ai partagé mon fichier. Merci pour l’intérêt que vous portez à ma requête.
      0
    2. mamar10 > mamar10
       
      https://mon-partage.fr/f/WYPYUES2/
      0
    3. mamar10
       
      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
    4. danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   287 > 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
      0
    5. mamar10 > danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention  
       
      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
  2. danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   287
     
    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
    1. mamar10
       
      Non aucun moyen logique de déterminer si une chambre est vide ou non. C'est aléatoire.
      0
  3. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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