VBA : Couleur de police = couleur de cellule

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 !

DoubleZero

XLDnaute Barbatruc
Bonjour à toutes et à tous,

Serait-il possible, s’il vous plaît, de rendre la couleur du texte (ou de la valeur numérique) de chaque cellule similaire à la couleur de fond, indépendamment du mode d’application retenu ?

Exemples :

- Le fond de la cellule qui contient « Toto » est de couleur rouge (couleur appliquée par MFC) => « Toto » prend la couleur rouge ;

- Le fond de la cellule qui contient « Titi » est de couleur verte (couleur appliquée manuellement) => « Titi » prend la couleur verte…

Je vous remercie pour votre aide 🙂.
 

Pièces jointes

Re : VBA : Couleur de police = couleur de cellule

Bonjour DoubleZéro 🙂

Je ne sais pas si cela répond à ton souci ...

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Target.Copy Destination:=Target.Offset(0, 1)
Target.Offset(0, 1).Font.ColorIndex = Target.Interior.ColorIndex
Application.EnableEvents = True
End Sub

A +
🙂
 
Re : VBA : Couleur de police = couleur de cellule

Re-bonjour, le Forum,

Bonjour, James007 🙂,

Merci beaucoup.

Mais... j'ai dû mal m'exprimer 😱 et ton travail ne correspond donc pas à ce que je souhaiterais. Il ira, toutefois, dans mon coffre à trésors 😀.

Je voudrais que la couleur du contenant soit appliquée au contenu, sans que le contenu ne soit dupliqué.

Exemple : je saisis "Titi". Par la suite, si j'applique à la cellule contenant "Titi" un fond rouge (ou jaune, ou vert, ou toute autre couleur de fond), manuellement ou par le biais d'une MFC, je voudrais que la couleur de police adopte la couleur de fond afin que "Titi" soit "masqué".

Est-ce plus clair 😕... Ohhhhhh, j'ai peur que non (?)...

Merci encore.
 
Re : VBA : Couleur de police = couleur de cellule

Re,

Ce que tu demandes ... est possible ... mais c'est un peu une usine à gaz ...

car les MFC ont, au total, six conditions ...

Plus simple pour masquer quand tu veux ...
VB:
Sub Masquer()
Selection.Font.ColorIndex = Selection.Interior.ColorIndex
End Sub

A +
🙂
 
Re : VBA : Couleur de police = couleur de cellule

Re-bonjour,

Ce que tu demandes ... est possible ... mais c'est un peu une usine à gaz ...

James007, la macro suggérée ne fait pas ce que je voudrais. Peut-être ai-je loupé une étape 😕 ?

Quoi qu'il en soit, s'il s'agit d'une usine à gaz, je ne veux pas te faire perdre ton temps pour une expression de besoin qui n'a absolument rien de vital.

Je te remercie pour le temps que tu m'as accordé et te souhaite une bonne soirée 🙂.
 

Pièces jointes

Re : VBA : Couleur de police = couleur de cellule

Bonsoir les jeunes ... et puis tous les autres 😉

