Zone de texte (Shapes.AddTextbox.textFrame)

Bonjour,

À l'issue d'un traitement, j'affiche une synthèse dans une zone de texte:

capture 1055

J'aimerais pour une question de lisibilité (c'est de la cosmétique pure...), j'aimerais modifier la couleur de police de chaque ligne de la façon suivante:

capture 1056

J'ai bien trouvé une commande du type:

MaTextBox.TextFrame.Characters (Start:=24, Length:=5).Font

Bon déjà j'ai beaucoup de mal entre "TextFrame2.TextRange" et "TextRange2" qui est documenté (Membres TextRange2 (Office)) tandis que "TestRange" visiblement non alors que c'est ce qu'affiche l'éditeur...

Le problème c'est qu'après avoir parcouru tous les membres de TextRange2 (j'ai bien tous les membres de "TextRange2" dans "TextFrame2.TextRange"), je ne trouve pas le moyen de compter le nombre de caractères de la première ligne pour délimiter le nombre de caractères et donc pouvoir lui appliquer une couleur de police.
J'imagine que c'est parce que le texte d'une zone de texte n'est qu'une seule ligne séparée par des retour chariot.
Si je fais une rechercher sur les retour chariot, je ne sais pas "capter" leur position.
Bref, vu les pointures en vba excel qui gravitent sur le Forum, je me demandais si vous aviez une astuce.

Evidemment, le but est d'enregistrer le fichier excel avec la zone de texte donc le userForm est à exclure.

Quant à le renseigner dans des cellules, vu le nombre de colonnes et de lignes, ça rend la chose totalement illisible puisqu'en fin de UsedRange...

Merci d'avance pour vos retours et vos astuces.

Bonne fin d'après-midi.

Cordialement.

Bonjour,

Excusez moi pour la question un peu bete, mais ne pouvez-vous pas compter le nombre de caractères a partir des strings que vous utilisez pour définir votre synthèse ?

Bonjour Saboh,

La question n'est pas bête mais le nb de digits du chiffre en fin de chaque ligne varie d'où la difficulté.
C'est vrai que si c'était fixe, j'aurais tout défini en dur.
Merci de m'avoir lu et pour votre message.

re,

quelque chose dans ce genre

     With MaTextbox.TextFrame2.TextRange
          .Characters(2, 3).Font.Fill.ForeColor.RGB = RGB(255, 0, 0)     'les charactères 2 à 5 rouge
          .Characters(12, 3).Font.Fill.ForeColor.RGB = RGB(0, 255, 0)     '12 à 15 vert
          .Characters(22, 3).Font.Fill.ForeColor.RGB = RGB(0, 0, 255)     '22 à 25 bleu

EDIT : vue votre dernière réaction, il faut compter, rien à faire ...

Bonjour BsAlv,

Merci pour votre proposition.
Je savais à peu près comment faire pour changer la couleur de police mais c'était surtout pour déterminer le nb de caractères pour les "start" et "end".
Je pense que je vais passer par un tableau et faire un recherche-remplace avec un caractère spécial comme marqueur de fin de ligne ou utiliser le VbCrLf comme délimiteur.
Je trouverai ainsi les "start" et "end" de chaque ligne.
Merci pour votre contribution.

Après si jamais, il ne doit pas etre trop compliqué de calculer la longueur d'un nombre en bouclant une division par 10 et regardant le reste.

Effectivement autrement un caractère invisible de fin de ligne peut etre une option élégante et rapide.

utilisez un "camera", voir PJ. La forme rouge encadre est le camera de la plage A1:B18. Déplacez par exemple l'étoile et vous verrez ce changement aussi dans le caméra.

Maintenant vous n'avez qu'à créer votre propre plage avec des textes et couleurs adaptés, puis crée un caméra comme çà et fini.

3pipout64.xlsb (22.06 Ko)

Bonjour Bart,

Je viens de regarder la vidéo youtube que vous avez mise en lien ainsi que votre macro...

Incroyable !
Je ne savais pas qu'une telle fonctionnalité existait !
Je suis espanté.
Du coup, je suis en train d'adapter votre solution qui est géniale.

Trop fort !
Je suis fier de vous Bart.
Merci pour votre contribution et le temps passé pour m'aider.

Bonne continuation.

Rechercher des sujets similaires à "zone texte shapes addtextbox textframe"