Macro VBA pour harmoniser le format des commentaires d’une feuille Excel

Bonjour,

Tout d’abord, mille mercis par avance à ceux qui se pencheront sur ma question.

Mon souhait est d’harmoniser le formatage de tous les commentaires d’une feuille Excel (police et alignement du texte, couleur de fond et encadrement, dimension et position).

Voici mon code :

Sub zHarmoFormatCommentaires()
   Dim commentaire As comment
   ' But : harmoniser le format de tous les commentaires de la feuille active
   Dim haut As Single, gauche As Single, hauteur As Single, largeur As Single
   For Each commentaire In ActiveSheet.Comments
      With commentaire
         '1°) coordonnées spatiales de la cellule mère
         With .Parent.MergeArea
            haut = .Top: gauche = .Left: hauteur = .Height: largeur = .Width
         End With
         '2°) mise en forme
         With .Shape
            'a) fond vert pâle
            With .Fill
               .ForeColor.RGB = RGB(224, 255, 192): .Solid: .Transparency = 0.15
            End With
            'b) cadre gris clair
            With .Line
               .ForeColor.RGB = RGB(128, 128, 128): .Weight = 0.5
            End With
            With .TextFrame
               'c) police Calibri 9 pt
               With .Characters.Font
                  .Name = "Calibri": .Size = 9: .ColorIndex = 0: .Bold = False
               End With
               'd) alignement à droite et en haut
               .HorizontalAlignment = xlRight: .VerticalAlignment = xlTop
               'e) taille ajustée au texte
               .AutoSize = True
            End With
            '3°) position relativement à la cellule mère
            .Top = haut + hauteur / 2: .Left = gauche + largeur + hauteur / 2
         End With
      End With
   Next commentaire
   MsgBox "C'est terminé !"
 End Sub

Deux erreurs surviennent :

1°)

erreur 445

pour :

With commentaire.Shape.Fill
   ...
End with

2°)

erreur 1004

pour :

With commentaire.Shape.TextFrame
   ...
End With

Seule la partie finale fonctionne :

With commentaire.Shape
   ...
   '3°) position relativement à la cellule mère
   .Top = haut + hauteur / 2: .Left = gauche + largeur + hauteur / 2
End With

Avant de rédiger cette question, j’ai parcouru le forum et lu plusieurs discussions qui traitent de ce sujet ; mais les différentes solutions exposées – et décrites comme fonctionnelles – aboutissent toutes, dans mon cas, aux erreurs citées plus haut.

Quant à la fonction d’enregistrement des macros, elle ne permet pas d’écrire ce type d’action.

Précision : cette macro fonctionnait sur Excel 2011 (v 14.1.0) ; mes soucis sont apparus il y a quelques années avec Excel 16.39 (sur Mac avec macOS entre 10.13 High Sierra et 15.4 Sequoia).

Très bonne journée à tous...

Bonsoir

Ne serait-ce pas plus simple de partager directement le fichier concerné, puisque vous l’avez déjà sous la main ? Cela permettrait une intervention beaucoup plus rapide et précise.il est difficile, voire impossible, d’identifier un problème et d’y apporter une solution en se basant uniquement sur le code. Je suis sûr qu’avec un fichier, vous recevrez des réponses encore plus pertinentes.

Slts

Bonsoir,

je suis sous windows avec excel 2021, j'ai ouvert un nouveau classeur, j'y ai mis 2 commentaires dont j'ai modifié la police, la taille :

image

et j'ai lancé votre code dont j'ai fait un copier/coller dans un module standard et voici ce que j'obtiens :

image

Je dirais donc que chez moi cela fonctionne...

@ bientôt

LouReeD

Bonsoir, tDuq, LouReed

Effectivement je n'avais pas tester, mais pour le fun j'ai essayé et chez moi c'est aussi OK

forum

Slts

Oulala... merci beaucoup pour vos interventions si rapides !

Je joins un classeur test :

Quant à vos commentaires, ils montrent en effet que le souci vient sans doute de la version Mac d’Excel...

J’espère donc qu’un autre utilisateur Mac aura pu résoudre la difficulté.

Bonne soirée !

Bonsoir,

sans erreur :

image

@ bientôt

LouReeD

Bonsoir,

peut-être faut-il mettre moins de With ! A essayer !

