Sheets : "remise à zéro" quand nouvelle ligne

Bonjour à tous, je suis nouvelle ici car je n’y comprends rien à google sheets et plus spécifiquement : les macros.

En effet, j’ai créé un tableau qui va répertorier une liste de nombreux produits.

Sur ces produits nous devons savoir s’ils sont, par exemple, corrosif, toxique et autre donc j’ai rajouté un nouvel onglet où il y a juste une case à cocher et cela se met automatiquement sur l’onglet principal.

Nous devons savoir également les différentes phrases de risque et c’est le même principe : nouvel onglet, juste à cocher une case et mit automatique sur l’onglet principal.

Le truc que je n’arrive pas à créer, c’est de faire en sorte que pour chaque nouveau produit entrer dans le fichier à la suite du précédent, tout se « remet à zéro » et j’ai juste à cocher les bonnes cases sans que les autres produits du fichier ne changent leur valeur.

Ce que j’ai déjà fait (même si ce n’est pas grand-chose) : création d’un bouton « nouvelle ligne », j’ai essayé de faire une macro qui ne fonctionne absolument pas du tout, j’ai utilisé mon « appel à un ami » qui s’est conclu par une sorte de copié collé de valeur mais pas de formules

mon code

function copydata() {

//Activates the spreadsheet
  var sheet = SpreadsheetApp.getActiveSheet()

  //Set Active sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 

  // Inset Rows
  sheet.insertRowsAfter(13, 1);

  // Copy template cells and paste into new location
  sheet.getRange("A12:CN12").copyTo(sheet.getRange("A13:CN13"));

  }

et son code

function MacroYoann() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('12:12').activate();
  spreadsheet.getRange('12:12').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.getRange('D15').activate();
};

Extrait du fichier :

image

J’espère que vous allez pouvoir m’aider et que j’ai été assez claire...

Bonne journée à vous !

Bonjour Louise,

peux-tu partager une copie simplifiée et anonymisée de ton fichier ? https://www.sheets-pratique.com/fr/cours/partage

Bonjour,

document partagé et demandé d'accès validé

encore merci pour votre aide!

ok, je prends la main

Mon but est le suivant : établir une fonction applicable à la dernière ligne renseignée qui va compiler tous les items cochés; ceci permettra de travailler sur l'onglet 'liste phrase H' en cochant et décochant autant que de besoin.

Ensuite, le bouton que tu as créé fera :

  • la recopie comme valeur du résultat de la fonction pour figer les items
  • la mise en place de cette fonction dynamique sur la ligne suivante
  • la remise à false des cases à cocher de la feuille

La fonction est simple

=CONCATENATE(query('liste phrase H'!A$3:C;"select B,C where A=true"))

Ta ligne 50 m'a perturbé, je l'ai remontée ligne 1 (L1)

Tu n'es pas obligée de conserver 1000 lignes sur chaque onglet, mets ce qui est nécessaire et un peu plus, pas la peine de tout conserver !

J'ai modifié la fonction pour le cas où rien n'est sélectionné

=iferror(concatenate(query('liste phrase H'!A5:C;"select B,C where A=true "));"néant")

Et voici le script

