Affichage d'un texte dans une fenêtre activeX format HTML retour à la ligne

Bonsoir tous le monde !

Voici mon premier post ! Un challenge !

Après avoir lu des centaines de post, vous m'avez tous aidé à résoudre mes bobos sur Excel sans faire une demande ! Mais cette fois je cale, je ne trouve pas l'info ni sur le web, ni sur le forum.

J'ai un fichier Excel sur lequel je m'éclate (c'est pour une amie qui a une petite entreprise), et je lui créé un classeur type tableau de bord, base de données, etc.

A l'intérieur, il y a une feuille "SMS" à laquelle on accède pour envoyer des SMS prédéfini sur une feuille "LISTE - SMS". L'idée est de générer un sms envoyé via Outlook en VBA.

Je souhaitais lui afficher un aperçu du SMS qu'elle va envoyer dans une bulle. Elle pourrait choisir dans une liste des titres de message :

image

Voici un aperçu.

Or, l'affichage de ma zone de texte activeX ne se fait que sur une ligne. J'aurais souhaité type SMS. Affichage smartphone, pour un effet visuel, pouvoir le modifier (par la suite car avec le format HTML via outlook, cela reviendrait à convertir dans l'autre sens...) Prochain défi.

strbody = "Information sur la mise à jour" & " " & _
"Bonjour," & " " & " " & _
"Madame, Monsieur," & " " & _
"Nous vous remercions de nous recontacter dès que possible."

J'ai donc cela dans ma cellule sur la feuille "LISTE - MESSAGE", qui s'insère dans la bulle quand on "sélectionne demande de rappel".

Voici le code inséré dans la feuille "SMS"..

*************************************************************************************************************************************************************************

Private Sub Worksheet_Change(ByVal CelluleModifiee As Range)

' Vérifier si la modification provient de la feuille "SMS"
If Me.name = "SMS" Then

' Effacer le contenu de la zone de texte ActiveX (TxtSMS)
Me.OLEObjects("TxtSMS").Object.Value = ""

' Vérifier si la modification se trouve dans la plage F10:I10
If Not Intersect(CelluleModifiee, Me.Range("F10:I10")) Is Nothing Then

Dim wsListe As Worksheet
Set wsListe = ThisWorkbook.Sheets("LISTE - MESSAGE")

Dim titre As String
titre = CelluleModifiee.text ' Utiliser CelluleModifiee.Text au lieu de CelluleModifiee.Value

Dim ligneTitre As Variant
ligneTitre = Application.Match(titre, wsListe.Range("C:C"), 0)

If Not IsError(ligneTitre) Then
Dim texteMessage As String
texteMessage = wsListe.Cells(ligneTitre, 6).Value

' Remplacer les balises <br> par des sauts de ligne
texteMessage = Replace(texteMessage, "<br>", vbCrLf)

' Afficher le texte dans la zone de texte ActiveX (TxtSMS)
Me.OLEObjects("TxtSMS").Object.Value = texteMessage

End If
End If
End If

End Sub

*************************************************************************************************************************************************************************

Le dernier d'une longue liste, et rien n'y fait. L'affichage reste sur une seule ligne , qui sort ensuite du cadre, donc inutile.

J'ai tout essayé, et j'en viens à déduire qu'il est impossible de faire un retour à la ligne dans une zone de texte active X !

Est-ce juste ? Et ensuite est-il possible aussi d'afficher le message tel qu'envoyé (sans format HTML) ?

Merci pour vos commentaires !

Pour un début, bravo ! Soyez le bienvenu.

Attention : VB et PHP/HTML ce n'est pas la même chose (pb des sauts de ligne). En VB, Chr(10) correspond à une nouvelle ligne ; la constante correspondante est vbLf (Line feed). De même chr(13) correspond à un retour chariot ; sa constante est vbCr (Carriage Return). Les deux associés chr(10) & chr(13) s'écrivent souvent avec la constante Vbcrlf.

Vous avez utilisé une TextBox1 (objet fait pour saisir des données) au lieu d'une étiquette (Label1 = outil texte en lecture seulement). Les contrôles ActiveX de VBE ne valent pas grand-chose par rapport à ceux fournis avec VB6 ; la propriété .WordWrap, en particulier, laisse franchement à désirer.
Si vous utilisez une étiquette, vous n'aurez plus à vous préoccuper des retours à la ligne, quelle que soit la police utilisée.

La prochaine fois, vous aurez une réponse plus rapide en fournissant le fichier à corriger plutôt qu'une copie d'écran ; aussi belle soit-elle.

24solution-remi.xlsm (240.62 Ko)

Merci infiniment de votre réponse, voici le fichier allégé avec le cas.

Un problème à l'ouverture avec la feuille "TABLEAU DE BORD" non reconnue. Je ne suis pas allé plus loin.

(suite) J'ai corrigé en remplaçant Sheets("TABLEAU DE BORD").Select par Worksheets(4).Select

Le contrôle ActiveX a une propriété .WordWrap qui doit être mise à True. Elle l'est par défaut. Mais pour fonctionner il faut que la propriété .Multiline soit également à True, ce qui n'a pas beaucoup de sens à mon avis.

image

Vous êtes un génie !

Un génie un peu lessivé ce matin. Heureusement les vacances approchent.
Bon vent.

Merci infiniment! Bonne vacances 🫡

Rechercher des sujets similaires à "affichage texte fenetre activex format html retour ligne"