Switcher des chiffres à des symboles

Bonjour à tous,

J'ai une question, j'ai un fichier et je me demande s'il est possible (facilement) de pouvoir switcher à l'aide d'un bouton ou d'une liste de choix de chiffres (1,2,3,4) à des symboles (Carrés avec 4 cases qui se noircissent en fonction de la valeur du chiffre)

Le fichier est en pj... si vous avez une idée... ;)

image

Merci par avance et je reste disponible si vous avez besoin d'explication.

Silentman

Bonjour,

Une proposition ...

=rept("g ";A1)&rept("c ";4-A1)
  • en changeant la police en Webdings
  • et en activant le retour automatique à la ligne (réduire la largeur de la colonne)
capture d ecran 191

Autre formulation avec rupture de ligne intégrée à la formule

=REPT("g ";MIN(2;A1))&REPT("c ";2-MIN(2;A1))&CHAR(10)&REPT("g ";2-MIN(2;4-A1))&REPT("c ";MIN(2;4-A1))

toujours avec police Webdings

Equivalent en excel :

17lean.xlsx (9.43 Ko)

sans police spéciale, juste en choisissant les caractères unicode (🕵ici : http://www.alanwood.net/demos/webdings.html )

=REPT("■ ";MIN(2;A1))&REPT("□ ";2-MIN(2;A1))&CHAR(10)&REPT("■ ";2-MIN(2;4-A1))&REPT("□ ";MIN(2;4-A1))
capture d ecran 192

Bonjour à vous,

Merci pour vos réponses ! ;)

Ma demande porte surtout sur le fait de pouvoir passer d'une vue à l'autre... (cf. pj) avec un bouton, une liste de choix (Chiffre / Carré).

Je n'ai pas trouvé de solution pour remplacer la fonction dans Excel (Jeu d'icones).

image

Ou mieux, quand on écrit 1 ou 2 ou 3 ou 4 dans la cellule, on a les carrés directement.

Merci ;)

Silentman

Si tu écris 1 2 3 ou 4, par cette fonction

=REPT("■ ";MIN(2;A1))&REPT("□ ";2-MIN(2;A1))&CHAR(10)&REPT("■ ";2-MIN(2;4-A1))&REPT("□ ";MIN(2;4-A1))

tu as les carrés directement dans la cellule voisine.

On peut aussi faire la fonction inverse.

Le jeu d'icônes n'est pas possible dans ce cas de figure. J'ai donc opté pour des fonctions (standards) et des caractères unicode.

=LEN(B1)-len(SUBSTITUTE(B1;"■";""))
capture d ecran 194

Ma demande porte surtout sur le fait de pouvoir passer d'une vue à l'autre... (cf. pj) avec un bouton, une liste de choix (Chiffre / Carré).

Je n'ai pas trouvé de solution pour remplacer la fonction dans Excel (Jeu d'icones).

Ou mieux, quand on écrit 1 ou 2 ou 3 ou 4 dans la cellule, on a les carrés directement.

Je reviens sur le sujet, ta question concerne-t-elle excel ou google sheets ?

Voici une solution en excel (mais que j'aime moins car il est difficile voire impossible de taper des caractères unicode dans l'explorateur de macro)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not IsNumeric(Target.Value) Then Exit Sub
    If Target.Value < 0 Or Target.Value > 4 Then Exit Sub
    x = Target.Value
    Target.FormulaLocal = "=REPT(""g "";MIN(2;" & x & "))&REPT(""c "";2-MIN(2;" & x & "))&CAR(10)&REPT(""g "";2-MIN(2;4-" & x & "))&REPT(""c "";MIN(2;4-" & x & "))"
    Target.Font.Name = "Webdings"
End Sub
10lean.xlsm (16.72 Ko)

Cela dit, eu égard à ton avatar, le plus simple pour arriver au résultat suffisant est le mieux ! et j'opterais pour ceci en excel

=REPT("■ ";A2)&REPT("□ ";4-A2)

