Bloquer le choix de la couleur de la police d'un cellule

Bonjour,

Comme l'indique le titre je cherche à limiter à un choix la couleur de la police (Rouge) de certaines cellules.

Attention je ne cherche pas à n'avoir que du rouge mon ma cellule mais qu'on ne puisse écrire que en rouge cette cellule.

J'ai un fichier excel de suivi de projet avec des colonnes actions, commentaires, dates... et j'aimerais que dans certaines colonnes (Exemple: actions ou commentaires) si une personne effectue un ajout ou une modification cela sera alors marqué en rouge. En effet cela permet de suivre les modifications au cours de chaque semaine car le Lundi une macro change la couleur de ces colonnes en noir.

J'espère que j'ai été clair.

Merci pour votre aide

Bonjour,

Un fichier test permettrait ... à la fois de bien comprendre ton objectif ... avec les cellules concernées ...

et de te proposer une solution adaptée à ta situation ...

Bonjour,

Malheureusement c'est un fichier professionnel donc je ne peux pas le diffuser. En revanche j'ai fait un fichier exemple.

Donc pour résumer je souhaite simplement que dans certaines colonnes je ne puisse écrire que en rouge, bien que dans ces dernières il y aura aussi du texte noir, qui serait du texte rouge mais recoloré le Lundi. La macro est dans le workbook.

Dites moi si je ne suis pas encore assez clair

26exemple.xlsm (11.92 Ko)

Bonjour,

Peut-être faut-il juste ajouter avec ce petit code sur la Feuil1 :

Private Sub Worksheet_Change(ByVal Target As Range)
Target.Font.Color = vbRed
End Sub

Re,

Ci-joint ton fichier test ...

En espèrant que cela t'aide ...

Bonjour,

Je viens d'essayer le fichier mais malheureusement ce n'est pas exactement ce que je souhaite, vu que le code recolore en rouge la cellule entière. Je voudrais seulement que le texte rajouté ou modifié dans la cellule soit rouge, pour ainsi mettre en évidence les évolutions faites chaque semaine, par rapport à des anciennes actions déjà recolorées.

Merci

bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
Target.Font.ColorIndex = 3
End Sub

Bonjour Xmenpl

Le problème c'est que je ne cherche pas à recolorer la cellule entière en rouge mais le texte que je rajoute à l'existant si il y en a. Donc pour résumer forcer l'utilisateur à écrire en rouge.

Dans ce cas, ton code ressemblera à ça :

Option Explicit
Dim stext As String

Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As String
If Target.Count > 1 Then Exit Sub
s = Target.Value
Target.Characters(Start:=Len(stext) + 1, Length:=Len(s)).Font.Color = vbRed
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
stext = Target.Value
End Sub

Mais qu'en est-il si l'utilisateur supprime le texte ?

@ oxydum

Pas tout à fait ...

Que se passe-t-il si l'utilisateur change un seul mot de la phrase déjà existante ... ???

Merci beaucoup oxyum pour ce code, il fonctionne effectivement très bien. Effectivement le seul problème est lors de la modification du texte déjà existant. Mais dans un premier temps cela me suffit amplement.

C'est toute la difficulté... s'il change un mot, un caractère, deux, trois, à différents endroits du texte... il faut alors écrire un "parser" ce qui n'est pas simple... ou bien ajouter un "drapeau" pour signaler un changement de texte ?

Est il possible de restreindre cette fonction à juste certaines cellules ?

Imaginons de B2 à C9.

Merci

Bonjour Xmenpl

Le problème c'est que je ne cherche pas à recolorer la cellule entière en rouge mais le texte que je rajoute à l'existant si il y en a. Donc pour résumer forcer l'utilisateur à écrire en rouge.

Oui je pense que tout le monde a compris !

Le code donné ne colore pas la cellule mais bien la police en rouge

As tu au moins essayé le code ?

Qu'est-ce qui te fais croire que font.color c'est l'interieur de la cellule ?

pour la cellule on aurait écrit

Target.interior

.color.index=3

.patern=xsolid

Bonjour Xmenpl

Le problème c'est que je ne cherche pas à recolorer la cellule entière en rouge mais le texte que je rajoute à l'existant si il y en a. Donc pour résumer forcer l'utilisateur à écrire en rouge.

