Bouton Incrémentation +1 et un autre +1 / -1

Bonjour,

Je me fais actuellement un fichier Google Spreedsheet pour m'occuper de mes petites vente sur mon jeu.
Je voulais utiliser un logiciel voir un logiciel en ligne pour faire cela, mais je ne trouve absolument rien à part des outils
de type plugin à mettre sur un site web (CMS). et cela ne m'aide en rien.

telechargement

Ce que je voulais faire est en somme assez simple mais je trouve GoogleSheet très rigide dans le sens ou je ne peux pas appliquer un script a une image, mais à une image qui est dans un dessin que je dois recadré, ce qui est très casse bonbon.
A la base je voulais juste mettre un + sur fond vert, cliquer dessus, et cela rajoute +1 à la colonne quantité.
Pour le 2ème + sur fond vert, j'aimerai qu'il rajoute +1 à la quantité vendu mais du coup -1 à la quantité.
Tout cela à l'air vachement simple, mais cela fait 2 jours que je passe mon temps là dessus, sans trouver de réelle solution, alors qu'en fait, c'est quand même des fonctions très simple. J'suis peut être vraiment nul pour le coup.

Ce serait très gentil si vous aviez une solution simple, et efficace de préférence car le fichier est très grand (nombreuse référence), et remplir chaque case avec le dessin en le cadran, c'est déjà un travail de fou, mais alors s'il faut assigner un script à chaque fois, y'a un sacré boulot (mais que je suis prêt à faire s'il n'y a d'autre choix).
Merci d'avance si vous avez une idée.

(PS: Je trouve ça bizare qu'ils n'ont pas pensé à implanter ça directement dans le soft, et pire dans les App Script qu'on peut télécharger car j'ai cherché, et j'ai rien trouvé)

Bonjour,

mais je trouve GoogleSheet très rigide dans le sens ou je ne peux pas appliquer un script a une image, mais à une image qui est dans un dessin que je dois recadré

Tu peux assigner un script directement à une image mais les petits points qui servent à afficher les options sont un peu plus difficiles à cibler si l'image est minuscule :

image

Par contre, dans ton cas, les images ne sont pas une option très pratique car tu vas devoir créer une fonction par image et tout assigner manuellement.

Quelque chose de plus simple serait par exemple d'ajouter des cases à cocher au lieu des boutons, puis lorsque tu coches une case tu vas ajouter +1 à la quantité et décocher automatiquement la case (avec un déclencheur onEdit).

Ou plus simple encore, de laisser vide ces colonnes et de te permettre d'entrer directement la quantité à ajouter (qui sera ensuite ajoutée automatiquement, avant de vider la cellule).

telechargement

Merci de ta réponse.
Comme tu le vois sur l'image ci-dessus, si j'insere une image dans une cellule,
je n'ai pas les 3 petits points comme sur un dessin.

Quelque chose de plus simple serait par exemple d'ajouter des cases à cocher au lieu des boutons, puis lorsque tu coches une case tu vas ajouter +1 à la quantité et décocher automatiquement la case (avec un déclencheur onEdit).

Alors je trouve cela moins stylé graphiquement, mais si ca marche, why not?
Tu a une idée du code par toutatis?

Ou plus simple encore, de laisser vide ces colonnes et de te permettre d'entrer directement la quantité à ajouter (qui sera ensuite ajoutée automatiquement, avant de vider la cellule).

Je comprends le concept, sympa si j'avais plusieurs quantité a rentrer en même temps mais dans ce cas, cela reviens à taper,
et dans ce cas, autant changer directement manuellement la quantité si j'en ai plusieurs, donc je préfère la première solution.

Comme tu le vois sur l'image ci-dessus, si j'insere une image dans une cellule,

je n'ai pas les 3 petits points comme sur un dessin.

Si tu insères dans la cellule, lorsque tu cliques sur l'image, en réalité tu cliques sur la cellule (le menu contextuel de ta capture est celui d'une cellule).

Si tu insères sur les cellules, ton image est indépendante des cellules et là un script peut être assigné.

Alors je trouve cela moins stylé graphiquement, mais si ca marche, why not?

Tu a une idée du code par toutatis?

Pas sans un fichier d'exemple partagé

Donc je pense que ton idée de case à cocher est une bonne idée car pour copier le modèle avec une image par dessus une cellule,
je pense que ca ne va pas être terrible.

Comment te partager mon fichier? en privé?

Partage ici un fichier simplifié qui contient juste le nécessaire pour ton problème.

Insère les cases à cocher :

image

Puis ajoute ce code :

function onEdit(e) {

  if (e.value != 'TRUE') return;

  const colonne = e.range.getColumn();
  const ligne = e.range.getRow();

  // Si plages des cases à cocher
  if ((colonne === 12 || colonne === 14) && ligne > 2 && ligne < 67) {

    // +1
    const cellule = e.range.offset(0, 1);
    cellule.setValue(cellule.getValue() + 1);

    // Reset
    e.range.setValue(false);
  }
}

Ca marche super bien! T'es trop fort!
Je trouve ca vraiment bête qu'il n'est pas fait de bouton direct pour ce genre de chose (encore une fois).

J'ai tout de même une errreur même si cela marche quand même:

telechargement

Maintenant il faudrait que quand je clique sur la case colonne 14 (N) cela rajoute bien comme c'est le cas +1 a quantité vendu,
mais -1 Quantité ce qui n'est pas le cas

J'ai tout de même une errreur même si cela marche quand même:

C'est normal d'avoir une erreur si tu essaies d'exécuter depuis l'éditeur (voir la remarque colorée de la page onEdit).

Maintenant il faudrait que quand je clique sur la case colonne 14 (N) cela rajoute bien comme c'est le cas +1 a quantité vendu,

mais -1 Quantité ce qui n'est pas le cas

Ah ok, dans ce cas les 2 colonnes sont inutiles, supprime la première colonne de cases à cocher (la seconde sera alors la colonne 13) et copie ça :

function onEdit(e) {

  if (e.value != 'TRUE') return;

  const colonne = e.range.getColumn();
  const ligne = e.range.getRow();

  // Si plages des cases à cocher
  if (colonne === 13 && ligne > 2 && ligne < 67) {

    const quantite = e.range.offset(0, -1);
    const ventes = e.range.offset(0, 1);

    const quantiteValeur = quantite.getValue();
    const ventesValeur = ventes.getValue();

    // Modifications si quantité > 0
    if (quantiteValeur > 0) {
      quantite.setValue(quantiteValeur - 1);
      ventes.setValue(ventesValeur + 1);
    } else {
      SpreadsheetApp.getUi().alert('Erreur : quantité disponible insuffisante !');
    }

    // Reset
    e.range.setValue(false);
  }
}

Je t'ai même rajouté un message d'erreur si 0 quantité

function onEdit(e) {

  if (e.value != 'TRUE') return;

  const colonne = e.range.getColumn();
  const ligne = e.range.getRow();

  // Si plages des cases à cocher
  if ((colonne === 12) && ligne > 2 && ligne < 70) {

    // +1
    const cellule = e.range.offset(0, 1);
    cellule.setValue(cellule.getValue() + 1);

    // Reset
    e.range.setValue(false);
  }
    // Si plages des cases à cocher
  if ((colonne === 14) && ligne > 2 && ligne < 70) {

    // +1
    const cellule = e.range.offset(0, 1);
    cellule.setValue(cellule.getValue() + 1);
  }
    // Si plages des cases à cocher
  if ((colonne === 14) && ligne > 2 && ligne < 70) {

    // -1
    const cellule = e.range.offset(0, -1);
    cellule.setValue(cellule.getValue() - 1);

    // Reset
    e.range.setValue(false);
  }
}

J'ai retouché le code, et ca marche.

Franchement, merci, je ne pense pas que j'y serai arrivé sans ton aide.
Fallait trouvé l'idée, la concrétiser.
Ce n'est pas grand chose mais c'est beaucoup pour moi, et ca pourrait me reservir même si je m'interesse de plus en plus
à ces tableurs car on peut presque tout y faire.

Merci pour le temps passé sur mon souci, très bon weekend à toi mon sauveur

C'est normal d'avoir une erreur si tu essaies d'exécuter depuis l'éditeur (voir la remarque colorée de la page onEdit).

Ah ok ^^"

Ah ok, dans ce cas les 2 colonnes sont inutiles, supprime la première colonne de cases à cocher (la seconde sera alors la colonne 13) et copie ça :

Ah non non non monsieur! Les 2 colonnes à cocher ont bel et bien des fonctions différentes comme je l'avais expliqué au tout début.
La première rajoute juste un +1 à la quantité des objets que j'ai en inventaire.
La 2ème rajoute +1 au nombre de vente MAIS retire 1 (donc -1) à la quantité des objets que j'ai en inventaire.

Je vais mixer ton nouveau code avec le miens

Je vais mixer ton nouveau code avec le miens

Je vais te faire gagner du temps

function onEdit(e) {

  if (e.value != 'TRUE') return;

  const colonne = e.range.getColumn();
  const ligne = e.range.getRow();

  // Si les bonnes lignes
  if (ligne > 2 && ligne < 67) {

    // Si la colonne 12
    if (colonne === 12) {

      const quantite = e.range.offset(0, 1);
      const quantiteValeur = quantite.getValue();

      // +1
      quantite.setValue(quantiteValeur + 1);

    // Si la colonne 14
    } else if (colonne === 14) {

      const quantite = e.range.offset(0, -1);
      const ventes = e.range.offset(0, 1);
      const quantiteValeur = quantite.getValue();
      const ventesValeur = ventes.getValue();

      // Modifications si quantité > 0
      if (quantiteValeur > 0) {
        quantite.setValue(quantiteValeur - 1);
        ventes.setValue(ventesValeur + 1);
      } else {
        SpreadsheetApp.getUi().alert('Erreur : quantité disponible insuffisante !');
      }
    }

    // Reset
    e.range.setValue(false);
  }
}

J'ai tenté de mixer les 2 codes, plus rien ne marchait muahaha

Bon bin ca marche désormais, merci pour tout ça, j'imagine que tu dois savoir faire des choses bien plus satisfaisante que ça,
mais là tu a ajouté un gros + à mon fichier en terme de fonctionnalité.
Pas que j'ai la flemme de le faire à la main, mais que ca évite au maximum les erreurs.

Je considére donc cela comme résolu, passes un très bon dimanche à toi Oh Grand Maitre des Tableurs...

Ah oui mince j'oublais une autre chose! J'ai d'autres onglet, comment je fais pour appliquer (spécifier) cela à seulement cet onglet?

Modifie la première ligne :

if (e.value != 'TRUE' || e.range.getSheet().getName() != 'FEUILLE_ICI') return;

Je m'agenouille devant ce prophete _o_

Bisous champion!

Afféctueusement, WiWi

Rechercher des sujets similaires à "bouton incrementation"