function copydata() {

  // définitions
  var classeur = SpreadsheetApp.getActiveSpreadsheet();
  var inventaire = classeur.getSheetByName('inventaire');
  var liste = classeur.getSheetByName('liste phrase H');

  // recherche dernière ligne
  var der = inventaire.getLastRow()

  // recopie de la fonction
  inventaire.getRange('Q'+der).copyTo(inventaire.getRange('Q'+der).offset(1,0), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  inventaire.getRange('A'+der).offset(1,0).setValue('***nouveau produit***') // nécesaire en cas de répétition involontaire

  // recopie des valeurs
  inventaire.getRange('Q'+der).copyTo(inventaire.getRange('Q'+der), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

  // remise à false des cases à cocher
  var der = liste.getLastRow()
  var raz=[]
  for (var i =3; i<=der;i++){raz.push([false])}
  liste.getRange('A3:A'+der).setValues(raz)

}

J'ai respecté ta demande mais ce qui me gêne est le risque d'ajouter manuellement un item colonne A. Il faudrait peut-être adopter un autre principe : faire en sorte que la fonction et le résultat soit avec la liste, et qu'avec un bouton on transfère en valeur dans la dernière ligne renseignée en vérifiant la valeur en A.

Quel est ton avis ?

Bonjour !

Merci de consacrer du temps à mon problème.

Quand je clique sur le bouton « nouvelle ligne » une ligne ***nouveau produit**** s’affiche. Cependant quand je coche des cases dans l’onglet «Symbole SGH » et « liste phrase H » rien ne s’affiche. De plus dans les cases à côté de « ph1 » il y avait des formules qui me permettaient d’avoir un « X » sous le danger associé or, je n’ai plus de « X » ….

Par exemple, si on coche « H200 » et « H201 » un « X » s’affiche en dessous de « expl gaz sous pression » et « Respectez les instructions d'utilisation pour éviter les risques pour l'homme et l'environnement »

Soit je ne comprends pas comment je dois compléter mon dossier soit il y a un petit problème

Pour répondre à ta dernière question, je n'ai pas tout compris peut être que tu peux me montrer directement si ça ne te fais pas trop de travail

Normalement, quand tu cliques sur le bouton

  • - une nouvelle ligne s'affiche en effet et en colonne Q tu as la formule
  • - avant cela, la ligne juste au-dessus, toujours colonne Q, a reçu en "dur" les valeurs cochées qui ont été remises à "zéro"

Maintenant je n'ai peut-être pas tout compris non plus. Je n'ai tenu compte que de l'onglet « liste phrase H »

Pour le moment, en corrigeant un peu, tu as la formule ligne 21 en face de "nouveau produit" et les résultat précédent en ligne 20

image

Je viens de voir les formules de la colonne N à la colonne AV.

Et si j'ai bien compris :

  • de N à P la source est "symbole SGH" (edit : j'ai fait une récap en colonnes M N O P de l'onglet "symbole SGH", c'est cette récap qui sera ensuite transposée dans la feuille au regard du dernier produit)
  • de Q à AV la source est "liste phrase H"

Est-ce que cela veut dire que ce sont ces valeurs qu'il faut "figer" et recopier sur une nouvelle ligne ? en remettant à "zéro" les paramètres des feuilles source ?

Pas de soucis pour moi, il faut juste que je comprenne comment tu as structuré ton document.

Désolé, j'ai fait une fausse manip ... il faudrait remettre les bonnes valeurs dans les cases suivante de 'liste phrase H' : cellules B3 à B6, et F3

Ensuite, je n'ai pas effacé tes formules pour le moment ... j'ai créé un onglet récap avec 2 boutons validation et raz. Les formules sont regroupées dans cet onglet, la formule en colonne Q a été fortement réduite. La macro va recopier les valeurs dans l'onglet 'inventaire'.

function valider(){
  // définitions
  var classeur = SpreadsheetApp.getActiveSpreadsheet();
  var inventaire = classeur.getSheetByName('inventaire');
  var choix = classeur.getSheetByName('recap des choix');
  // recherche dernière ligne
  var der = inventaire.getLastRow()
  // recopie des valeurs
  choix.getRange('N2:AV2').copyTo(inventaire.getRange('N'+der), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)
}

function raz(){
  // définitions
  var classeur = SpreadsheetApp.getActiveSpreadsheet();
  var symbole = classeur.getSheetByName('symbole SGH');
  var liste = classeur.getSheetByName('liste phrase H');

  // remise à false des cases à cocher dans liste
  var der = liste.getLastRow()
  var raz=[]
  for (var i =3; i<=der;i++){raz.push([false])}
  liste.getRange('A3:A'+der).setValues(raz)

  // remise à false des cases à cocher dans symbol
  var der = symbole.getLastRow()
  var raz=[]
  for (var i =3; i<=der;i++){raz.push([false])}
  symbole.getRange('B3:B'+der).setValues(raz)
  symbole.getRange('F3:F'+der).setValues(raz)
  symbole.getRange('J3').setValue(false)

}

De N à P c'est bien la source SGH

De Q à AV la source est bien liste phrase H

ce sont des résultats qui doivent rester les même et visible mais ne doivent pas être recopier autre part que là où ils sont mais lorsque l'on rajoute une nouvelle ligne, toutes les cases cocher doivent se décocher pour recommencer une nouvelle fois

Est-ce que tu as pu essayé la version proposée ? ou on verra cela lundi ...

Je me suis posé la question de l'endroit le moins pénalisant pour les formules :

  1. les laisser sur la dernière ligne de l'inventaire ... le risque est que
    1. si la dernière ligne est par exemple la 19
    2. et si on introduit à la main une valeur en A20
    3. alors les formules resteront en ligne 19 et de fil en aiguille, seule la ligne 19 sera réactualisée (sachant que ce n'est pas forcément la bonne puisque pas la dernière, donc avec aussi risque de confusion)
  2. passer les formules dans les 2 onglets avec cases à cocher, ce que j'avais commencé à faire, et valider chaque feuille ... le risque est que l'on ne sache pas vraiment si on a validé les 2 groupes/onglets de cases à cocher ou un seul à la fois
  3. j'en suis donc arrivé à plutôt faire une feuille récap
    1. avec toutes les formules, au moins elles ne devraient pas disparaître
    2. avec le rappel du produit (dernière valeur colonnes A et B) pour être certain qu'on transférera les valeurs sur ce produit.

Autre réflexion : je me suis demandé s'il était possible de faire du "reverse engineering" en quelque sorte, partir d'un produit, mettre à jour les cases à cocher en fonction du produit pour ensuite modifier. On verra cela par la suite si c'est utile ou pas.

Bonsoir,

J'ai bien vu la nouvelle version avec le nouvel onglet récapitulatif. Je le trouve très maniable ! Je l'ai seulement changé de place. J'ai également fait des tests qui se sont avérés très concluant.

Pour le reverse engineering, c'est pas déjà ce que vous avez fait ? Puisque je rentre un nouveau produit, je coche les cases que je souhaites, et sur le récapitulatif, je valide puis delete

Je suis vraiment en admiration devant ce que vous avez déjà fait !

Un grand merci !

Ce que je pensais faire, c'était pouvoir repartir d'un produit "ancien" sur lequel tu avais déjà établi la cartographie des risques, et retrouver les cases à cocher pour pouvoir modifier. Mais c'est un peu la cerise sur le gâteau, je vais laisser de côté pour le moment.

N'hésite pas à revenir ici, si c'est google sheet tu me trouveras sur ton chemin.

Et n'oublie pas de fermer ce fil de discussion en cliquant sur

Bonjour,

je pense qu'à un moment, il y aura des erreurs dans l'entrée de nouveaux produits. Si vous le souhaitez et pouvez travailler dessus, un reverse engineering sera pas mal du tout.

De plus, j'ai une petite question concernant une formule. sur l'onglet Inventaire (répétition sur l'onglet récap), de R à AV ma formule met des croix dans les bonnes cases. cependant si j'ai 3 fois le même risque, il y aura 3 croix. Avez vous une idée pour qu'à la fin je n'ai qu'une seule croix ?

je vais voir pour le "reverse"

oui, j'avais vu les croix multiples et je me posais la question, mais je n'avais pas voulu retravailler ce que tu maîtrisais; maintenant que tu le signales, je vais voir

Exemple en colonne R, pour n'avoir qu'une seule croix,

remplace

=CONCATENATE(IF('liste phrase H'!$A$83=TRUE;"x";"");IF('liste phrase H'!$A$23=TRUE;"x";""))

par

=IF(or('liste phrase H'!$A$83=TRUE;'liste phrase H'!$A$23=TRUE);"x";"")

idem pour le reste

merci

@Louise, voir proposition autre formule en mp avec fichier dont tu as l'accès

=if(counta(iferror(filter('liste phrase H'!$A3:$A;'liste phrase H'!$A3:$A=TRUE;'liste phrase H'!$D3:$D=R$1);))>0;"x";)

cela permet de mettre en paramètre le titre de la colonne

Rechercher des sujets similaires à "sheets remise zero quand nouvelle ligne"