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 :
+ 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