Autres Modifier couleurs commentaires mais je ne me rappelle plus

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 !

un internaute

XLDnaute Impliqué
Bonjour le forum
Je suis sous Excel 2003
J'ai des commentaires dans macro ci-dessous
Qui donne ceci

1677073212675.png


Que je voudrais mettre ainsi

1677073264842.png


VB:
Sub InsertCommentaires()
 Dim cmt As Comment, Ligne As Long, TotMois As String, DebMois As String, FinMois As String
    Set cmt = Selection.AddComment
     'ActiveCell.Comment.Visible = True
    With cmt.Shape
      .Width = ActiveCell.Width
      .Height = ActiveCell.Height
      .Left = ActiveCell.Left
      .Top = ActiveCell.Top
      '.Fill.ForeColor.SchemeColor = 10
      With .TextFrame
       .Characters.Font.Name = "Arial"                    'Police
       .Characters.Font.FontStyle = "Gras italique"       'Style
       .Characters.Font.Size = 10.5                       'Taille police
       .Characters.Font.ColorIndex = 5                    'Couleur commentaires bleu
       .HorizontalAlignment = xlCenter                    'Centrer texte horizontalement
       DebMois = Range("F2").Text
       FinMois = Range("F3").Text
       TotMois = IIf(Month(Range("F2")) = Month(ActiveCell.Offset(, 6)), Range("F4").Text, Range("F6").Text)
       .Characters.Text = "Frais établis ce jour: Période du: " & DebMois & " au " & FinMois & " Montant: " & TotMois
       .Characters(36, Len(DebMois)).Font.ColorIndex = 2                                                                'blanc à partir du 35éme caractère,2 caractères
       .Characters(36 + Len(DebMois) + 4, Len(FinMois)).Font.ColorIndex = 2                                             'blanc à partir du 50éme caractère,2 caractères
       .Characters(36 + Len(DebMois) + Len(FinMois) + 13, Len(TotMois)).Font.ColorIndex = 2                             'blanc à partir du 71éme caractère,3 caractères.
          
      End With
      .Fill.ForeColor.SchemeColor = 10                    'Couleur fond commentaires
      .Line.Weight = 1.5                                  'Epaisseur bordure Commentaires
      .Line.ForeColor.SchemeColor = 12                    'Couleur bordure
       ActiveCell.Comment.Visible = True                  'Afficher/Masquer les commentaires
    End With
    Application.EnableEvents = True
    End Sub

Pas fait depuis ...un certain temps!!!!
Merci pour vos éventuelles réponses
 
VB:
Sub InsertCommentaires()
 Dim cmt As Comment, Ligne As Long, TotMois As String, DebMois As String, FinMois As String
    Set cmt = Selection.AddComment
     'ActiveCell.Comment.Visible = True
    With cmt.Shape
      .Width = ActiveCell.Width
      .Height = ActiveCell.Height
      .Left = ActiveCell.Left
      .Top = ActiveCell.Top
      '.Fill.ForeColor.SchemeColor = 10
      With .TextFrame
       .Characters.Font.Name = "Arial"                    'Police
       .Characters.Font.FontStyle = "Gras italique"       'Style
       .Characters.Font.Size = 10.5                       'Taille police
       .Characters.Font.ColorIndex = 1  '5                'Couleur commentaires bleu = 5 Noir = 1
       .HorizontalAlignment = xlCenter                    'Centrer texte horizontalement
       DebMois = Range("F2").Text
       FinMois = Range("F3").Text
       TotMois = IIf(Month(Range("F2")) = Month(ActiveCell.Offset(, 6)), Range("F4").Text, Range("F6").Text)
       .Characters.Text = "Frais établis ce jour: Période du: " & DebMois & " au " & FinMois & " Montant: " & TotMois
       .Characters(36, Len(DebMois)).Font.ColorIndex = 3  '2                                                            'blanc à partir du 35éme caractère,2 caractères
       .Characters(36 + Len(DebMois) + 4, Len(FinMois)).Font.ColorIndex = 3   '2                                        'blanc à partir du 50éme caractère,2 caractères
       .Characters(36 + Len(DebMois) + Len(FinMois) + 13, Len(TotMois)).Font.ColorIndex = 3  '2                         'blanc à partir du 71éme caractère,3 caractères.
          
      End With
      .Fill.ForeColor.SchemeColor = 5                     'Couleur fond commentaires
      .Line.Weight = 3    '1.5                            'Epaisseur bordure Commentaires
      .Line.ForeColor.SchemeColor = 25     '12            'Couleur bordure
       ActiveCell.Comment.Visible = True                  'Afficher/Masquer les commentaires
    End With
    End Sub
Bonne journée à tous



Bonjour le forum
Voilà
 