DoubleZero, la macro de DoubleZeroSept fait bien ce que tu voulais (en tout cas si j'ai compris!) ... mais uniquement sur une cellule préalablement sélectionnée, si la cellule en question est colorée et si la couleur n'a pas été ajoutée par le biais d'une MFC ... vous avez donc raison tous les deux 😀

Cependant, le caractère d'usine à gaz risque bien d'être très vite adapté: fais une petite recherche ... Il me semble avoir lu récemment que la modification d'une MFC, via vba était une solide gageure.
Dans le dernier fichier que tu as déposé, il faut commencer par vérifier si une cellule déterminée contiendrait une MFC. Si oui ... je me suis arrêté là: à mon avis, c'est là que ça se compliquerait singulièrement. Si pas, y a-t-il une couleur de remplissage? Si oui, ici vient le bout de code de James, Si non, on passe à la suite.
Le code qui suit fait ça ... mais se contente d'afficher un message en cas de MFC et uniquement sur une plage de cellules limitée!

VB:
Sub testMFC()
Dim c As Range
For Each c In Sheets("feuil1").Range("b13:h14")
    If c.FormatConditions.Count >= 1 Then
        MsgBox "MFC en cellule " & c.Address
    Else
        If c.Interior.ColorIndex <> xlColorIndexNone Then c.Font.ColorIndex = c.Interior.ColorIndex
    End If
Next c
End Sub
 
Re : VBA : Couleur de police = couleur de cellule

Bonsoir,
Si j'ai bien compris, à chaque saisie dans la feuille, aucune plage n'étant spécifiée, il faut :
- recherché les doublons
- appliquer la couleur de la cellule active sur les doublons si couleur en manuel
- appliquer la couleur de la mfc s'il y en a une, en vérifiant la formule et la couleur à appliquer
Restera le quart d'heure dans journée pour travailler un peu...
A+
kjin
 
Re : VBA : Couleur de police = couleur de cellule

Bonsoir à tous, Salut Modeste 🙂

Pour tous ceux que ce genre de casse-tête intéresse, ci joint le code de Brad Yundt , qui permet à une MFC de dépendre d'une autre MFC ...

VB:
Option Explicit

Function ConditionalColor(rg As Range, FormatType As String) As Long
'Code by Brad Yundt - July 1998
Dim cel As Range
Dim tmp As Variant
Dim boo As Boolean
Dim frmla As String, frmlaR1C1 As String, frmlaA1 As String
Dim i As Long

Set cel = rg.Cells(1, 1)
Select Case Left(LCase(FormatType), 1)
Case "f"    'Font color
    ConditionalColor = cel.Font.ColorIndex
Case Else   'Interior or highlight color
    ConditionalColor = cel.Interior.ColorIndex
End Select

If cel.FormatConditions.Count > 0 Then
    'On Error Resume Next
    With cel.FormatConditions
        For i = 1 To .Count     'Loop through the three possible format conditions for each cell
            frmla = .Item(i).Formula1
            If Left(frmla, 1) = "=" Then    'If "Formula Is", then evaluate if it is True
                'Conditional Formatting is interpreted relative to the active cell. _
                This cause the wrong results if the formula isn't restated relative to the cell containing the _
                Conditional Formatting--hence the workaround using ConvertFormula twice in a row. _
                If the function were not called using a worksheet formula, you could just activate the cell instead.
                frmlaR1C1 = Application.ConvertFormula(frmla, xlA1, xlR1C1, , ActiveCell)
                frmlaA1 = Application.ConvertFormula(frmlaR1C1, xlR1C1, xlA1, xlAbsolute, cel)
                boo = Application.Evaluate(frmlaA1)
            Else    'If "Value Is", then identify the type of comparison operator and build comparison formula
                Select Case .Item(i).Operator
                Case xlEqual  ' = x
                    frmla = cel & "=" & .Item(i).Formula1
                Case xlNotEqual ' <> x
                    frmla = cel & "<>" & .Item(i).Formula1
                Case xlBetween  'x <= cel <= y
                    frmla = "AND(" & .Item(i).Formula1 & "<=" & cel & "," & cel & "<=" & .Item(i).Formula2 & ")"
                Case xlNotBetween   'x > cel or cel > y
                    frmla = "OR(" & .Item(i).Formula1 & ">" & cel & "," & cel & ">" & .Item(i).Formula2 & ")"
                Case xlLess ' < x
                    frmla = cel & "<" & .Item(i).Formula1
                Case xlLessEqual    ' <= x
                    frmla = cel & "<=" & .Item(i).Formula1
                Case xlGreater  ' > x
                    frmla = cel & ">" & .Item(i).Formula1
                Case xlGreaterEqual ' >= x
                    frmla = cel & ">=" & .Item(i).Formula1
                End Select
                boo = Application.Evaluate(frmla)   'Evaluate the "Value Is" comparison formula
            End If
            
            If boo Then 'If this Format Condition is satisfied
                On Error Resume Next
                Select Case Left(LCase(FormatType), 1)
                Case "f"    'Font color
                    tmp = .Item(i).Font.ColorIndex
                Case Else   'Interior or highlight color
                    tmp = .Item(i).Interior.ColorIndex
                End Select
                If Err = 0 Then ConditionalColor = tmp
                Err.Clear
                On Error GoTo 0
                Exit For    'Since Format Condition is satisfied, exit the inner loop
            End If
        Next i
    End With
End If

End Function


Sub NonConditionalFormatting()
Dim cel As Range
Application.ScreenUpdating = False
    
'Remove conditional formatting from entire worksheet
'For Each cel In ActiveSheet.UsedRange.SpecialCells(xlCellTypeAllFormatConditions)
For Each cel In Selection   'Remove conditional formatting from selected cells
    If cel.FormatConditions.Count > 0 Then
        'cel.Activate    'Without this step, the "Formula Is" applies just to the first cell in the range
        cel.Interior.ColorIndex = ConditionalColor(cel, "Interior")     'Replace the interior (highlight) color
        cel.Font.ColorIndex = ConditionalColor(cel, "Font")    'Replace the font color
        cel.FormatConditions.Delete     'Delete all the Format Conditions for this cell
    End If
Next cel

Application.ScreenUpdating = True
End Sub

A +
🙂
 
Re : VBA : Couleur de police = couleur de cellule

Re-bonjour James007, bonjour, Modeste 🙂 et kjin,

@ kjin,

Si j'ai bien compris, à chaque saisie dans la feuille, aucune plage n'étant spécifiée, il faut :
- recherché les doublons
- appliquer la couleur de la cellule active sur les doublons si couleur en manuel
- appliquer la couleur de la mfc s'il y en a une, en vérifiant la formule et la couleur à appliquer
Restera le quart d'heure dans journée pour travailler un peu...

Là, je ne dis pas « si j’ai bien compris » mais, simplement, je ne comprends pas…

@ James007,

Comme je le présumais et l’exposais dans mon message n° 5… j’ai loupé une étape ! Ta macro fonctionne donc à merveille 🙂!

@ Modeste,

A ton tour, tu fournis une solution qui fonctionne, elle aussi, à merveille 🙂.

Je vous remercie sincèrement pour le temps que vous avez consacré afin de m’offrir, chacun, une solution au souhait que j’ai exprimé il y a... quelques minutes à peine.

Un doux dodo ! C'est mon souhait pour vous 🙂.

P. S. :
Pour tous ceux que ce genre de casse-tête intéresse, ci joint le code de Brad Yundt , qui permet à une MFC de dépendre d'une autre MFC ...
Merci encore, James007, je testerai dès que mes yeux auront acquis un peu de sommeil 😱 !..

A bientôt...
 
- 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
17
Affichages
1 K
Retour