Intégration emoticone dans onglet feuille Excel
RésoluNain_Porte_Quoi Messages postés 52 Date d'inscription Statut Membre Dernière intervention -
- Emoticone linkedin
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel moyenne - Guide
11 réponses
Bonjour,
Un émoji est un caractère Unicode, il faut donc en trouver le numéro, et Excel en dehors de 365 ne le ramènera dans tous les cas qu'en noir et blanc.
Les valeurs hexadécimales pour respectivement le cadenas ouvert et fermé sont U+1F513 et U+1F512 et peuvent être trouvées par une recherche "Unicode cadenas".
L'émoji est alors rendu par =UNICAR(HEXDEC("1F513"))
Un grand merci à toi; BRUCINE!!!
Mais mon problème, comme explicité dans ma question n'est pas de faire apparaitre une émoticône dans une case; mais de parvenir à la placer dans l'onglet d'une feuille?????
Il existe de nombreux tutos ou l'on vois que le démonstrateur réalise cette action, mais hélas comme cette action n'est pas le sujet en cours il n'y a pas d'explication.
j'ai demandé à plusieurs mais malheureusement pas de réponse à aujourd'hui!
Voilà; le sens de ma question est bien de parvenir à placer une émoticône dans l'onglet (le nom de la feuille pour moi) ou d'enrichir le pavé de Windows car l'insertion depuis le pavé Windows est OK.
Ne fonctionne en effet pas dans les noms de feuille où on ne peut pas écrire une formule quelconque ni copier quoi que ce soit (sans quoi la solution serait simple, dans Word puisque Excel ne veut pas en entendre parler 1F513ALT+C et copier-coller).
Il ne semble pas y avoir d'autre solution que par macro VBA en cherchant le caractère par Chr ou ChrW sur le mode:
Worksheets(1).Name = Chr(50)
Le hic parce qu'il faut qu'il y en ait un est que la syntaxe n'admet pas certains caractères.
Il faut alors, je cite, copier le caractère voulu dans une cellule Excel quelconque puis en lire la valeur VBA et en concaténer les valeurs:
https://www.reddit.com/r/excel/comments/6pq1r1/vba_how_can_i_write_emojis_using_chrw/
Mais sur la procédure précise, cela dépasse mes capacités plus que limitées en VBA.
Bonjour,
On obtient le même résultat sans que l'émoticône soit entrée dans aucune cellule en la positionnant dans la cible (ici D4), par VBA:
Range("D4").Value = ChrW(&HD83D) & ChrW(&HDD12)
La décomposition ChrW est due au fait que l'Unicode recherché est plus haut que la limite 16 bits.
Les valeurs de ChrW sont obtenues en VBA en lisant le nombre de caractères de la chaîne représentant l'Unicode (ici 2) puis en appliquant AscW à chacune de ces caractères, ne me demande pas comment, mais toi qui es savant...
En tout état de cause, la même syntaxe ne fonctionne pas pour ActiveSheet.Name, ce qui ne résout pas directement le problème.
Hello,
en partant de l'idée de danielc0 et de la demande initiale, je pense que l'objectif serait d'afficher ce cadenas fermé ou ouvert selon ??? l'état de la protection de la feuille/du classeur/autre ? Le tout en VBA certainement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionUn grand merci à tous!
Je vais simplement masquer les feuilles; après les avoirs verrouillées.
Je crois que ce sera le plus simple; car le VBA et moi cela fait deux choses qui sont incompatibles.
Encore merci à vous
Bonjour à tous,
A ma connaissance au moins, VBA ne peut pas détecter le passage de l'état protégé à déprotégé ou l'inverse. Donc ce n'est pas une possibilité.
Daniel
Alors pour tout le monde juste un petit rappel! ma demande originel était comment placer un cadenas fermé (????) dans un onglet de feuille Excel.
Juste pour informer l'utilisateur du tableur qu'il ne fallait pas intervenir sur cette feuille, après moultes visionnage de tuto il y a bien des personnes qui parviennent à placer un émoticône dans l'onglet d'une feuille Excel ?????????????????.
C'est cela que je désirais réaliser simplement; mais suite à toutes les infos reçues de votre part, j'ai donc décidé de verrouiller et masquer toutes les cellules des feuilles concernées et ensuite j'ai donc masqué les dites feuilles; donc si feuilles non visibles, erreurs impossibles, et tentatives de modifs également supprimées!
(en principe??)
Voilà c'est tout ce que je recherchais à faire!; mais bon ma solution n'est peut être pas plus mal, puisque les feuilles ne sont pas visibles!!
Non????
Encore un grand merci à vous tous!
GILLES
Bonjour,
Pour continuer à se battre pour pas grand-chose, la cuisine illustrée en <13> résulte de ce que VBA n'est pas capable de lire un caractère de plus de 16 bits.
L'astuce consiste alors à déterminer la longueur de la chaîne de caractères (2 ou plus), de déterminer la valeur de chaque morceau et de réassembler.
Dans l'exemple qui nous intéresse (cadenas fermé) je me suis contenté de recopier servilement ces valeurs (-10179 et -8942), mais à supposer qu'on veuille appliquer la procédure à un autre Unicode de plus de 16 bits, il faut refaire le calcul.
On trouve différentes techniques dont certaines tarabiscotées, les plus simples ici respectivement en 10 et en 3.
https://stackoverflow.com/questions/55418398/how-do-i-remove-emojis-from-an-excel-sheet-using-vba/55418901#55418901
https://stackoverflow.com/questions/73853790/how-to-check-the-value-of-%CE%A3-character-in-an-excel-cell-vba
Le souci est que je suis une vraie quiche en VBA, je ne trouve pas où et comment écrire ces codes pour qu'ils fonctionnent (et qui peuvent peut-être dans au moins un des cas être appliqués non pas à ActiveCell mais à la cellule contenant l'Unicode, par exemple D4).
Merci.
Hello Brucine,
je ne comprend pas grand chose à l'unicode et encore moins au comment tu arrives avec une valeur hexa à une valeur décimale négative...
De plus, d'après quelques tests et recherches j'ai trouvé que les valeurs négatives peuvent être remplacées par des valeurs positives et donner les mêmes résultats (moi pas comprendre)
exemple
ChrW(-10179) peut être remplacé par ChrW(55357)
C'est vrai qu'on se bat pour "pas grand chose" mais c'est quand même intéressant de comprendre
Bonjour,
55357 est la différence entre 65536 (limite 16 bits) et 10179 expliquant pourquoi votre fille est muette.
ChrW (en fait d'ailleurs AscW dans le but recherché) rendrait la valeur négative (qui revient au même) quand le nombre entier source n'est pas signé.
https://www.vbforums.com/showthread.php?797751-RESOLVED-AscW-returns-negative-value
Mais ce que moi je continue à ne pas comprendre, peu importe que la valeur soit positive ou négative puisqu'elle mènera au même résultat, c'est comment obtenir les valeurs en question par découpage d'un Unicode qui est supérieur à la limite 16 bits et contient donc au moins deux chaînes sur lesquelles effectuer ces calculs.
Re Brucine,
merci pour l'explication de la différence entre le positif et le négatif bien que la phrase me semble bizarre "expliquant pourquoi votre fille est muette."
Si j'ai bien compris ton "incompréhension" ce petit code simplifié devrait t'éclairer
Option Explicit Sub test() Dim Car_Debut As String Dim Car_Fin As String Dim Val_Debut As Integer Dim Val_Fin As Integer Const Cell_Source As String = "D4" Car_Debut = Left(Range(Cell_Source), 1) Car_Fin = Right(Range(Cell_Source), 1) Val_Debut = AscW(Car_Debut) Val_Fin = AscW(Car_Fin) ActiveSheet.Name = ChrW(Val_Debut) & ChrW(Val_Fin) End Sub
Tu met ton caractère unicode dans la cellule D4 (tu peux changer dans le code) et tu lances la procédure "test"
J'ai voulu dire que importe l'artefact qui conduit à des valeurs négatives, dans le cas où elles existent il est probable que AscW fait l'opération tout seul en soustrayant à 65536.
Comme D4 est occupé par un des cadenas, j'ai mis en D6 une rose (1F339, pourquoi pas) et ton script conduit en effet au résultat voulu sans décomposer 1F339.
Je suppose (à nouveau je n'y comprends rien) que ta syntaxe Option Explicit a permis l'exécution de la macro là où d'autres que j'ai essayées au même effet et sans ne fonctionnent pas.
Je suppose aussi, je n'ai pas cherché à les afficher, que Car_Debut et Car_Fin font cette fameuse décomposition?
Options explicit est une instruction qui oblige à déclarer les variables, rien de plus.
https://learn.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/option-explicit-statement
L'unicode est composé en fait de 2 caractères, Car_Debut le premier et Car_Fin le second, ensuite je récupère la valeur de chaque caractères pour la recomposer et la mettre dans le nom de la feuille.
Ce qui quand même assez tordu car le nom de la feuille comporte maintenant 2 caractères