Pièces jointes

  • 3.JPG
    3.JPG
    18.5 KB · Affichages: 24
Bonsoir,

Voilà un fil intéressant.
Je me posais la même question. Comment diable manipuler ces tristes commentaires pour les rendre moins austères ?
Je voulais, dans un premier temps, mettre un un segment de chaîne en exergue. Celui-ci était un mot délimité par des astérisques (*** zaza ***) et je voulais que les astérisques soient jaunes et le texte vert. Je cherche un peu partout et je ne trouve rien et le problème était trop ardu pour moi pour le résoudre. Je demande alors de l'aide à ChatGPT. Il m'envoie une première macro qui ne marchait pas, je lui explique où ça plante, il revoie le problème et ainsi de suite, jusqu'au moment où ça marche. Magnifique ! Un commentaire à fond gris, avec un texte blanc et un bout de texte joliment mis en exergue. Il avait ainsi réglé un problème, car pour un autre type de commentaire je voulais tout simplement mettre en exergue un bout de chaîne, mais tout en haut, en début de commentaire : "x polices", x étant un nombre qui peut éventuellement changer. Et là, c'est la galère. Rebelote, ChatGPT, discussions, café, clope, "rediscussion" et... solution !

La péroraison avec l'humanoïde :
Je lui envoie ça :

VB:
De mon côté j'ai rusé.

Pour résoudre le problème, 'ai repris ta grosse macro qui marche bien :

Sub ColorierTexteDansCommentaire( _
        ByVal c As Range, _
        ByVal bloc As String, _
        ByVal texteMilieu As String, _
        ByVal colGauche As Long, _
        ByVal colMilieu As Long, _
        ByVal colDroite As Long, _
        Optional ByVal taille As Single = 8)
    '- c           : la cellule qui contient le commentaire
    '- bloc        : un segment de chaîne délimité à gauche et à droite par des fragments de chaîne identiques
    '                par ex. : ** zaza **
    '- texteMilieu : le sement de chaîne encadré (zaza dans l'exemple ci-dessus)
    '- colGauche   : le code couleur (Long) du délimitateur gauche
    '- colMilieu   : le code couleur (Long) du segment de chaîne encadré (zaza)
    '- colDroite   : le code couleur (Long) du délimitateur droit
    'ChatGPT

    Dim com As Comment
    Dim txt As String
    Dim posBloc As Long
    Dim posMilieuDansBloc As Long
    Dim leftLen As Long, midLen As Long, rightLen As Long

    ' Récupérer la note (ancien commentaire)
    Set com = c.Comment
    If com Is Nothing Then
        MsgBox "La cellule " & c.Address(False, False) & " ne contient pas de note (ancien commentaire).", vbInformation
        Exit Sub
    End If

    txt = com.Text

    ' Position globale du bloc dans le commentaire
    posBloc = InStr(1, txt, bloc, vbTextCompare)
    If posBloc = 0 Then
        MsgBox "Le bloc '" & bloc & "' n'a pas été trouvé dans le commentaire de " & c.Address(False, False) & ".", vbInformation
        Exit Sub
    End If

    ' Position du texte du milieu DANS le bloc
    posMilieuDansBloc = InStr(1, bloc, texteMilieu, vbTextCompare)
    If posMilieuDansBloc = 0 Then
        MsgBox "Le texte milieu '" & texteMilieu & "' n'a pas été trouvé dans le bloc '" & bloc & "'.", vbInformation
        Exit Sub
    End If

    midLen = Len(texteMilieu)
    leftLen = posMilieuDansBloc - 1
    rightLen = Len(bloc) - leftLen - midLen

    ' 1) Normaliser tout le commentaire (évite l’erreur 1004 sur la taille)
    With com.Shape.TextFrame.Characters.Font
        .SIZE = taille
        .Color = vbWhite
        .Bold = True
    End With

    ' 2) Partie gauche (avant texte milieu)
    If leftLen > 0 Then
        With com.Shape.TextFrame.Characters(posBloc, leftLen).Font
            .SIZE = taille
            .Bold = True
            .Color = colGauche
        End With
    End If

    ' 3) Texte du milieu
    With com.Shape.TextFrame.Characters(posBloc + leftLen, midLen).Font
        .SIZE = taille
        .Bold = True
        .Color = colMilieu
    End With

    ' 4) Partie droite (après texte milieu)
    If rightLen > 0 Then
        With com.Shape.TextFrame.Characters(posBloc + leftLen + midLen, rightLen).Font
            .SIZE = taille
            .Bold = True
            .Color = colDroite
        End With
    End If
End Sub

