Trouver couleur police du 1er caractère dans une cellule

Laliepomm

XLDnaute Junior
Bonjour à tous,

J'ai une formule que j'utilise pour trouver la couleur d'un texte dans une cellule.
il s'agit de la formule "couleur" =LIRE.CELLULE(24;"selection cellule départ")
Cette formule fonctionne très bien jusqu'à ce que dans la même cellule, j'ai 2 couleurs et polices différentes.

Mon but est de trouver la couleur du nombre présent dans cette cellule et non celle du caractère *. Ce nombre se trouvera toujours en 1ère position dans la cellule et il peut varier de 0 à 3.

J'ai essayé de ne prendre en compte que le nombre avec la formule "GAUCHE" incluse dans ma formule "couleur", mais sans succès.

Dans le fichier joint, j'ai créé dans le tableau de données (tableau1) une ligne "both", puis 2 tableaux comme suit :
- un avec la formule "couleur" : résultat obtenu (tableau2)
- un avec le résultat attendu (tableau3)

D'avance merci pour votre support,
bonne fin de journée

Lalie
 

Pièces jointes

  • TEST COULEUR LETTRE1.xlsm
    20.2 KB · Affichages: 16

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Laliepomm,
Un essai en PJ avec une fonction perso :
VB:
Function ColorCar(N)
' ColorCar remonte la couleur du premier caractères avec le code user.
With ActiveSheet.Range(N.Address)
    c = .Characters(1, 1).Font.Color
    Select Case c
        Case 255
            ColorCar = 3
        Case 15773696
            ColorCar = 33
        Case 0
            ColorCar = 1
        Case 26367
            ColorCar = 46
    End Select
End With
End Function
La syntaxe est =ColorCar(A1)
 

Pièces jointes

  • TEST COULEUR LETTRE1 (2).xlsm
    21.3 KB · Affichages: 9

Laliepomm

XLDnaute Junior
Bonjour Sylvanu,

Merci pour ta réponse.
Ma problématique est qu'ensuite je me sers de ma formule "couleur" pour compter le nombre de fois où la couleur "rouge" (par exemple) apparait dans mon tableau définitif via la fonction "couleur2".
Du coup je n'arrive pas à intégrer ta fonction dans la finalité souhaitée.

ci-joint le même fichier avec ce point-là.

Au cas où, je joins également mon fichier définitif "Tableau de compétence et polyvalence".
Les couleurs sont dans les colonnes "coaching"(rouge) et "formation externe" (bleu) (colonnes U à X).
Les plages prises en compte dans ces colonnes concernent toutes celles qui contiennent "Nom*Fonction*Ancienneté" (colonnes pouvant être ajoutées ou supprimées en laissant toujours un mini de 10 colonnes avec cet intitulé)


Encore merci d'avance pour ton aide sur ce sujet.

Salutations

Lalie
 

Pièces jointes

  • TEST COULEUR LETTRE1 (2) (1).xlsm
    24.1 KB · Affichages: 6
  • Tableau de compétence et polyvalence - 30 11 2020.xlsm
    254.6 KB · Affichages: 4

Laliepomm

XLDnaute Junior
Bonjour Sylvanu
Idéalement, je ne passe pas par la phase "calcul par cellule".
Mon but est d'avoir directement le total couleur pour la plage complète....

A moins qu'il soit possible d'adapter cette fonction macro si pour prendre en compte que le 1er caractère de la cellule et non la cellule entière (la fonction macro n'est pas de moi, mais de lolote83)

VB:
Function Couleur2(xPlage As Range, xCouleur As String)
    xCpt = 0
    For Each xCell In xPlage
        Select Case xCouleur
            Case Is = "rouge"
                xCoul = 3
            Case Is = "bleu"
                xCoul = 33
            Case Is = "noir"
                xCoul = -4105
        End Select
        xNumCoul = xCell.Characters.Font.ColorIndex
        If xNumCoul = xCoul Then
            xCpt = xCpt + 1
        End If
    Next xCell
    Couleur2 = xCpt
End Function
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Un essai en désespoir de cause avec :
VB:
Function NbColCar(Plage As Range, Couleur As String)
    Dim Nb, N
    Select Case Couleur
        Case "ROUGE"
            ColCar = RGB(255, 0, 0)
        Case "BLEU"
            ColCar = RGB(0, 176, 240)
        Case "NOIR"
            ColCar = RGB(0, 0, 0)
    End Select
    For Each N In Plage
        With ActiveSheet.Range(N.Address)
            c = .Characters(1, 1).Font.Color
            If c = ColCar Then Nb = Nb + 1
        End With
    Next N
    NbColCar = Nb
End Function
Compte la couleur spécifiée du premier caractère d'une plage.
Syntaxe : =NbColCar(Plage;Nom de la couleur)
Comme :
=NbColCar($B3:$D3;Tableau26[[#En-têtes];[ROUGE]])
Les couleurs identifiées sont ROUGE, BLEU, NOIR.

NB: je n'ai pas touché à votre fichier final, je ne vois pas où et comment introduire cette fonction.
 

Pièces jointes

  • TEST COULEUR LETTRE1 (5).xlsm
    24.9 KB · Affichages: 3

Laliepomm

XLDnaute Junior
Bonjour Sylvanu

finalement, j'ai trouvé en faisant très simple dans ma fonction "couleur2" : j'ai ajouté le
xNumCoul = xCell.Characters(1, 1).Font.ColorIndex

et du coup ma fonction recherche la couleur du 1er caractère de la cellule et la compte.

Merci beaucoup d'avoir cherché car tes propositions m'ont permises de résoudre ce problème-ci.
Ne me reste plus qu'à corriger ma fonction suivante avec le même cas, espérons que j'aurai la même chance et que le problème se résolve également avec cet ajout du Characters(1,1)

Bonne fin de journée

Lalie

ci-dessous le code si cela peut servir à quelqu'un :)

VB:
Function Couleur2(xPlage As Range, xCouleur As String)
    xCpt = 0
    For Each xCell In xPlage
        Select Case xCouleur
            Case Is = "rouge"
                xCoul = 3
            Case Is = "bleu"
                xCoul = 33
            Case Is = "noir"
                xCoul = -4105
        End Select
        xNumCoul = xCell.Characters(1, 1).Font.ColorIndex     '=insertion de .characters(1,1) fait qu'il cherche le 1er caractère de la cellule
        
        If xNumCoul = xCoul Then
            xCpt = xCpt + 1
        End If
    Next xCell
    Couleur2 = xCpt
End Function
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 812
dernier inscrit
abdouami