Fonction personnalisée (compter cellule avec police)

Résolu
Adirien Messages postés 86 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -

Bonjour,

Je souhaite compter les cellules qui ont une police rouge dans un tableau.

Petite difficulté il se peut que certains texte de cellule contiennent à la fin des charactères d'une autre couleur dont je ne veux pas tenir compte.

J'ai donc construit la fonction avec cette méthode :

Public Function CompterParCouleurFond(Plage As Range, Couleur As Range)

     
     Application.Volatile

     For Each Cellule In Plage

         If Cellule.Characters(2, 1).Font.Color = Couleur.Font.Color Then
             CompterParCouleurFond = CompterParCouleurFond + 1

         End If

     Next

End Function

Je rencontre 2 anomalies pour que cette fonction soit fiable :

Je devrais y arriver par moi même mais elle me compte aussi les cellules vides qui ont la couleur de police recherché.

Mais surtout ce que je ne maitrise pas du tout c'est que si je mets à jour le contenu du tableau la fonction ne fait pas le recalcule automatiquement elle reste sur la donnée précédente.

Merci pour votre aide


Windows / Edge 114.0.1823.51

4 réponses

  1. Adirien Messages postés 86 Statut Membre 2
     

    J'ai finalement trouvé ceci pour le problème d'actualisation de la formule :

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     Application.Calculate
    End Sub

    Et c'est finalement le code pour ne pas tenir compte des cellules vides qui me pose problème finalement :

    0
  2. Adirien Messages postés 86 Statut Membre 2
     

    Bon a priori je me suis auto résolu mon problème donc voilà mon code final si besoin : 

    Public Function CompterParCouleurFond(Plage As Range, Couleur As Range)
    
         
         Application.Volatile
    
         For Each Cellule In Plage
    
             If Cellule.Value = "" Then GoTo Fin
             If Cellule.Characters(2, 1).Font.Color = Couleur.Font.Color Then
                 CompterParCouleurFond = CompterParCouleurFond + 1
    
             End If
    Fin:
         Next
    
    End Function
    
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      plus propre:

      If Cellule.Value <> "" and Cellule.Characters(2, 1).Font.Color = Couleur.Font.Color Then
      1
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       

      peux-tu alors marquer la discussion comme résolue?

      1
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     

    bonjour,

    en testant, je n'obtiens pas ton deuxième souci: la valeur se met bien à jour.

    peux-tu partager ton fichier?

    0
  4. Adirien Messages postés 86 Statut Membre 2
     

    Mon problème est résolu donc pas besoin mais merci pour la simplification de mon code.

    0