Script : Nettoyage d'une plage de cellule

Bonjour,

J'ai un script dans une feuille (formulaire) qui enregistre (bouton "enregistrer") dans une autre feuille (liste des pb) les valeur affichées dans une plage de données.

(Lien vers mon fichier de travail : https://docs.google.com/spreadsheets/d/11HIs5Vu5PKrNBsP2lcUw-gEwh_WUW1jTxDlaEIjIjI4/edit?usp=sharing)

J'aimerais qu'après avoir recopié les lignes, le script efface les valeurs G6:G50 de la feuille "formulaire".

Les valeurs de la plage G6:G50 sont renseignées par l'opérateur, l'idée est donc de lui épargner d'avoir à effacer ces valeurs lors du passage de l'élève suivant. Cela réduirait aussi le risque d'erreur.

Est-ce possible ? Comment ?

Voici le script :

function enregistrer() {
  const fichierSheet = SpreadsheetApp.getActiveSpreadsheet(); // fichier sheet actif
  const formulaire = fichierSheet.getSheetByName('formulaire'); // onglet formulaire
  const listePb = fichierSheet.getSheetByName('liste des pb'); // onglet liste des pb

  var nbLigne = formulaire.getLastRow()-5; // calcule le nombre de ligne du fichier - 6 (car les 1ères données sont en ligne 6)
  var detail = formulaire.getRange(6,1,nbLigne,8).getValues(); // met dans une variables les données à partir de la ligne 6, colonne 1 jusqu'à la dernière ligne, colonne 8
  var nomPrenom = formulaire.getRange('B3').getValue(); // met la cellule nom prenom dans une variable
  var classe = formulaire.getRange('D3').getValue(); // met la cellule classe dans une variable

  for (var i = 0; i < detail.length; i++) { // boucle sur le nombre de lignes dans la variable détail
    listePb.appendRow([nomPrenom,classe].concat(detail[i])); // insere i lignes du nom prenom, classe + de ligne du détail
   }

}

Bonjour,

Voici un exemple de code :

const nettoyage = formulaire.getRangeList(['G6:G50']).getRanges();
nettoyage.forEach(function (cell){cell.clearContent();})

Ligne 1 on stocke les plages dans une variable (ce code est initialement prévu pour sélectionner plusieurs plages, séparés par des virgules).

Ligne 2 à l'aide de forEach (qui est une boucle) on utilise la fonction clearContent() sur chaque cellule.

J'utilise toujours ce code, car adaptable à plusieurs plages, si G6:G50 est fixe et que vous n'avez que cette plage, vous pouvez tenter cette simple ligne :

var nettoyage = formulaire.getRange('G6:G50').clearContent();

Bonjour,

J'ai testé

var nettoyage = formulaire.getRange('G6:G50').clearContent();

ça fonctionne parfaitement

Merci

Bonsoir,

Désolé, je reviens sur ce script. Je pensais que tout était ok mais il semble depuis ce soir qu'il ne fonctionne plus. C'est très étonnant.

lien fichier travail : https://docs.google.com/spreadsheets/d/11HIs5Vu5PKrNBsP2lcUw-gEwh_WUW1jTxDlaEIjIjI4/edit?usp=sharing

Dans la feuille "formulaire" , si je renseigne une cellule de la colonne G (état), le script ne copie pas l'info dans la feuille cible "liste des pb" et le "nettoyage" ne fonctionne plus. J'ai beau comparer le code avec celui donné sur ce forum je ne vois pas ce qui cloche.

Je veux bien croire que je fatigue mais c'est tout de même déroutant. Je n'arrive pas à isoler ce qui peut mettre en défaut un script qui fonctionnait parfaitement.

Voici le code :

function enregistrer2() {
  const fichierSheet = SpreadsheetApp.getActiveSpreadsheet(); // fichier sheet actif
  const formulaire = fichierSheet.getSheetByName('formulaire'); // onglet formulaire
  const listePb = fichierSheet.getSheetByName('liste des pb'); // onglet liste des pb

  var nbLigne = formulaire.getLastRow()-5; // calcule le nombre de ligne du fichier - 6 (car les 1ères données sont en ligne 6)
  var detail = formulaire.getRange(6,1,nbLigne,9).getValues(); // met dans une variables les données à partir de la ligne 6, colonne 1 jusqu'à la dernière ligne, colonne 8
  var nomPrenom = formulaire.getRange('B3').getValue(); // met la cellule nom prenom dans une variable
  var classe = formulaire.getRange('D3').getValue(); // met la cellule classe dans une variable

  for (var i = 0; i < detail.length; i++) { // boucle sur le nombre de lignes dans la variable détail
    listePb.appendRow([nomPrenom,classe].concat(detail[i])); // insere i lignes du nom prenom + de ligne du détail
   }
var nettoyage = formulaire.getRange('G6:G50').clearContent();
}

Tu peux vider le cache de Google et rebooter ton ordi.

Souvent ça suffit à régler ce type de problèmes...

Bonjour,

Si malgré la solution proposée par Filoche ne fonctionne pas :

1 - vérifie le nom des onglets, ont-ils changé ?

SI problème persiste, ajoute :

Logger.log(detail) dans le code, pour voir si les données à traiter sont bien stockées dans la variable

Tu as une erreur de plage:

C'est:

var nettoyage = formulaire.getRange('A6:G50').clearContent();

Bonjour,

Merci pour vos réponses. Je viens de tester :

- vider le cache de firefox, relancer l'ordi et test : pb idem . Changé d'ordi et nouveau test : bug idem

- pour la désignation de la plage : c'est bien G6:G50 si je fais A6:G50 ça me supprime tout le tableau des références, je veux simplement l'effacement des valeurs de G6 à G50

- j'ai ajouté au script Logger.log(detail) et il semble que les valeurs soient prises en compte, voir capture ecran :

loggerlog

Le problème demeure : Le script fait le report des valeurs et le nettoyage lors du premier test, pour les fois suivantes : pas de report dans la page "liste des
pb" et pas de nettoyage de la colonne G dans "formulaire".

Je viens de constater un truc curieux : lorsque j'exécute le script depuis apps script : ça fonctionne pour le report et le nettoyage, y compris sur plusieurs enregistrements successifs.

J'ai vérifié le bouton "enregistrer" de l'onglet "formulaire" : c'est bien le bon script qui est assigné. J'ai supprimé l'assignation pour la refaire aussitôt : même pb.

Il semble donc y avoir un pb depuis le bouton enregistrer mais je ne vois pas bien ce que je peux faire.

alors là c'est étonnant, d'autant plus que vos feuilles sont bien déclarées

  const fichierSheet = SpreadsheetApp.getActiveSpreadsheet(); // fichier sheet actif
  const formulaire = fichierSheet.getSheetByName('formulaire'); // onglet formulaire
  const listePb = fichierSheet.getSheetByName('liste des pb'); // onglet liste des pb

Êtes-vous certain de bien avoir mis la fonction enregistrer2 sur votre bouton ?

Bonjour,

Je viens de faire une copie de ton fichier et le script fonctionne parfaitement

Je te transmets le lien pour que tu constates...

https://docs.google.com/spreadsheets/d/1Xcl1LrrHmy3h49tblh6NMJz-2Bx5zyQgl9ovzh2dYok/edit?usp=sharing

Cordialement,

Fil.

Merci d'avoir pris le temps de regarder.

J'ai testé ton fichier, effectivement ça fonctionne pour un premier enregistrement mais , si tu fais l'essai sur un autre élève : pas de report, plages pas nettoyées. Donc même pb.

je viens de faire l'essai sur d'autres élèves et ça fonctionne également.

Liste mise à jour et plage nettoyée...

Oui Pierre, j'ai bien assigner le script "enregistrer2" au bouton.

Je viens de refaire des essais :

- effacer l'historique du navigateur + changer de navigateur + changer de pc = même pb ( au deuxième enregistrement, pas de report ni de nettoyage), sur mon fichier ou celui de filoche.

C'est d'autant plus désespérant que ça semble fonctionner pour vous. Je commence à me dire que le pb est lié à mon compte google. Je ne vois aucun rapport logique ni de perspective de solution.

Peux-tu coller le script complet ?

Voici le script "enregistrer2" :

function enregistrer2() {
  const fichierSheet = SpreadsheetApp.getActiveSpreadsheet(); // fichier sheet actif
  const formulaire = fichierSheet.getSheetByName('formulaire'); // onglet formulaire
  const listePb = fichierSheet.getSheetByName('liste des pb'); // onglet liste des pb

  var nbLigne = formulaire.getLastRow()-5; // calcule le nombre de ligne du fichier - 6 (car les 1ères données sont en ligne 6)
  var detail = formulaire.getRange(6,1,nbLigne,9).getValues(); // met dans une variables les données à partir de la ligne 6, colonne 1 jusqu'à la dernière ligne, colonne 8
  var nomPrenom = formulaire.getRange('B3').getValue(); // met la cellule nom prenom dans une variable
  var classe = formulaire.getRange('D3').getValue(); // met la cellule classe dans une variable

  for (var i = 0; i < detail.length; i++) { // boucle sur le nombre de lignes dans la variable détail
    listePb.appendRow([nomPrenom,classe].concat(detail[i])); // insere i lignes du nom prenom + de ligne du détail
   }

var nettoyage = formulaire.getRange('G6:G50').clearContent();

}

Tu peux essayer de te connecter avec un autre compte Google...

Filoche : testé ton fichier depuis un autre cpte google : même problème.

J'ai tenté de recréer un nouveau fichier sur le compte depuis lequel je travaille : feuille formulaire, liste eleves, liste reference + copie du script = même chose.

Idem depuis un autre ordi ou autre navigateur.

Je viens de réessayer.... Le script fonctionne parfaitement chez moi...

Rechercher des sujets similaires à "script nettoyage plage"