[RESOLU] Capturer l'évènement quand le commentaire d'une cellule est modifié

Orodreth

XLDnaute Impliqué
Bonjour à tous,

Petite question pour les experts VBA.

Est-il possible de capturer l'évènement spécifique quand le commentaire d'une cellule est modifié ?

Je connais déjà Worksheet_Change, mais pas sûr que ce soit suffisamment précis.

Il y a un Event pour ça ?

Merci d'avance,
Cordialement,
Orodreth
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Capturer l'évènement quand le commentaire d'une cellule est modifié

Bonjour.
À ma connaissance non.
Mais vous pouvez toujours vous débrouiller avec une Worksheet_SelectionChange.
Déclarez y en tête un Range et un String, et vérifier si le commentaire attaché au Range correspond toujours au String.
À la fin, faites un Set du Target dans le Range et notez son commentaire éventuel dans le String.
À combiner peut être aussi avec une Worksheet_Change pour ce qui est du contrôle d'un changement.
 
Dernière édition:

Orodreth

XLDnaute Impliqué
Re : Capturer l'évènement quand le commentaire d'une cellule est modifié

Bonjour Dranreb et merci pour votre réponse,

C'est bien ce qu'il m'avait semblé. C'est dommage.

Je vais continuer à creuser la question, si j'en apprends davantage, je tiendrais informer.

Cordialement,
Orodreth
 
G

Guest

Guest
Re : Capturer l'évènement quand le commentaire d'une cellule est modifié

Bonjour,

A mes humbles connaissances, non mais peut-être ceci pourra-t-il de donner une idée:

Mettre un commentaire en A3, sélectionner une autre cellule, changer le commentaire en A3 et voir résultat en A1:B2
Code:
Option Explicit
Private oldComment As String
Private Sub CommentChange(oldCommentText As String, newCommentText As String)
Range("A1:B1").Value = Array("Ancien commentaire: ", oldCommentText)
Range("A2:B2").Value = Array("Nouveau commentaire: ", newCommentText)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    With Range("A3")
        If Not .Comment Is Nothing Then
            If .Comment.Text <> oldComment Then
                Call CommentChange(oldComment, .Comment.Text)
                oldComment = .Comment.Text
            End If
        End If
    End With
End Sub

A+

[edit] à la bourre moi! bonjour Bernard
 

Orodreth

XLDnaute Impliqué
Re : Capturer l'évènement quand le commentaire d'une cellule est modifié

Bonjour Hasco,

Merci pour le code, très intéressant.

Malheureusement inadapté à ce que j'ai sous les yeux (potentiellement, je peux avoir un commentaire sur chaque cellule dans la plage E12:IV2000). Mais je le garde sous le coude, c'est une piste à creuser.

Encore merci :)
 

Dranreb

XLDnaute Barbatruc
Re : Capturer l'évènement quand le commentaire d'une cellule est modifié

Bonjour Hasco.

J'ai fait ça qui a l'air pas mal :
VB:
Option Explicit
Dim Cel As Range, Txt As String

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
CommentChange
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
CommentChange
Set Cel = Target
On Error Resume Next: Txt = Cel.Comment.Text: If Err Then Txt = ""
End Sub

Private Sub CommentChange()
Dim NvTxt As String
On Error Resume Next: NvTxt = Cel.Comment.Text: If Err Then NvTxt = ""
On Error GoTo 0
If NvTxt <> Txt Then
   MsgBox "- Ancien commentaire :" & vbLf & Txt & vbLf & vbLf _
        & "- Nouveau commentaire :" & vbLf & NvTxt
   Txt = NvTxt: End If
End Sub
Ajouter aussi ça devant pour le cas ou la cellule active à l'ouverture contiendrait déjà un commentaire dont il faudrait pouvoir détecter un changement :
VB:
Private Sub Worksheet_Activate()
Set Cel = ActiveCell
On Error Resume Next: Txt = Cel.Comment.Text: If Err Then Txt = ""
End Sub
 
Dernière édition:

Orodreth

XLDnaute Impliqué
Re : Capturer l'évènement quand le commentaire d'une cellule est modifié

Re,

J'ai trouvé "l'astuce" pour contourner le problème:

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name = "Feuil1" Then
        If Target.Address <> "$A$1" Then
            Dim str_Adresse As String
            str_Adresse = Sh.Range("A1").Value
            If Not (Sh.Range(str_Adresse).Comment Is Nothing) Then
                Dim str_Commentaire As String
                Dim str_Valeur As String
                str_Commentaire = Sh.Range(str_Adresse).Comment.Text
                str_Valeur = Sheets("Feuil2").Range(str_Adresse).Value
                
                If str_Commentaire <> str_Valeur Then
                    MsgBox "Comm ==> " & str_Commentaire & " / Val ==> " & str_Valeur
                End If
            End If
            Sh.Range("A1").Value = Target.Address
        End If
    End If
End Sub

Je sauvegarde l'adresse de la cellule sélectionnée dans une cellule spécifique, hors plage, et je considère les commentaires comme étant équivalents à la valeur de la même cellule sur une feuille de contrôle.

C'est un peu bourrin mais ... ça marche.

Merci à vous deux pour les pistes, ça m'a donné des idées, j'ai creusé, ça marche :)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Capturer l'évènement quand le commentaire d'une cellule est modifié

Et ma solution ? Elle va pas ??
Et puis d'abord si le traitement ne vaut que pour Feuil1, autant mettre ça, plutôt que dans ThisWorkbook, dans une Worksheet_SelectionChange de Feuil1 !
 
Dernière édition:

Orodreth

XLDnaute Impliqué
Re : [RESOLU] Capturer l'évènement quand le commentaire d'une cellule est modifié

Ca prenait la cellule active de la sélection. Ca aurait été BeforeSelectionChange, ça aurait été parfait.

Mais là, j'ai plus besoin de la sélection précédente pour pouvoir faire mes vérifications.
(mais c'est peut-être moi qui n'ai pas compris comment fonctionnait le code, auquel cas, je m'excuse)
 

Discussions similaires

Statistiques des forums

Discussions
312 202
Messages
2 086 180
Membres
103 152
dernier inscrit
Karibu