Microsoft 365 Insérer une note dans une cellule = couleur dans cette cellule

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 !

Yann71

XLDnaute Occasionnel
Bonjour le forum. Une question, est-ce qu'il est possible si j'insère une note dans une cellule, que celle-ci prenne une couleur définie.
Merci d'avance.
 
Bonjour,

Ca risque d'etre assez compliqué/lourd inutilement car il n'y a pas d'évenement VBA Worksheet qui correspond à "ajout de note".

Donc typiquement on serait obligé de surveiller SelectionChange (chaque changement de selection), sauvegarder la cellule dans une variable, et au prochain changement checker si la cellule sauvegardée a reçu un commentaire, auquel cas la colorier.

C'est un peu lourd vu que ça se lance à chaque clic. Ca donnerait quelque chose comme ceci :

VB:
Option Explicit

Private lastCell As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.CountLarge = 1 And Not (lastCell Is Nothing) Then
    If Not (lastCell.Comment Is Nothing) Then
      ' coloriage (en rouge)
      lastCell.Interior.Color = vbRed
    End If
  End If
    
  Set lastCell = Target
End Sub
 
Bonjour @Yann71, @Saboh12617,

Je plussoie à ce qu'a dit @Saboh12617 sur la lourdeur de l'évènement Worksheet_SelectionChange.

On peut utiliser une macro indépendante qu'on lancera quand on le désire. A la rigueur, on pourrait aussi l'associer à des évènements moins fréquents : sélection de la feuille concernée et ouverture du classeur, etc...
VB:
Sub CouleurNote()
Const PlageConcernee = "c:c,e:f,a5:a20"  ' les cellules concernées: ici colonnes C, E à F et plage A5:A20
Dim z, x
   Application.ScreenUpdating = False
   For Each z In ActiveSheet.Range(PlageConcernee).SpecialCells(xlCellTypeComments)
      For Each x In z: x.Comment.Shape.DrawingObject.Interior.Color = RGB(255, 240, 230): Next x
   Next z
End Sub

nb: au départ les notes ont un fond jaune clair. Après la macro, les notes de la plage concernée (cellules bleu clair) ont un fond saumon clair.
 

Pièces jointes

Bonjour Yann71, Saboh12617, mapomme,

Voyez le fichier joint et ce code dans ThisWorkbook qui tourne en arrière-plan :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.ArrierePlan" 'lance la macro
End Sub

Private Sub ArrierePlan()
Dim t, c As Range, com As Comment
Do
    t = Timer + 0.5 'temporisation de 0.5 seconde
    While Timer < t And t < 86400: DoEvents: Wend
    For Each c In ActiveSheet.UsedRange 'si le UsedRange n'est pas trop grand...
        Set com = c.Comment
        If com Is Nothing Then c.Interior.ColorIndex = xlNone Else c.Interior.Color = vbCyan
    Next c
Loop
End Sub
Remarques :

- la macro ne tourne pas quand une autre macro s'exécute, elle redémarre quand celle-ci se termine

- elle prend peu de ressources si le UsedRange n'est pas trop grand

- sur Excel il y a bien d'autres programmes qui tournent en arrière plan.

A+



https://excel-downloads.com/javascript:
 

Pièces jointes

Bonjour Yann71, Saboh12617, mapomme,

Voyez le fichier joint et ce code dans ThisWorkbook qui tourne en arrière-plan :
VB:
Private Sub Workbook_Open()
Application.OnTime 1, "ThisWorkbook.ArrierePlan" 'lance la macro
End Sub

Private Sub ArrierePlan()
Dim t, c As Range, com As Comment
Do
    t = Timer + 0.5 'temporisation de 0.5 seconde
    While Timer < t And t < 86400: DoEvents: Wend
    For Each c In ActiveSheet.UsedRange 'si le UsedRange n'est pas trop grand...
        Set com = c.Comment
        If com Is Nothing Then c.Interior.ColorIndex = xlNone Else c.Interior.Color = vbCyan
    Next c
Loop
End Sub
Remarques :

- la macro ne tourne pas quand une autre macro s'exécute, elle redémarre quand celle-ci se termine

- elle prend peu de ressources si le UsedRange n'est pas trop grand

- sur Excel il y a bien d'autres programmes qui tournent en arrière plan.

A+



https://excel-downloads.com/javascript:
Merci à vous tous pour votre aide. Je vais pouvoir avancer dans mon projet et pouvoir me consacrer aux autres tâches liés à mon projets.
Meilleures salutations
 
Avec le fichier du post #4 on ne peut pas créer de nouveaux commentaires quand la macro tourne.

Pour y parvenir le plus simple est d'utiliser un UserForm que l'on ouvre par double-clic sur la cellule.

Le code de la feuille :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
UserForm1.Show
End Sub
Le code de l'UserForm :
VB:
Private Sub CommandButton1_Click()
ActiveCell.ClearComments
If TextBox1.Text <> "" Then ActiveCell.AddComment TextBox1.Text
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim com As Comment
Set com = ActiveCell.Comment
If Not com Is Nothing Then TextBox1 = com.Text
End Sub
 

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

Discussions similaires

Réponses
2
Affichages
70
Retour