Automatisation d'un tableau avec plusieurs feuilles

Bonsoir à tous,

Je me permets de vous demander de l'aide sur un tableau Google Sheets que j'ai tenté de réaliser. Après avoir fouillé sur le Web à multiples reprises sur la méthodologie que je souhaitais adopter, j'ai fini par abandonner et vous solliciter.

J'essaie d'être concis et clair.

Voici le projet :

Un magasin spécialiste d'équipement et matériel de tennis avec qui je travaille souhaite mettre en place un suivi en ce qui concerne le prêt de raquettes.

J'ai fait une ébauche de ce que je pensais être le mieux pour eux sur Google Sheets (accès partout, synchronisation, collaboration etc.).

Voici l'accès au fichier : https://docs.google.com/spreadsheets/d/1bXH67AkSF4UNCfAYu1ClIpiHqKyLyMujyr42d0kzNx0/edit?usp=sharing

Vous verrez, il y a 4 feuilles : clients / raquettes / prêt / archive.

Les "clients" seront ajoutés en allant qu'un prêt est effectué. J'ai fait correspondre chaque entrée de nouveau client directement dans la feuille "prêt" pour éviter de ressaisir les coordonnées.

Dans la feuille "raquettes", c'est le stock de raquettes mises à disposition pour l'essai. J'ai fait en sorte d'indiquer le statut de chacune ("Disponible" ou "En prêt") selon s'ils sont déjà entre les mains de clients ou non.

Voici ma requête pour vous :

Je souhaite qu'à chaque fois qu'un prêt se termine, le responsable magasin puisse activer la case à cocher en colonne G de la feuille "prêt". Si vous le faites, vous verrez que la ligne se met en vert et que les raquettes prêtées (1, 2, 3, 4 ou 5) sont effacées quelques secondes après. C'est un bout de script que j'ai mis dans une macro après l'avoir trouvé dans mes recherches Web mais cela a ses limites malheureusement en ce qui me concerne.

Ci-dessous la macro actuelle :

function deleteRowContents (col){ // col is the index of the column to check for checkbox being true
  var col = 7; // If the column "F" is 6, please set 6.
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("prêt"); // Modified
  var data = sh.getDataRange().getValues();

  // Below script was modified.
  var deleteRanges = data.reduce(function(ar, e, i) {
    if (e[col - 1] === true) { // Modified
      return ar.concat(["G" + (i + 1) + ":L" + (i + 1)]);
    }
    return ar;
  }, []);
  if (deleteRanges.length > 0) { // or if (deleteRanges.length) { // Added
    sh.getRangeList(deleteRanges).clearContent();
  }
}

Dans l'idée, je voudrais que la ligne (où on a coché la case) reste verte et que celle-ci soit "prise en photo" et copier/coller dans la feuille "archive" avant que les raquettes soient effacées et redeviennent "Disponible" pour de nouveaux essais. Dans le but d'avoir une trace historique du client avec les raquettes déjà testées.

Enfin, dans la feuille "prêt", pour les colonnes H à L (raquette 1, raquette 2...), dès lors que je choisis une raquette dans la liste, cela marque le coin de la cellule en rouge avec cette mention : "Non valide : la valeur d'entrée doit être comprise dans la plage spécifiée", auriez-vous une idée de l'erreur ?

Par avance, je vous remercie de votre aide si précieuse.

Je reste à disposition si besoin de plus d'informations !

Personne ? 😞

Bonjour,

j'ai pris une copie pour regarder comment je peux répondre

n'hésite pas à supprimer des lignes pour rendre l'appli plus réactive

J'ai fait correspondre chaque entrée de nouveau client directement dans la feuille "prêt" pour éviter de ressaisir les coordonnées.

Très dangereux car si tu changes le nom sans changer la ligne des raquettes il peut y avoir des incohérences, je vais te proposer autre chose

Enfin, dans la feuille "prêt", pour les colonnes H à L (raquette 1, raquette 2...), dès lors que je choisis une raquette dans la liste, cela marque le coin de la cellule en rouge avec cette mention : "Non valide : la valeur d'entrée doit être comprise dans la plage spécifiée", auriez-vous une idée de l'erreur ?

Ce n'est pas une erreur ... comme tu as affecté la raquette, elle disparaît du disponible qui est la liste de validation. Cela se mord la queue mais ce n'est pas grave, disons que c'est un repère (feu rouge) pour bien montrer qu'elle n'est plus disponible pour les autres !

je poursuis ce soir ...

Que dire... à part MERCI <3

A tester

