Intégration emoticone dans onglet feuille Excel

Résolu
supergilou Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   -  
Nain_Porte_Quoi Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour, je désire intégrer une émoticône (non Windows je précise) au nom d'une feuille Excel (cadenas ouvert ou fermé) j'ai écumé les tutos mais je n'ai rien trouvé permettant de réaliser cette insertion. Je précise; pas de soucis pour insérer une émoticônes qui se trouve dans Windows! mais je ne parviens pas avec une autre.

A voir également:

11 réponses

brucine Messages postés 21598 Date d'inscription   Statut Membre Dernière intervention   3 394
 

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"))
 

0
supergilou Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

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.

0
brucine Messages postés 21598 Date d'inscription   Statut Membre Dernière intervention   3 394
 

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.

0
danielc0 Messages postés 1856 Date d'inscription   Statut Membre Dernière intervention   229
 

Bonjour,

En suivant l'idée de Brucine, j'ai écrit dans une cellule :

="aaa"&UNICAR(HEXDEC("1F513"))&"bbb"

J'ai obtenu dans la cellule :

J'ai fait un copier / collage spécial valeurs de la cellule sur elle même et j'ai collé le résultat dans l'onglet :

Merci à Brucine.

Daniel


0
brucine Messages postés 21598 Date d'inscription   Statut Membre Dernière intervention   3 394
 

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.

0
Nain_Porte_Quoi Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   2
 

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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
supergilou Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

Un 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 

0
supergilou Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

Un grand merci à tous!!

0
danielc0 Messages postés 1856 Date d'inscription   Statut Membre Dernière intervention   229
 

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


0
brucine Messages postés 21598 Date d'inscription   Statut Membre Dernière intervention   3 394
 

Bonjour,

Le passage de l'un à l'autre sans exécuter à nouveau la macro, sans doute pas, mais détecter le statut par If ActiveSheet.ProtectContents = False (ou True), pourquoi pas?

0
danielc0 Messages postés 1856 Date d'inscription   Statut Membre Dernière intervention   229 > brucine Messages postés 21598 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour,

Oui, mais à quoi ça sert ? Une macro peut changer le nom de la feuille, mais si celle-ci est protégée manuellement, il n'y a aucun évènement qui permette à VBA de changer le nom de la feuille. Donc, ce n'est pas la solution.

Daniel

0
supergilou Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 

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

0
brucine Messages postés 21598 Date d'inscription   Statut Membre Dernière intervention   3 394
 

Bonjour,

Eurêka.

La macro suivante donne le résultat pour le cadenas fermé:

Sub change()

ActiveSheet.Name = ChrW(-10179) & ChrW(-8942)

End Sub

Même chose avec -8941 pour ouvert.



 

0
Didi64_549 Messages postés 2087 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour,

Pas simple tout cela mais merci de votre retour avec votre solution ainsi vous en aidez beaucoup sur le forum se trouvant dans le même cas que vous.

Vous êtes un supergilou.

Cordialement.

0
brucine Messages postés 21598 Date d'inscription   Statut Membre Dernière intervention   3 394 > Didi64_549 Messages postés 2087 Date d'inscription   Statut Membre Dernière intervention  
 

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.

0
Nain_Porte_Quoi Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   2
 

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

0
brucine Messages postés 21598 Date d'inscription   Statut Membre Dernière intervention   3 394
 

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.

0
Nain_Porte_Quoi Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   2
 

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"

0
brucine Messages postés 21598 Date d'inscription   Statut Membre Dernière intervention   3 394
 

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?

0
Nain_Porte_Quoi Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   2
 

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

0