XL 2019 Choisir la couleur avec une formule (pas de mise en forme conditionnelle)

  • Initiateur de la discussion Initiateur de la discussion Martini
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Martini

XLDnaute Junior
D23 est calculé avec des valeurs réelles
D24 et suivantes sont la dernière valeur connue (puisque B24 est vide)
La formule en D24 :
Code:
=SI(B24="";D23;(B24-B23)/B23)


Est-ce que je peux choisir la couleur (de la cellule ou du texte) à partir de valeur_si_vrai ou valeur_si_faux ?
 

Pièces jointes

Bonsoir le fil, Martini

Les gestes barrières sont : pas de bisou et pas de poignées de mains.
(Mais un petit bonsoir sur forum: aucun risque de contagion 😉)
•> Cf le point 3 de la charte du forum.

Sinon pour ta question: qu'est-ce que tu as contre les MFC?
 
Dernière édition:
Bonsoir le fil, Martini

Les gestes barrières sont : pas de bisou et pas de poignées de mains.
(Mais un petit bonsoir sur forum: aucun risque de contagion 😉)
•> Cf le point 3 de la charte du forum.
Pardon, j'ai perdu mes bonnes habitudes.
Bonsoir à tous, donc.

Sinon pour ta question: qu'est-ce que tu as contre les MFC?
Je les trouve lourdes à mettre en place et pas transférables facilement d'un classeur à un autre.
En plus, je n'étais pas sûr qu'elles puissent répondre à ma question (colorier une cellule en fonction de la valeur d'une autre) ?


J'espérer pouvoir utiliser [Rouge] comme pour un format de cellule personnalisé
 
Re, Bonsoir Chris

Qui dit addin, dit VBA, non ?
En parlant de VBA, juste histoire de... 😉
(encore un truc sorti de mes archives anglophones)
A mettre dans un module standard
VB:
Option Explicit
#If VBA7 Then
    Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
    Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
    Declare PtrSafe Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Integer
    Declare PtrSafe Function GlobalGetAtomName Lib "kernel32" Alias "GlobalGetAtomNameA" (ByVal nAtom As Integer, ByVal lpBuffer As String, ByVal nSize As Long) As Long
#Else
    Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
    Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
    Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As String) As Integer
    Declare Function GlobalGetAtomName Lib "kernel32" Alias "GlobalGetAtomNameA" (ByVal nAtom As Integer, ByVal lpBuffer As String, ByVal nSize As Long) As Long
#End If

Public Function SetColor(ByVal Value As Variant, ByVal BackGroundColor As String) As Variant
     SetTimer Application.hwnd, GlobalAddAtom(Application.Caller.Address(External:=True) & "*" & BackGroundColor), 0, AddressOf ChangeColor
    SetColor = Value
End Function

Sub ChangeColor(ByVal hwnd As Long, ByVal uMsg As Long, ByVal nIDEvent As Long, ByVal dwTimer As Long)
    Dim sBuffer As String, lRet As Long, lColorIndex As Long
 
    On Error Resume Next
    KillTimer hwnd, nIDEvent
    sBuffer = Space(256)
    lRet = GlobalGetAtomName(nIDEvent, sBuffer, Len(sBuffer))
    sBuffer = Left(sBuffer, lRet)
    Select Case UCase(Split(sBuffer, "*")(1))
        Case "YELLOW"
            lColorIndex = 6
        Case "GREEN"
            lColorIndex = 14
        Case "BLUE"
            lColorIndex = 23
        Case "RED"
            lColorIndex = 3
        Case "CYAN"
            lColorIndex = 33
        Case "MAGENTA"
            lColorIndex = 47
        Case "NONE"
            lColorIndex = xlColorIndexNone
    End Select
    Range(Split(sBuffer, "*")(0)).Interior.ColorIndex = lColorIndex
End Sub
Pour tester:
En A1: toto
En B1: test
En C1 la fomule ci-dessous
=(SI(A1="toto";SetColor(B1;"Cyan");SI(A1="titi";SetColor(B1;"Yellow");SetColor("";"None"))))
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
153
Réponses
25
Affichages
776
Retour