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 SubMerci 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 SubBonjour 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 Subre-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 SubBonjour 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 SubBonjour 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)
NextEt 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 SubMerci 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 SubMagnifique !
Merci beaucoup