parole de Black Belt certifié !

Bonjour Steelson,

Merci pour ton aide, nous avons migrer sur Sheets (j'étais un crack en VBA à l'époque et microsoft Excel semble plus puissant que le logiciel de Google, cela reste mon avis).

Etant obligé de tout migrer nos fichier de Excel vers Sheets, j'ai besoin de retrouver des équivalents pour ne pas perdre les utilisateurs.

Aujourd'hui (sous Excel), on tape 1 dans la cellule, ça affiche un carré, ou tape 2, ça en met 2... ainsi de suite. On ne se pose pas la question avec les jeu d'icones.

Demain sous Sheets, on tape 1, on affiche 1, on tape 2 on affiche 2... plus de carrés… et c'est toute la puissance de notre fichier (afficher les carrés et avoir un visuel plus facile à lire que des simples chiffres, et "les carrés" c'est notre standard).

Je me demandais comment avoir un équivalent sous Sheets de ce que nous avions sous excel...

EDIT : J'ai testé ton excel, est-ce que tu penses possible d'avoir la même chose sous la suite google ? (sheets)

Pour l'avatar, oui effectivement c'est mon métier :)

Demain sous Sheets, on tape 1, on affiche 1, on tape 2 on affiche 2... plus de carrés… et c'est toute la puissance de notre fichier (afficher les carrés et avoir un visuel plus facile à lire que des simples chiffres, et "les carrés" c'est notre standard).

J'ai testé ton excel, est-ce que tu penses possible d'avoir la même chose sous la suite google ? (sheets)

Pour le moment, tu peux ajouter une colonne avec la fonction proposée.

Je vais voir comment transposer ce que j'ai fait sur excel sur google sheet, mais cela va me prendre un moment ... quoique, il suffit de tester l'événement et remplacer la valeur par le contenu de la formule. A suivre ...

Bonjour,

Si les valeurs (de 0 à 4) sont en colonne D par exemple (paramètre dans la macro) :

function onEdit(event)
{
  var col = "D";
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(columnToLetter(r.getColumn()) == col){ 
    if(r.getValue() == 0){ 
      f.getRange(col+r.getRow()).setValue("□ □ \n□ □ "); 
    }else if(r.getValue() == 1){ 
      f.getRange(col+r.getRow()).setValue("■ □ \n□ □ "); 
    }else if(r.getValue() == 2){ 
      f.getRange(col+r.getRow()).setValue("■ ■ \n□ □ "); 
    }else if(r.getValue() == 3){ 
      f.getRange(col+r.getRow()).setValue("■ ■ \n■ □ "); 
    }else if(r.getValue() == 4){ 
      f.getRange(col+r.getRow()).setValue("■ ■ \n■ ■ "); 
    }
  }
}

si tu as plusieurs feuilles, tu peux aussi tester le nom de f pour éviter de le faire sur toutes les feuilles !

Hello Steelson,

Merci pour le code, je n'arrive pas à le faire fonctionner.

J'ai copier coller ton code dans un script et lorsque je tape un chiffre dans une cellule de la colonne 'D' de ma fenetre active, rien ne se passe.

J'ai oublié quelque chose ? :)

en tout cas, merci pour le coup de main !! si ça fait ce que je pense que cea doit faire, ça peut répondre à mon problème :)

silentman :jap:

J'ai copier coller ton code dans un script et lorsque je tape un chiffre dans une cellule de la colonne 'D' de ma fenetre active, rien ne se passe.

J'ai oublié quelque chose ? :)

Non, je ne pense pas, en tous cas chez moi cela a fonctionné immédiatement.

Je vais voir pour forcer l'activation d'un trigger.

