Ajout texte dans commentaire existant - Préservation format

ngogoisidore

XLDnaute Occasionnel
Bonjour,

Après de nombreuses recherches infructueuses sur le net et la documentation VBA (on-line/off-line), je bute sur un problème que je commence à penser seulement soluble par des moyens détournés et compliqués ...

Il s'agit d'insérer, par VBA, une chaine de caractères dans un commentaire existant, tout en préservant son formatage (caractères gras, soulignement ...). C'est, bien sur, parfaitement possible directement par l'interface d'Excel. C'est aussi, théoriquement, possible à travers VBA, si on en croit l'aide VBA d'Excel sur la commande "insert" de l'objet "Characters":

-----------------------------------------------------------------------
Insert method as it applies to the Characters object.
Inserts a string preceding the selected characters.

expression.Insert(String)
expression Required. An expression that returns a Characters object.

String Required String. The string to insert.
-----------------------------------------------------------------------

Donc, en supposant que la cellule A1 de la feuille active contienne le commentaire :

"Historique :[retour chariot]
10/10/08 - Achat 3 Crayons[retour chariot]
11/10/08 - Achat 4 Feuilles de Papier"

, le code suivant :

ActiveSheet.Range("A1").Shape.TextFrame.Characters(14,0).Insert String:="#1 "

devrait insérer la chaine "#1" dans le commentaire de cette cellule juste avant le 14eme caractère, ie : "1" de "10/10/08 - ...".

En fait on obtient :

"Historique :[retour chariot]
#1"

Si on utilise la commande :

ActiveSheet.Range("A1").Shape.TextFrame.Characters(14).Insert String:="#1 "

ou bien :

ActiveSheet.Range("A1").Shape.TextFrame.Characters(14,63).Insert String:="#1 "

Le résultat est le même.

Au lieu d'insérer une chaine de caractères, je pourrais remplacer la "partie de chaine existante" par "chaine à insérer" + "partie de chaine existante", mais il n'y a pas, à ma connaissance, de manière de le faire sans perdre le formatage, puisqu'Excel ne permet que de remplacer le texte et non l'objet "Characters", qui porte le format.

Je pourrais aussi le faire à la main :), mais si l'opération porte sur une centaine de cellules, ça va me donner des maux de tête.

J'ai l'impression que la methode "insert" de l'objet "Characters" (qui peut-être aussi bien utilisé pour le texte contenu dans les cellules que celui contenu dans les commentaires) est "buggée" pour les commentaires (marche pour les "Range").

En solution ultime, s'il s'avère que la méthode insert est réellement "buggée" et qu'il n'éxiste pas de patch, il reste la possibilité affreuse de reprogrammer partiellement la copie d'objet "Characters":

1) Copier les propriétés des fontes une par une et caractère par caractère dans des tableaux.
2) Remplacer le texte en perdant le formatage
3) Reformater à partir des propriètés de fontes que l'on a stockées (en ne se trompant pas dans les indices de caractère, dans la mesure où la chaine obtenue est différente de l'originale).

Là, je cale un peu ...

Quelqu'un aurait il du feedback sur ce sujet ?

Merci.
 

PMO2

XLDnaute Accro
Re : Ajout texte dans commentaire existant - Préservation format

Bonjour,

Voici une approche, avec l'exemple suivant, qui semble être la solution à votre problème

Code:
Sub InsertTextComment()
Dim C As Comment
Set C = [a1].Comment
If C Is Nothing Then Exit Sub
C.Text Text:="#1 ", _
       Start:=14, _
       overwrite:=False
End Sub

Cordialement.

PMO
Patrick Morange
 

ngogoisidore

XLDnaute Occasionnel
Re : Ajout texte dans commentaire existant - Préservation format

Mille mercis, ça marche trés bien !

Je m'étais focalisé sur la méthode insert de l'objet Characters, qui elle, semble avoir quelques problèmes ...

Merci encore.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 325
Membres
103 516
dernier inscrit
René Rivoli Monin