Récupérer les commentaires d'une ligne pour les utiliser dans un email

Bonjour à tous,

Je bloque sur ce besoin, pouvez-vous m'aider ?

Je souhaite récupérer les commentaires dans un Range et les utiliser dans mon corps de mail mais je n'y parviens pas.

La macro se déclenche au double clic sur une cellule.

Je parviens à récupérer mes autres données sans problème mais ce bout de code me pose souci : je ne parviens pas à trouver comment boucler de manière à récupérer ces commentaires et les utiliser ensuite.

Idéalement j'aurais besoin que le code crée une seule variable qui comprenne les textes des commentaires séparés par un retour chariot.

Sub test()
    Dim Plage As Range
    Dim Cel As Range

    Set Plage = Range("K" & ActiveCell.Row & ":" & "BB" & ActiveCell.Row)

    For Each Cel In Plage

        If Not Cel.Comment Is Nothing Then Cel.Comment.Shape.TextFrame.Characters.Text
        Next Cel
End Sub

Merci d'avance pour votre aide, toujours précieuse.

Bonne journée.

Lorence

bonjour,

à tester

Sub test()
    Dim Plage As Range
    Dim Cel As Range

    Set Plage = Range("K" & ActiveCell.Row & ":" & "BB" & ActiveCell.Row)

    For Each Cel In Plage

        If Not Cel.Comment Is Nothing Then commentaire = commentaire & vbNewLine & Cel.Comment.Text
    Next Cel
    MsgBox commentaire
End Sub

Bonjour h2so4,

Ca me donne une incompatibilité de type sur le &

Bonjour à tous une autre proposition

Sub test()
    Dim Plage As Range
    Dim Cel As Range
    Dim Commentaires As String ' Variable pour stocker les commentaires

    ' Spécifiez la plage de cellules
    Set Plage = Range("K" & ActiveCell.Row & ":" & "BB" & ActiveCell.Row)

    ' Initialisez la variable Commentaires
    Commentaires = ""

    ' Parcourez chaque cellule de la plage
    For Each Cel In Plage
        ' Vérifiez si la cellule a un commentaire
        If Not Cel.Comment Is Nothing Then
            ' Ajoutez le texte du commentaire à la variable Commentaires
            Commentaires = Commentaires & Cel.Comment.Text & vbCrLf
        End If
    Next Cel

    ' Affichez les commentaires dans une boîte de message (à titre d'exemple)
    MsgBox Commentaires
End Sub

Ho génial! Ca fonctionne parfaitement !

Un grand merci stepaustras !!!

Bonne journée à toi et à tous

re-bonjour Lorence,

Bonjour h2so4,

Ca me donne une incompatibilité de type sur le &

Le code que j'ai mis fonctionne tel quel chez moi.

Bien le bonjour,

Ha tiens. Pourtant nos deux versions d'Excel devraient être similaires non ?

J'ai une petite question, le code de Stepaustras fonctionne parfaitement sous vba. Par contre quand j'insère la variable Commentaires dans mon code html pour le body de mon email il sort les données sur une seule ligne dans l'email. Auriez-vous une idée pour contrer ça ? J'ai essayé tous les retours chariot que je connais, ça n'a évidemment rien changé ;)

Ensuite, vba me prend bien les notes de cellules, mais pas les commentaires, hors j'ai les deux formats sur mon fichier. Est ce qu'une autre formulation me permettrait de prendre également les commentaires ?

Si ce n'est pas possible je peux demander à mes collègues de ne plus utiliser que le format note pour que tous soit pris en compte par la macro. Car sur Excel on peut convertir les notes en commentaires, mais pas l'inverse.

Dans tous les cas excellente journée à vous,

Lorence

bonjour,

Par contre quand j'insère la variable Commentaires dans mon code html pour le body de mon email il sort les données sur une seule ligne dans l'email. Auriez-vous une idée pour contrer ça ? J'ai essayé tous les retours chariot que je connais, ça n'a évidemment rien changé ;)

La mise en page d'un mail HTML se fait en utilisant des balises HTML. Entourer le texte des balises <P> </P> pour définir un paragraphe, utiliser la balise <BR> pour indiquer un retour à la ligne

Sub test()
    Dim Plage As Range
    Dim Cel As Range

    Set Plage = Range("K" & ActiveCell.Row & ":" & "BB" & ActiveCell.Row)

    For Each Cel In Plage

        If Not Cel.Comment Is Nothing Then 
        commentaire = commentaire & "<P>" & Cel.Comment.Text & "</P>"