Fonctions génériques de trigger (ce n'est pas de moi) : https://stackoverrun.com/fr/q/12556671

Il faut repérer l'ID de ton fichier et l'indiquer dans la première partie, il est présent dans l'URL /d/ici_ici_ici_ici/editentre le /d/ et le /edit https://stackoverflow.com/questions/36061433/how-to-do-i-locate-a-google-spreadsheet-id

// trigger
function myTriggerSetup() {
     if(!isTrigger('lean')) {
       ScriptApp.newTrigger('lean').forSpreadsheet('xxxxxxxxxmettre ici l'ID du fichierxxxxxxxxxxxxx').onChange().create();  
     }
}

function myTriggerDelete(){
     deleteTriggersByName('lean');
}

function deleteTriggersByName(name){
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++){ 
    if (triggers[i].getHandlerFunction().indexOf(name) != -1) 
    {
      ScriptApp.deleteTrigger(triggers[i]);
    }
}}

function isTrigger(funcName) {
     var r=false;
     if(funcName) {
       var allTriggers=ScriptApp.getProjectTriggers();
       var allHandlers=[];
       for(var i=0;i<allTriggers.length;i++) {
         allHandlers.push(allTriggers[i].getHandlerFunction());
       }
       if(allHandlers.indexOf(funcName)>-1) {
         r=true;
       }
     }
     return r;
}

et la fonction que j'ai appelé lean maintenant (supprime l'ancienne) qui est de mon cru, cuvée oct 2020.

function lean()
{
  var col = "D";
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(columnToLetter(r.getColumn()) == col){ 
    if(r.getValue() == 0){ 
      f.getRange(col+r.getRow()).setValue("□ □ \n□ □ "); 
    }else if(r.getValue() == 1){ 
      f.getRange(col+r.getRow()).setValue("■ □ \n□ □ "); 
    }else if(r.getValue() == 2){ 
      f.getRange(col+r.getRow()).setValue("■ ■ \n□ □ "); 
    }else if(r.getValue() == 3){ 
      f.getRange(col+r.getRow()).setValue("■ ■ \n■ □ "); 
    }else if(r.getValue() == 4){ 
      f.getRange(col+r.getRow()).setValue("■ ■ \n■ ■ "); 
    }
  }
}

Ensuite, dans l'éditeur de macro tu exécutes

myTriggerSetup

Il faudra accorder des autorisations de mémoire.

Je n'ai pas testé, je l'ai fait par analogie avec une autre fonction.

Hello,

Merci pour ton aide encore une fois, j'ai tout copier les différents codes dans un script sheet mais cela ne fonctionne pas chez moi.

Il faut que je l'active ? dans je tape 1, 2 ou 3 ou 4 dans la colonne 'D" de la feuille active, rien ne se passe... j'ai du oublier de faire quelque chose...

Silentman

Dans l'éditeur de script, il faut exécuter la fonction myTriggerSetup et répondre aux questions de sécurité

capture d ecran 200

Je viens aux nouvelles ... tu t'en es sorti ou pas ?

Hello Steelson, oui merci ! j'ai réussi !

J'étais en congés... désolé de répondre si tard...

J'ai un autre sujet... (que je maîtrise sous VBA mais pas sous sheet...)

J'ai une liste déroulante dans un sheet (feuille1) en "A8" qui change les valeurs de plusieurs cellules de ma feuille A4 et je souhaite enregistrer au format PDF à la chaîne, toutes les valeurs de ma liste déroulante dans un dossier spécifique sur mon drive et je souhaite que le nom du fichier soit : valeur-de-la-liste_date.pdf

En gros ma liste déroulante contient 60 entrées différentes (nom prénom) et je souhaite créer 60 PDF avec les données de chaque nom prénom

C'est quelque chose de compliqué à coder ?... existe t-il quelque chose que je pourrais adapter à mon besoin ?

Un grand merci encore pour ton aide ! ;)

silentman

Bonjour,

Content de la réussite du premier point.

Ouvre un autre sujet pour ce nouveau point avec un titre spécifique, ce qui permettra des recherches ultérieures. C'est préférable.

Rechercher des sujets similaires à "switcher chiffres symboles"