Modifier l'apparence d'une chaîne dans un commentaire

Bonjour,

j'ai personnalisé une macro de Boisgontier Jacques pour enregistrer les modifications de cellules dans les commentaires.

Le code marche très bien, j'enregistre sur une ligne le contenu de la cellule, le nom de l'utilisateur, et la date du jour.

Chaque nouvelle modification d'une cellule crée une nouvelle ligne de commentaire

Sur chaque ligne de commentaire d'une cellule, je souhaiterai mettre en gras seulement les différents contenus que la cellule a eu.

J'ai cru trouvé le code, mais quelquechose m'échappe, car ça ne fonctionne pas.

Voici le code actuel, qui met bien en gras le contenu de la cellule quand le commentaire n'a qu'une ligne,

mais qui ne fonctionne plus quand il y a plusieurs ligne, tout le commentaire se retrouve en gras.

Private Sub Worksheet_Change(ByVal Target As Range)
'--- Traitement de chaque cellule modifiée
For Each Cell In Target
    With Cell
        If .Comment Is Nothing Then
            .AddComment
            With .Comment
                .Shape.TextFrame.AutoSize = True
                .Shape.Fill.ForeColor.SchemeColor = 46
                .Shape.AutoShapeType = msoShapeRoundedRectangle
                .Shape.TextFrame.Characters.Font.Size = 10
            End With
        End If
        Comment_Length = Len(.Comment.Text)
        .Comment.Text Text:=.Comment.Text & _
        .Value & " | Modifié par : " & Environ("UserName") & _
        " | Le " & Date & vbLf
        .Comment.Shape.TextFrame.Characters(Start:=Comment_Length, Length:=Len(Cell)).Font.Bold = True
        'MsgBox Len(Cell)
        'MsgBox Comment_Length
    End With
Next
End Sub

C'est la ligne suivante qui ne fonctionne pas :

.Comment.Shape.TextFrame.Characters(Start:=Comment_Length, Length:=Len(Cell)).Font.Bold = True

Quelqu'un voit-il ce que j'ai mal codé ?

Bonjour

Pas de solution plus simple

Private Sub Worksheet_Change(ByVal Target As Range)
'--- Traitement de chaque cellule modifiée
Dim Depart As Integer
Dim Longueur As Integer
Dim I As Integer
Dim Cell As Range
Dim Tablo

  For Each Cell In Target
    With Cell
      If .Comment Is Nothing Then
        .AddComment
        With .Comment
          .Shape.TextFrame.AutoSize = True
          .Shape.Fill.ForeColor.SchemeColor = 46
          .Shape.AutoShapeType = msoShapeRoundedRectangle
          .Shape.TextFrame.Characters.Font.Size = 10
        End With
      End If
      Comment_Length = Len(.Comment.Text)
      .Comment.Text Text:=.Comment.Text & _
      .Value & " | Modifié par : " & Environ("UserName") & _
      " | Le " & Date & vbLf

      .Comment.Shape.TextFrame.Characters.Font.Bold = False
      Tablo = Split(.Comment.Text, Chr(10))
      Depart = 1
      For I = 0 To UBound(Tablo)
        If Len(Tablo(I)) > 1 Then
          Longueur = Len(Left(Tablo(I), InStr(1, Tablo(I), " |") - 1))
          .Comment.Shape.TextFrame.Characters(Start:=Depart, Length:=Longueur).Font.Bold = True
        End If
        Depart = Depart + Len(Tablo(I)) + 1
      Next I
    End With
  Next
End Sub

Bonjour Banzai64,

et merci pour ta réponse, cette solution fonctionne très bien.

Si je comprends bien ce que tu as fait :

  • Décomposition du commentaire par ligne dans un tableau.
  • Boucle qui traite chaque ligne du tableau :
+ Recherche du séparateur "|" pour délimiter la zone à mettre en gras (à gauche)

+ Mise en gras

Mais vraiment, je ne comprends pas pourquoi ce code marche, et pas mon code initial,

car c'est la même fonction qui est utilisée :

.Comment.Shape.TextFrame.Characters(Start:=Depart, Length:=Longueur).Font.Bold = True

La seule différence que je vois, c'est que dans mon code je traite seulement la nouvelle ligne,

alors que dans le tiens, tu effaces tout le Gras, pour retraiter chaque ligne.

Mais au final, quel différence pour Excel...

Aurais-tu une explication de pourquoi mon code ne fonctionne pas ?

Bonjour

Pas d'explication

En pas à pas on voit lors de la modification du commentaire, que celui-ci passe tout en gras

Pas moyen (lors de la modification) de garder la ligne précédente telle quelle et d'avoir la nouvelle ligne normale

En cherchant j'ai trouvé cette solution (que tu as bien décodée)

Si quelqu'un a une autre solution qu'il ne gène pas à la proposer, des fois on passe à côté de choses simples

Rechercher des sujets similaires à "modifier apparence chaine commentaire"