Oui je pense que tout le monde a compris !

Le code donné ne colore pas la cellule mais bien la police en rouge

As tu au moins essayé le code ?

Qu'est-ce qui te fais croire que font.color c'est l'interieur de la cellule ?

pour la cellule on aurait écrit

Target.interior

.color.index=3

.patern=xsolid

Je me suis mal exprimé, c'est de ma faute. Je ne voulais pas dire recolorer la cellule entière mais recolorer tout le texte dans la cellule. Ce que je souhaite c'est de garder le texte existant en noir mais de ne pouvoir rajouter du texte que en rouge.

C'est d'ailleurs ce que fait le code de oxydum.

Est il possible de restreindre cette fonction à juste certaines cellules ?

Imaginons de B2 à C9.

Merci

C'est bon j'ai réussi, je ne suis encore que débutant en vba c'est pour cela que j'avais posé la question.

Bonjour à tous,

Sur la base du bon code d'Oxydum je propose cette variante qui permet de colorer en rouge une ou plusieurs lettres modifiées à l'intérieur du contenu de la cellule (et bien sûr avec les ajouts)

Ce qui devrait répondre à la remarque de James.

Et ici la vérif est limitée à la plage B2:C9

Option Explicit

Private Old_txt As String, New_txt As String
Private Old_adr As String, New_adr As String

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B2:C9")) Is Nothing Or Target.Count > 1 Then Exit Sub
    New_txt = Target.Value
    New_adr = Target.Address
    Verif
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("B2:C9")) Is Nothing Or Target.Count > 1 Then Exit Sub
    Old_txt = Target.Value
    Old_adr = Target.Address
    Verif
End Sub

Private Sub Verif()
Dim mini As Integer, i As Integer

    If Not (Old_txt = New_txt) = (Old_adr = New_adr) Then
        mini = IIf(Len(New_txt) >= Len(Old_txt), Len(Old_txt), Len(New_txt))
        For i = 1 To mini
            If Not Mid(Old_txt, i, 1) = Mid(New_txt, i, 1) Then
                Range(Old_adr).Characters(Start:=i, Length:=1).Font.Color = vbRed
            End If
        Next i
        If Len(New_txt) > Len(Old_txt) Then
            Range(Old_adr).Characters(Start:=Len(Old_txt) + 1, Length:=Len(New_txt) _
                                            - Len(Old_txt) + 1).Font.Color = vbRed
        End If
    End If
End Sub

Pierre

Merci énormément Pierre et aussi les autres !

C'est exactement ce qu'il me fallait, je vais pouvoir l'implémenter de ce pas sur mon fichier.

Je me suis mal exprimé, c'est de ma faute. Je ne voulais pas dire recolorer la cellule entière mais recolorer tout le texte dans la cellule. Ce que je souhaite c'est de garder le texte existant en noir mais de ne pouvoir rajouter du texte que en rouge.

C'est d'ailleurs ce que fait le code de oxydum.

je comprends mieux formulé ainsi si on parle de parties de texte.

C'est bon j'ai réussi, je ne suis encore que débutant en vba c'est pour cela que j'avais posé la question.

Si tu as réussi alors tu n'es pas si débutant que çà…

Re,

Merci à Pierre d'avoir fourni l'effort ...

Puisque nous en sommes à affiner tout ce qui peut l'être ...

Est-ce-que le changement de date ... donc d'un nombre ... dans la Colonne C ... doit également ' rougir ' ...???

Re,

Merci à Pierre d'avoir fourni l'effort ...

Puisque nous en sommes à affiner tout ce qui peut l'être ...

Est-ce-que le changement de date ... donc d'un nombre ... dans la Colonne C ... doit également ' rougir ' ...???

Les dates ne devront pas changer de couleurs, elles serviront juste à voir quand une action à débuté dans le suivi de projet. L'important est vraiment de pouvoir visualiser facilement les évolutions du projet chaque semaine, puis le lundi ça redevient noir pour pouvoir voir les nouvelles évolutions de la semaine qui arrive.

Rechercher des sujets similaires à "bloquer choix couleur police"