function onEdit(event){
  var feuille = event.source.getActiveSheet();
  var cel = event.source.getActiveRange();
  if ((cel.getColumn() == 6) && (feuille.getName().toString() == 'prêt')){
    if (cel.getValue()){
      var archive = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("archive");
      archive.insertRowBefore(2);
      var plage = feuille.getRange('A' + cel.getRow() + ':K' + cel.getRow());
      plage.copyTo(archive.getRange('A' + 2), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); 
      feuille.getRange('G' + cel.getRow() + ':K' + cel.getRow()).clearContent();
    }
  }
}

https://docs.google.com/spreadsheets/d/1_arqd0fGkuJCtfzcvbG24Bs0KVgVanKDSHV5kGjkA0M/edit?usp=sharing

J'ai mis prêt en tête car le fichier s'ouvre sur cet onglet

J'ai regroupé Nom et Prénom pour faire une liste de validation et un VLOOKUP

Je teste cela demain et reviens vers vous, encore mille mercis !

Bonjour Steelson !

Plusieurs choses :

J'ai testé en interne le code que vous m'avez écrit, voici l'erreur :

TypeError: Cannot read property 'source' of undefined

J'ai demandé l'accès en écriture sur votre lien car je suis en lecture seule.

Merci d'avance pour votre aide.

Fais toi une copie : Fichier > Créer une copie

Okay, bon ça semble fonctionner !

J'ai deux questions :

  • l'ajout d'une colonne dans 'archive' avec la valeur "VRAI" dès qu'il y a un archivage, c'est normal ?
  • tes formules dans les colonnes B et C de 'prêt', quand je les reporte sur mon fichier original, cela m'indique "REF!", d'où viendrait le problème ? (sachant que j'ai lié "Prénom + Nom" comme tu l'as fait)

Merci de tes réponses.

  • l'ajout d'une colonne dans 'archive' avec la valeur "VRAI" dès qu'il y a un archivage, c'est normal ?
  • tes formules dans les colonnes B et C de 'prêt', quand je les reporte sur mon fichier original, cela m'indique "REF!", d'où viendrait le problème ? (sachant que j'ai lié "Prénom + Nom" comme tu l'as fait)

pour la colonne, tu peux la masquer si tu veux, mais c'est "vrai" car cela correspond à la check box qui avait été validée et je n'ai pas voulu copier par parties mais la ligne globale, ou alors tu mets des checkboxes dans la colonne

pour la formule il faudrait que je vois la structure de ton fichier

Entendu, oui j'ai masqué la colonne, c'est parfait.

Pour la structure du fichier, voici l'accès : https://docs.google.com/spreadsheets/d/1B9sR0k1JEXz08WNXNnG4oiN24Gomh3jjySxsHU1qOBU/edit?usp=sharing

=ARRAYFORMULA(IFERROR(VLOOKUP(A2:A;clients!A:C;2;0);""))

arrayformula permet d'étendre les formules jusqu'en bas de la feuille, il faut donc effacer tout ce qui est en dessous

ou mieux, efface toute la colonne, puis mets en B1

={"E-mail";ARRAYFORMULA(IFERROR(VLOOKUP(A2:A;clients!A:C;2;0);""))}

et en C1 après avoir effacé toute la colonne C

={"Téléphone";ARRAYFORMULA(IFERROR(VLOOKUP(A2:A;clients!A:C;3;0);""))}

Effectivement en effaçant tout ce qu'il y a en dessous, cela apparaît et supprime la mention "#REF!".

Par contre, en remplaçant la formule initiale par la nouvelle que tu me donnes, j'ai de nouveau #REF!.

Tu l'as bien mise sur la première ligne en effaçant tout ce qui est en dessous ? Regarde bien le message qui apparait quand tu survole REL!

My bad...

Je l'avais mis en B2 et C2 pensant qu'il fallait que je garde mon en-tête... autant pour moi.

Merci beaucoup pour ton implication !

Steelson, j'aurais besoin d'un conseil :

Je souhaite ajouter un automatisme qui permette l'envoi d'un e-mail à partir du moment où la date de fin arrive à échéance. Est-ce jouable ?

Vaut-il mieux passer par une nouvelle macro ou par un outil d'automatisation, style Zapier ?

Zapier, aucun intérêt ici, google sheets est très bien intégré avec gmail.

Où se trouvent les emails ?

Voici une procédure assez simple qu'il faudrait greffer ...

MailApp.sendEmail({to: destinataires,cc: copies,subject: objet,htmlBody: texte});
Rechercher des sujets similaires à "automatisation tableau feuilles"