Option Explicit
Sub zHarmoFormatCommentaires()
    Dim Commentaire As Comment
    ' But : harmoniser le format de tous les commentaires de la feuille active
    Dim haut As Single, gauche As Single, hauteur As Single, largeur As Single
    For Each Commentaire In ActiveSheet.Comments
        With Commentaire.Parent.MergeArea
            haut = .Top
            gauche = .Left
            hauteur = .Height
            largeur = .Width
        End With
        With Commentaire
            .Shape.Fill.ForeColor.RGB = RGB(224, 255, 192)
            .Shape.Fill.Solid
            .Shape.Fill.Transparency = 0.15
            .Shape.Line.ForeColor.RGB = RGB(128, 128, 128)
            .Shape.Line.Weight = 0.5
            .Shape.TextFrame.Characters.Font.Name = "Calibri"
            .Shape.TextFrame.Characters.Font.Size = 9
            .Shape.TextFrame.Characters.Font.ColorIndex = 0
            .Shape.TextFrame.Characters.Font.Bold = False
            .Shape.TextFrame.HorizontalAlignment = xlRight
            .Shape.TextFrame.VerticalAlignment = xlTop
            .Shape.TextFrame.AutoSize = True
            .Shape.Top = haut + hauteur / 2
            .Shape.Left = gauche + largeur + hauteur / 2
        End With
    Next Commentaire
    MsgBox "C'est terminé !"
 End Sub

@ bientôt

LouReeD

Merci beaucoup, LouReeD, pour cette proposition que je viens d’essayer.

Helas j’ai toujours les 2 mêmes erreurs :

  • « Erreur d’exécution « 445 » : cet objet ne gère pas cette action » pour tous les .Shape.Fill et pour tous les .Shape.Line,
  • « Erreur d’exécution « 1004 » : la méthode « Textframe » de l’objet « Shape » a échoué » pour tous les .Shape.TextFrame.

Quant à .Shape.Top et .Shape.Left, ils continuent à fonctionner.

Bizarre, bizarre !!!

Bonjour,

je dirais dernier essai pour moi parce qu'après je ne sais plus quoi dire...
Je vous propose ce code qui affiche tous les commentaires avant de travailler dessus :

Option Explicit
Sub zHarmoFormatCommentaires()
    Dim Commentaire As Comment
    ' But : harmoniser le format de tous les commentaires de la feuille active
    Dim haut As Single, gauche As Single, hauteur As Single, largeur As Single
    ' on arrête la mise à jour de l'écran
    Application.ScreenUpdating = False
    ' peut-être faut-il les afficher avant de les modifier
    Application.DisplayCommentIndicator = xlCommentAndIndicator
    For Each Commentaire In ActiveSheet.Comments
        With Commentaire.Parent.MergeArea
            haut = .Top
            gauche = .Left
            hauteur = .Height
            largeur = .Width
        End With
        With Commentaire
            .Shape.Fill.ForeColor.RGB = RGB(224, 255, 192)
            .Shape.Fill.Solid
            .Shape.Fill.Transparency = 0.15
            .Shape.Line.ForeColor.RGB = RGB(128, 128, 128)
            .Shape.Line.Weight = 0.5
            .Shape.TextFrame.Characters.Font.Name = "Calibri"
            .Shape.TextFrame.Characters.Font.Size = 9
            .Shape.TextFrame.Characters.Font.ColorIndex = 0
            .Shape.TextFrame.Characters.Font.Bold = False
            .Shape.TextFrame.HorizontalAlignment = xlRight
            .Shape.TextFrame.VerticalAlignment = xlTop
            .Shape.TextFrame.AutoSize = True
            .Shape.Top = haut + hauteur / 2
            .Shape.Left = gauche + largeur + hauteur / 2
        End With
    Next Commentaire
    ' et puis on les masque
    Application.DisplayCommentIndicator = xlCommentIndicatorOnly
    MsgBox "C'est terminé !"
 End Sub

@ bientôt

LouReeD

Bonjour,

En lisant votre demande

« Erreur d’exécution « 445 » : cet objet ne gère pas cette action » pour tous les .Shape.Fill et pour tous les .Shape.Line,

Faites un peu le test en rajoutant cette ligne juste en dessous de With .Fill

.Visible = msoTrue

Crdlt

Bonjour à tous,

selon la doc Shape.TextFrame est une propriété.
Le message d'erreur parle d'une méthode, à se demander si VBA Mac connait cette propriété.
Même raisonnement pour Shape.Fill
https://learn.microsoft.com/fr-fr/office/vba/api/Excel.Shape.TextFrame
eric

Mille mercis LouReeD pour cette nouvelle tentative.

Malheureusement, pas d’effet particulier (dans un projet précédent, j’avais également essayé cela).

Quoi qu’il en soit, c’est vraiment sympa d’être soutenu par la réflexion des autres Excellents-Pratiqueurs !

Très bonne soirée...

