Fonction personnalisée (compter cellule avec police)

Résolu
Adirien Messages postés 84 Date d'inscription samedi 11 mai 2013 Statut Membre Dernière intervention 27 janvier 2024 - 23 juin 2023 à 06:19
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 - 25 juin 2023 à 12:31

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

A voir également:

4 réponses

Adirien Messages postés 84 Date d'inscription samedi 11 mai 2013 Statut Membre Dernière intervention 27 janvier 2024 2
23 juin 2023 à 07:18

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
Adirien Messages postés 84 Date d'inscription samedi 11 mai 2013 Statut Membre Dernière intervention 27 janvier 2024 2
23 juin 2023 à 07:57

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
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
23 juin 2023 à 08:51

plus propre:

If Cellule.Value <> "" and Cellule.Characters(2, 1).Font.Color = Couleur.Font.Color Then
1
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
25 juin 2023 à 12:31

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

1
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
23 juin 2023 à 08:40

bonjour,

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

peux-tu partager ton fichier?

0
Adirien Messages postés 84 Date d'inscription samedi 11 mai 2013 Statut Membre Dernière intervention 27 janvier 2024 2
23 juin 2023 à 08:56

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

0