'ou 
        'commentaire = commentaire & cel.comment.text & "<BR>"
        End If
    Next Cel
    MsgBox commentaire
End Sub

Bonjour a tous,

Un autre exemple

Sub test()
    Dim Plage As Range
    Dim Cel As Range
    Dim Commentaires As String ' Variable pour stocker les commentaires

    ' Spécifiez la plage de cellules
    Set Plage = Range("K" & ActiveCell.Row & ":" & "BB" & ActiveCell.Row)

    ' Initialisez la variable Commentaires
    Commentaires = ""

    ' Parcourez chaque cellule de la plage
    For Each Cel In Plage
        ' Vérifiez si la cellule a un commentaire
        If Not Cel.Comment Is Nothing Then
            ' Ajoutez le texte du commentaire à la variable Commentaires
            Commentaires = Commentaires & Cel.Comment.Text & "||" ' Utilisation d'un caractère spécial (||) pour représenter un retour à la ligne
        End If
    Next Cel

    ' Remplacez le caractère spécial (||) par un retour à la ligne dans le texte final
    Commentaires = Replace(Commentaires, "||", vbCrLf)

    ' Affichez les commentaires dans une boîte de message (à titre d'exemple)
    MsgBox Commentaires
End Sub

Bonjour Stepaustras,

Bonjour H2So4,

J'ai testé vos propositions.

Stepaustras j'ai le même résultat que précédemment (commentaires sur une ligne).

H2So4 le résultat est le suivant :

Si le commentaire de mes cellules sont sur une seule ligne ça fonctionne : les commentaires s'affichent à la ligne dans mon body

Si les commentaires de mes cellules sont sur deux lignes, ces deux lignes se retrouvent sur une seule ligne, puis le commentaire suivant va bien à la ligne.

Est ce que je dois alors construire mes commentaires de cellule différemment ? Ajouter une balise directement ici ?

Voici comment mes commentaires se créent (que je répète une colonne sur deux de K à BB) :

Set sWkRE = Worksheets("Relevé TM")
tTab = sWkRE.Range("A2:N" & sWkRE.Range("B" & Rows.Count).End(xlUp).Row).Value

For X = 4 To Range("B" & Rows.Count).End(xlUp).Row
    sAM = Range("B" & X).Value
    sCl = Range("C" & X).Value
    Sdate = Range("K2").Value
    If Not Range("C" & X).Value Like "*Incohérences*" Or Not Range("C" & X).Value Like "*Correction*" Then Range("K" & X).ClearComments
    Set rCel = Range("K" & X)
    sComm = ""
For Y = 1 To UBound(tTab, 1)
        If tTab(Y, 12) = sAM And sCl = tTab(Y, 7) And Sdate = tTab(Y, 14) Then _
            sComm = sComm & IIf(sComm = "", "", Chr(10)) & tTab(Y, 3) & " - " & tTab(Y, 13) & " titres en statut " & tTab(Y, 9) & " sur le portail de " & tTab(Y, 8) & tTab(Y, 10)
Next
    If sComm <> "" Then Call CommCHGT(rCel, sComm)
Next

Et ma mise en forme de commentaire :

Public Sub CommCHGT(ByVal rCel As Range, sComm$)

If rCel.Comment Is Nothing Then rCel.AddComment
With rCel.Comment
    .Shape.AutoShapeType = msoShapeRoundedRectangle
    .Shape.TextFrame.Characters.Font.Name = "Century Gothic"
    .Shape.TextFrame.Characters.Font.Size = 11
    .Shape.TextFrame.Characters.Font.Bold = True
    .Shape.TextFrame.Characters.Font.Color = RGB(255, 255, 255)
    .Shape.Line.ForeColor.RGB = RGB(0, 0, 0)
    .Shape.Fill.ForeColor.RGB = RGB(0, 128, 255)
    .Text sComm
    .Shape.TextFrame.AutoSize = True
End With

End Sub

Merci beaucoup pour votre aide et d'avance bonne semaine à vous deux.

Lorence

bonjour,

pour tenir compte du passage à la ligne qui se trouve dans un commentaire, voici

Sub test()
    Dim Plage As Range
    Dim Cel As Range

    Set Plage = Range("K" & ActiveCell.Row & ":" & "BB" & ActiveCell.Row)

    For Each Cel In Plage
        If Not Cel.Comment Is Nothing Then
        commentaire = commentaire & Replace(Cel.Comment.Text, vbLf, "<BR>") & "<BR>"
        End If
    Next Cel
    MsgBox commentaire
End Sub

Magnifique !

Merci beaucoup

Rechercher des sujets similaires à "recuperer commentaires ligne utiliser email"