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 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.
c
Bonjour
Pourquoi une macro alors qu'une MFC fait le travail?
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-199657Bonjour.
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