Script: Copier et réduire des lignes de données provenant d'un formulaire
Bonjour à tous,
J'ai un fichier Google Sheet qui sert de destination d'un questionnaire Google (Form Responses) sur une première feuille 'Form Response' (Voir photo ci-jointe).Les
données correspondent à des requêtes et au suivi de commandes. J'ai besoin que les lignes de requêtes traitées ne soient plus visible sur la Feuille 'Form Reponse', mais quelles apparaissent sur la Feuille d'archives '2022.23' lorsque je clique sur 'Received' ou 'Cancelled' dans un menu déroulant dans la 7ieme colonne (G) - donc sous condition. L’intérêt est d'avoir exclusivement les commandes ouvertes/ en cours visibles sur la feuille 'Form Response' et uniquement les commandes traitées visibles dans la feuille d'archive afin de procéder à de futures recherches. Réduire ou filtrer les lignes sur la même feuille n'ai pas suffisant car je réalise souvent des recherches de commandes passées et cela nécessite constamment de réduire, puis ré-afficher les lignes.
Après divers tests et lectures de commentaires en ligne, j'ai réalisé que l'on ne peut pas séparer des données provenant d'un questionnaire Google (Form Responses) en les transférant vers une autre feuille par un script. Le script suivant fonctionne bien et transfère les lignes qui ne sont pas issues du formulaire mais n'a aucune action sur les données du formulaire. Donc, laissons tomber cette option.
function onEdit(e){
let r = e.range;
if (r.rowStart == 1 || e.value == null) return;
const sh = SpreadsheetApp.getActive();
const valArray = ["Received","Return Credited","Cancelled","Check Cashed"];
const destArray = ["2022.23","2022.23","2022.23","2022.23"];
let dest = sh.getSheetByName(destArray[valArray.indexOf(e.value)]);
let src = sh.getActiveSheet();
if (dest.getName() == src.getName()) return;
src.getRange(r.rowStart,1,1,32).moveTo(dest.getRange(dest.getLastRow()+1,1,1,32));
src.deleteRow(r.rowStart);
}En alternative, je recherche un script qui permet à la fois de 'copier/coller' des lignes sur la Feuille d'archive '2022.23', et de les réduire/filtrer dans la feuille 'Form Response' - le tout automatiquement lorsque je clique sur 'Received' ou 'Cancelled' dans la 7e colonne (Colonne G).
Quel serait le script pour ces actions ?
Note: Veuillez ne pas prendre en compte la feuille 'copy form response' sur la photo, ce n'est qu'une réplique de la feuille connectée au formulaire pour les tests précédemment effectués.
Merci par avance.
Bonjour,
Ce script fonctionne :
1- Il prend les status (dans mon exemple, en colonne 4)
2 - il choisit où sera à coller l'archivage (dans ce cas, j'ai en cellule A1 de l'onglet d'archive 2022.23 fait un =NBVAL()+2 afin de coller à la suite, mais ça peut être modifié)
3 - une boucle vérifie si les statuts précédemment mis dans la variable "statut" correspondent au statut "terminé" > possibilité de changer, de mettre une cellule même si nécessaire.
4 - si le statut est bel et bien terminé, les infos sont copiées dans l'archivage, puis, la ligne est supprimée de l'onglet form.
function autocopie(){
const form = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Réponses au formulaire 1");
const dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("2022.23");
var statut = form.getRange(2,1,10,4).getValues(); // 10 = nb de ligne à vérifier, si possible mettre une variable sur la taille de l'onglet form + 4 est ici mon nombre de colonnes, c'est à changer.
var lieudecollage = dest.getRange(1,1).getValue();
var nbstatut = statut.length;
for (i=0;i<nbstatut;i++){
if (statut[i][3] == "terminé"){
dest.getRange(lieudecollage,1).setValue(statut[i][0])
dest.getRange(lieudecollage,2).setValue(statut[i][1])
dest.getRange(lieudecollage,3).setValue(statut[i][2])
dest.getRange(lieudecollage,4).setValue(statut[i][3]) // IDEM je m'arrète à 4 coloones, à modifier si beosin.
form.deleteRow(statut[i].length)
}
}
}Et ça fonctionne même si on apporte des nouvelles réponses au formulaire, voici si nécessaire une copie du fichier :
https://docs.google.com/spreadsheets/d/1KNLXLycQ6WcgbNlpE8gV0VQdn3n2KouBbAoWnPH4HJ4/copy