Et dans une macro j'ai écrit ceci :

    '******************** MEF du commentaire de la cellule "B11" ********************
    '                               (une vraie purge)
    np = CStr(n) & " polices"
    nouveauTexte = "." & np & "." & vbCrLf & _
                   "Pour parcourir cette liste interminable, on peut utiliser la molette de la souris"
    com.Text Text:=nouveauTexte 'modification du commentaire de la cellule "B11"

    With com.Shape.TextFrame.Characters.Font
        .SIZE = 9
        .Color = vbWhite
        .Bold = True
    End With
    
    ColorierTexteDansCommentaire [B11], "." & np & ".", np, 7434613, 16773593, 7434613 'gris | bleu ciel | gris
    
    With com.Shape.TextFrame
        .Characters(1, 1).Font.SIZE = 1   'pour ne pas voir le "." à gauche
        .Characters(2, 12).Font.SIZE = 12 'taille de la police du texte entre les 2 "."
        .Characters(13, 1).Font.SIZE = 1  'pour ne pas voir le "." à droite
    End With
    '********************************************************************************

Je me suis rendu compte que, curieusement, les couleurs dans les commentaires n'étaient pas forcément respectées. Je m'explique :
La couleur de fond du commentaire est grise.
Je donne aux "." la même tonalité de gris que celle de la couleur de fond du commentaire (mëme code Long) pour qu'on ne les voit pas. Et bien bizarrement ils sont un tout petit peu plus clairs que le gris de la couleur de fond du commentaire, alors que si, dans une cellule, je fais la même opération (cellule grise avec un point du même gris), le point devient invisible.
Pour pallier ce problème, j'ai réduit au maximum la taille des points, autrement dit à 1.
Le résultat est maintenant parfait.

Il me répond ceci :

Franchement, ta ruse est très bien pensée 😄
Le combo :


  • ajout de . comme délimiteurs invisibles,
  • macro de coloration par bloc,
  • puis réduction de la taille des . à 1 pt

👉 c’est du grand art “anti-bugs-d’Excel”.




🔍 Pourquoi le gris n’est pas exactement le même dans le commentaire​


Ce que tu constates est logique (même si pas intuitif) :


Même code couleur Long
→ même valeur numérique
→ mais rendu visuel légèrement différent entre :

  • fond du commentaire (Shape.Fill.ForeColor)
  • texte du commentaire (Characters.Font.Color).

Les raisons possibles (cumulables) :


  1. Thèmes & palettes
    • La couleur de fond du commentaire est souvent issue d’un thème (.Fill.ForeColor.ObjectThemeColor + .TintAndShade),
      alors que ton texte utilise un RGB brut ou une couleur palette.
    • Même si le Long est identique, le rendu peut être influencé par :
      • le mode de rendu GDI/GDI+,
      • l’anti-aliasing sur le texte.
  2. Anti-aliasing / “lissage” du texte
    • Le fond du commentaire est un aplat.
    • Le texte, lui, est lissé (sub-pixel, ClearType, etc.), surtout sur des couleurs claires.
    • Sur un fond gris, un texte gris “identique” donne souvent l’impression d’être un poil plus clair ou plus foncé.
  3. Transparence ou motif
    • Le commentaire peut avoir une transparence, un style, une ombre portée…
    • Le texte, lui, est opaque.

Bref, tu n’es pas fou : même couleur → rendu légèrement différent, surtout sur des tons pastels.




✅ Ton contournement : réduire la taille à 1​


C’est exactement ce que j’aurais conseillé pour des “marqueurs” de texte qu’on veut vraiment invisibles mais qu’on a besoin de garder comme repères internes :



<span>With com.Shape.TextFrame<br> .Characters(1, 1).Font.Size = 1 ' "." gauche quasi invisible<br> .Characters(2, 12).Font.Size = 12 ' texte principal<br> .Characters(13, 1).Font.Size = 1 ' "." droite quasi invisible<br>End With<br></span>

Visuellement :


  • les points sont tellement petits qu’ils disparaissent à l’œil,
  • mais ils existent toujours pour tes calculs de positions.

👍 C’est propre et efficace.




Si un jour tu veux aller encore plus loin, on peut imaginer :


  • une version de ColorierTexteDansCommentaire qui ne repose plus sur des délimiteurs visibles, mais sur des positions calculées (par exemple “premiers n caractères”, ou “jusqu’au premier retour à la ligne”, etc.),
  • ou une version qui supporte plusieurs segments à colorier dans le même commentaire avec une petite “mini-syntaxe”.

Mais là, clairement, ta solution est déjà très bien ficelée.

Je reconnais que c'est étonnant.
Bref, je ne sais pas si j'ai réinventé la roue et que quelqu'un me dise que je me suis compliqué pour rien parce qu'il y a plus simple pour le même résultat, mais en tout cas, ça marche.
 

Pièces jointes

- 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
Retour