Changement de couleur pour un caractère spécial avec VBA

Bonjour.

J'ai une macro "Classeur-Essai.xlsm" ci-dessous qui à un comportement bizarre. Elle devrait passer les caractères "🖿" et "M" en vert. Ca ne marche pas. Voir les "images 1" et "Image 2" ci-dessous.

______________________________________

Sub Macro10()
Dim Tx As String

Worksheets("Feuil1").Range("A:C").Delete Shift:=xlUp

'Essai avec le caractère représentant un dossier (code unicode 1F5BF , code Html décimal 128447)
Range("A1").Select
Tx = " "
ActiveCell.FormulaR1C1 = Tx & Application.WorksheetFunction.Unichar(128447) & "PPPPP"
Selection.Characters(Start:=1, Length:=Len(Tx) + 1).Font.Color = -10693594

'Essai avec la lettre "M"
Range("A3").Select
Tx = " "
ActiveCell.FormulaR1C1 = Tx & "M" & "PPPPP"
Selection.Characters(Start:=1, Length:=Len(Tx) + 1).Font.Color = -10693594
End Sub

_________________________________________

Image 1 -> Avant de lancer la macro dans la cellule "A1" il y à le caractère "🖿" , et dans la cellule "A3" il y a le caractère "M". C'est deux caractères en noir , en lançant la macro devraient passer en vert.

image

Image 2 -> Après avoir lancé la macro le caractère "🖿" qui devrait passer en vert, il disparait de la cellule , le caractère "M" lui passe bien en vert. Je ne comprends pas ce comportement car la structure des 2 parties est identique aux caractères "🖿" et "M" près. Dans la première partie "Application.WorksheetFunction.Unichar(128447)" est fait pour insérer le caractère "🖿" car je ne peux pas l'insérer directement dans la ligne de commande "ActiveCell.FormulaR1C1". Si on lance la macro sans les lignes "Selection.Characters(Start:=1, Length:=Len(Tx) + 1).Font.Color = -10693594" ces caractères "🖿" et "M" sont bien présents dans leurs lignes respectives. Donc la macro marche, sauf le changement de couleur pour "🖿".

Y a-t-il une solution pour résoudre ce problème ?

Merci pour vos réponses. Amitiés.

image 2

c

13classeur-essai.xlsm (16.71 Ko)

Bonjour

Pourquoi une macro alors qu'une MFC fait le travail?

13classeur-essai.xlsm (17.53 Ko)

A+ François

Bonjour,

Si vous ne voulez colorier que "l'icône" en vert, l'astuce c'est que votre caractère "🖿" fait… 2 de long. On peut le voir en tapant

Debug.Print Len(WorksheetFunction.Unichar(128447)) ' = 2

Donc, il suffit d'adapter votre code en prenant bien une longueur de 2 et vous verrez que tout fonctionne. Ci-après votre code un peu corrigé pour être plus "robuste".

Sub Macro10()
    Dim tx As String: tx = "     "
    Dim speChar As String: speChar = WorksheetFunction.Unichar(128447)
    With ThisWorkbook.Worksheets("Feuil1")
      ' nettoyage
      .Range("A:C").Clear

    'Essai avec le caractere representant un dossier (code unicode 1F5BF ,  code Html decimal 128447)
      .Range("A1").Value2 = tx & speChar & "PPPPP"
      ' petite difference avec votre code (que j'ai laissé pour la lettre M) :
      ' ici on ne colorie que l'icone, pas les espaces avant (alors que pour M on commence à 1)
      .Range("A1").Characters(Start:=Len(tx) + 1, Length:=Len(speChar)).Font.Color = -10693594
    'Essai avec la lettre "M"
      .Range("A3").Value2 = tx & "M" & "PPPPP"
      .Range("A3").Characters(Start:=1, Length:=Len(tx) + Len("M")).Font.Color = -10693594
    End With
End Sub

'https://outils-javascript.aliasdmc.fr/encodage-caracteres-bureautiques/encode-caractere-1F5BF-html-css-js-autre.html
'https://forum.excel-pratique.com/excel/changement-de-couleur-pour-un-caractere-special-avec-vba-199657

Bonjour.

Merci "Saboh 12617" pour votre réponse rapide.

En effet cela marche très bien

Amitiés

Content d'aider, n'oubliez pas de clôturer le fil.

Bonne journée

Rechercher des sujets similaires à "changement couleur caractere special vba"