Dan, il va falloir qu'on se débarrasse de notre cape d'invisibilité

Effectivement eriic...

Bonsoir,

Ils vous arrivent de me la prêter quelque fois, alors chacun son tour !

Merci du retour, mais avez-vous essayé les autres propositions ? Vous savez ici, avec l'âge il y a de plus en plus de susceptibles !

je plaisante !

@ bientôt

LouReeD

Bonsoir Dan, eriiic et LouReeD,

Tout d’abord, toutes mes excuses pour mon inattention !

Je ne sais pas pourquoi, mais je me suis focalisé sur le message de LouReeD, sans voir ceux que vous, Dan et eriiic, m’aviez postés juste entre-temps ! J’avoue que vos trois messages suivants pour me tirer l’oreille ont été les bienvenus : ce sont eux qui m’ont fait découvrir ce que vous voudrez bien considérer comme une étourderie, et non comme une impolitesse !!!

Sans rire, je suis vraiment touché par votre intérêt pour ma question et par diverses suggestions !

Conformément à la proposition de Dan, j’ai enrichi mon code avec :

            With .Fill
               .Visible = msoTrue
               .ForeColor.RGB = RGB(224, 255, 192): .Solid: .Transparency = 0.15
            End With

Malheureusement, toujours la même erreur...

Et en regardant attentivement la page cité par eriiic, je découvre effectivement la bizarrerie entre Propriété et Méthode...
Mais qu’en déduire, ça dépasse mes capacités !

De mon côté j’ai essayé d’utiliser TextFrame2 qui, bien que suggéré par l’éditeur, aboutit lui-aussi à une erreur :

ecran imac 2025 04 16 a 22 57 31 ecran imac 2025 04 16 a 22 58 15

Encore une fois, toutes mes excuses pour ma lenteur à la détente et merci beaucoup pour vos aides particulièrement réconfortantes !

Très bonne soirée,

Bonsoir,

au vu de cette remarque : "Cet exemple provoque du texte dans le cadre de texte dans la forme pour être justifié. Si cette forme ne possède aucun cadre, l'exemple échoue."

Avez vous un cadre sur vos commentaires ? Si oui mais peut-être non, peut-être faut-il forcer un cadre...

@ bientôt

LouReeD

Re

Lorsque vous avez le message d'erreur, si vous cliquez sur débogage, quelle est la ligne surlignée en jaune ?

Faites aussi un essai en mettant cette instruction juste en dessous de .visible = msotrue

.select

NB : une fois le commentaire sélectionné manuellement (donc sans utiliser VBA), si vous faites un clic droite vous avez bien une fenêtre qui permet de modifier la couleur de fond ?


EDIT : en regardant un peu sur la toile, je trouve ces liens
--> https://answers.microsoft.com/fr-fr/msoffice/forum/all/modifier-le-format-de-commentaire/96d488b0-da...
--> https://answers.microsoft.com/en-us/msoffice/forum/all/unable-to-format-comment-object-in-excel/222a...

Bonjour à tous,

j'aimerai éclaircir et être sûr.
Peux-tu faire F2 pour afficher l'explorateur d'objets.
En haut à gauche tu filtres avec Shape puis tu sélectionnes les listes comme sur l'image.
Tu dois pouvoir arriver à Property TextFrame, sinon c'est qu'elle n'existe pas chez toi.

shape textframe

eric

Bonjour à tous les 3 !

Vous êtes beaucoup plus réactifs que moi... j'en suis un peu honteux...

Pour répondre à LouReeD :

Non, je n'ai pas de cadre dans mes commentaires (ou alors je l'ignore !) ; ils sont tous créés en utilisant dans le menu la commande "Insérer / Nouveau commentaire" puis remplis avec du texte sans fioritures autre qu'une mise en gras ou un soulignement :

ecran 1

Pour répondre à Dan :

  • L'erreur « 445 : cet objet ne gère pas cette action » apparait avec l'instruction With .Fill (et bien sûr l'instruction With .Line lorsque le bloc With .Fill est commenté) :
ecran 2
  • L'erreur « 1004 : la méthode TextFrame de l'objet Shape a échoué » apparait avec l'instruction With .TextFrame :
ecran 3

Pour répondre à eriiic :

La copie d'écran ci-dessous semble parfaitement identique à celle postée dans la suggestion... si ce n'est un petit caractère spécial qui s'invite bizarrement au milieu de la dernière ligne :

ecran 4 ecran 5

Pour vous répondre à tous les 3 : un très grand merci pour votre opiniâtreté !

Excellente soirée...

Rechercher des sujets similaires à "macro vba harmoniser format commentaires feuille"