Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Changer le format des commentaires avec VBA

19 views
Skip to first unread message

Emile63

unread,
Mar 2, 2021, 4:16:47 AM3/2/21
to
Bonjour à tous,
Je souhaite changer les formats des commentaires uniquement de la zone sélectionnée (s'il y en a) mais ça n'a pas l'air de fonctionner :-(
Je vous remercie d'avance pour votre aide,
-----------------------------------------------------------------
Sub ChangerFormatsSélection ()
For Each C In ActiveSheet.UsedRange.Cells
With C
If .Comment Is Nothing Then
.Comment.Shape.OLEFormat.Object.Font.Name = "Tahoma"
.Comment.Shape.OLEFormat.Object.Font.Size = 11
.Comment.Shape.TextFrame.AutoSize = True
End If
End With
Next C
End Sub

db

unread,
Mar 2, 2021, 4:42:01 AM3/2/21
to
Le 02/03/2021 à 10:16, Emile63 a écrit :
> Bonjour à tous,
> Je souhaite changer les formats des commentaires uniquement de la zone sélectionnée (s'il y en a) mais ça n'a pas l'air de fonctionner :-(
> Je vous remercie d'avance pour votre aide,
> -----------------------------------------------------------------
> Sub ChangerFormatsSélection ()
> For Each C In ActiveSheet.UsedRange.Cells
> With C
> If .Comment Is Nothing Then

If not .Comment is Nothing ?

db

Emile63

unread,
Mar 2, 2021, 4:57:31 AM3/2/21
to
Merci DB pour ta judicieuse remarque ;)
L'idée c'est qu'il ne s'arrête pas sur les cellules (dans la sélection) qui n'ont pas de commentaires.
J'ai corrigé - If Not ... - Mais le "If" n'est pas pris en compte :(
-----------------------------------------
For Each C In Selection
If Not C.Comment Is noting Then
With C.Comment.Shape
.OLEFormat.Object.Font.Name = "Tahoma"
.OLEFormat.Object.Font.Size = 12
End With
End If
Next C

Brat'ac

unread,
Mar 2, 2021, 5:04:57 AM3/2/21
to
Emile63 avait énoncé :
Bonjour,
Pour info un site intéressant avec une page entière qui traite des
commentaires

http://boisgontierjacques.free.fr/

Emile63

unread,
Mar 2, 2021, 6:19:46 AM3/2/21
to
Bonjour Brat'ac ,
Je me suis effectivement inspiré de ce site (que j'ai dans mes favoris), mais c'est le "if" en cas de non commentaire que je ne maîtrise pas.
Sauf erreur, Boisgontier le résout avec "On Error", mon souci c'est que si je sélectionne une grande quantitée de cellules (à la souris), j'aimerais gagner du temps en évitant celles qui n'ont pas de commentaires, avec un "if"..
Je ne sais pas si je me suis bien expliqué, j'espère avoir été compréhensible. ;)
Encore merci pour votre aide,
Bonne journée

MichD

unread,
Mar 2, 2021, 6:54:21 AM3/2/21
to
Le 02/03/21 à 04:16, Emile63 a écrit :
Bonjour,

Tu adaptes le nom de l'onglet de la feuille "Feuil1" et l'adresse de la
plage où les commentaires doivent avoir un format différent
(Range("A1:A10"))

'----------------------------------------
Sub test()
Dim C As Comment, Cel As Range
With Worksheets("Feuil1")
For Each C In .Comments
Set Cel = .Range(C.Parent.Address)
If Not Intersect(Cel, .Range("A1:B10")) Is Nothing Then
With C.Shape.OLEFormat.Object
.Font.Color = vbWhite
.Font.Size = 12
.Interior.Color = vbRed
.AutoSize = True
End With
End If
Next
End With
End Sub
'----------------------------------------

MichD

MichD

unread,
Mar 2, 2021, 10:28:49 AM3/2/21
to

> Tu adaptes le nom de l'onglet de la feuille "Feuil1" et l'adresse de la
> plage où les commentaires doivent avoir un format différent
> (Range("A1:A10"))
>
> '----------------------------------------
> Sub test()
> Dim C As Comment, Cel As Range
> With Worksheets("Feuil1")
>    For Each C In .Comments
>         Set Cel = .Range(C.Parent.Address)
>         If Not Intersect(Cel, .Range("A1:B10")) Is Nothing Then
>             With C.Shape.OLEFormat.Object
>                 .Font.Color = vbWhite
>                 .Font.Size = 12
>                 .Interior.Color = vbRed
>                 .AutoSize = True
>             End With
>         End If
>     Next
> End With
> End Sub
> '----------------------------------------

Une autre version, légèrement différente :

Il arrive que le dernier caractère soit "Chr(10)" et que la commande
"Autosize" ne fasse pas le travail comme désiré à cause de ce caractère:

'-------------------------------------------
Sub test()
Dim C As Comment, G As String
With Worksheets("Feuil1")
For Each C In .Comments
If Not Intersect(.Range(C.Parent.Address), .Range("A1:B10")) Is
Nothing Then
With C.Shape.OLEFormat.Object
.Font.Color = vbWhite
.Font.Size = 12
.Interior.Color = vbRed
If Right(.Text, 1) = Chr(10) Then
G = Left(.Text, Len(.Text) - 1)
End If
C.Text G
.AutoSize = True
End With
End If
Next
End With
End Sub
'-------------------------------------------

MichD

Emile63

unread,
May 26, 2021, 6:16:00 AM5/26/21
to
Bonjour MichD,

Désolé pour le délai, j'ai dû résoudre d'autre problèmes entretemps :-)

Merci pour tes propositions!

J'ai adapté ta dernière proposition et j'ai deux questions.
Au niveau de la localisation, je n'ai pas bien compris le fonctionnement de Intersect..
Mon souhait étant de corriger l'ensemble des commentaires de la feuille active (J'ai corriger: With ActiveSheet)



Sub UniformiserCommentaires()
Dim C As Comment, G As String
With ActiveSheet
'With Worksheets("Feuil1")
For Each C In .Comments
If Not Intersect(.Range(C.Parent.Address), .Range("A1:Z1000")) Is Nothing Then ' Ici j'ai agrandi la zone de recherche..
'Ne pourrais-t'on pas faire une zone de sélection à la souris, plutôt qu' en dur dans la procédure
With C.Shape.OLEFormat.Object
.Font.Name = "Tahoma"
.Font.Color = vbBlack
.Font.Bold = True
.Font.Size = 10
.Interior.Color = RGB(255, 255, 204)
If Right(.Text, 1) = Chr(10) Then
G = Left(.Text, Len(.Text) - 1)
End If
' C.Text G ' Cette ligne plante la macro, je l'ai désactivée et la procédure s'éxécute convenablement. Mais à quoi sert-elle?
' Ne devrait-elle pas se situer juste en dessus du End if ?
.AutoSize = True
End With
End If
Next
End With
End Sub

En te souhaitant une très bonne journée,
Emile

MichD

unread,
May 26, 2021, 1:22:50 PM5/26/21
to

Bonjour,

Pour l'ensemble des commentaires d'une feuille, oublie cette ligne de
code et le End If plus bas.
'----------------
If Not Intersect(.Range(C.Parent.Address), .Range("A1:Z1000"))

end if
'----------------

Avec "Activesheet", la macro peut traiter les commentaires de n'importe
quelle feuille. Il faut alors s'assurer que la bonne feuille est active
avant de lancer la macro.

Pour la feuille entière, la macro se lirait comme suit :
'--------------------------
Sub test()
Dim C As Comment, G As String
With ActiveSheet
For Each C In .Comments
With C.Shape.OLEFormat.Object
.Font.Color = vbWhite
.Font.Size = 12
.Interior.Color = vbRed
If Right(.Text, 1) = Chr(10) Then
G = Left(.Text, Len(.Text) - 1)
End If
C.Text G
.AutoSize = True
End With
Next
End With
End Sub
'--------------------------

MichD
0 new messages