Incrémentation automatique de lignes entre 2 feuilles
C'était donc toi Steelson ? Je me disais il a disparu ! Cool !
Bon ben déjà bravo ! Gros niveau !
Alors si je comprends bien la macro ne déclenché pas un horodotage mais recopie le dernier horodatage de l onglet "reponse au formulaire". Il n y a pas 2 horodatage mais 1 horodatage et 1 copier collé de celui ci.
Ok nickel parfait. On a notre correspondance.
Je viens d'ajouter un déclencheur automatique, a chaque formulaire envoyé, la macro se déclenche.
Ensuite :
Les reponses au formulaire sont ajoutées.
Et la parcontre, je ne suis plus.
L'horodatage est bien effectué, nickel. Parcontre il n y a pas de tri alphabétique (à savoir que sur le fichier d'origine le tri se fait par : Section - Groupe - Nom - Prénom).
la en faisant un sort Mister A & B ont bien été reclassé mais leurs horodatage et les colonnes F / G sont resté statiques.
Un truc m'échappe ?
J'ai remonté la formule en B5 en y incluant les titres et mis un affichage avec 5 lignes d'en-tête, le tri manuel s'effectue correctement, avec A, F et G.
={"Nom"\"Prénom"\"Age"\"Formule";arrayformula(if($A$6:$A="";;arrayformula(vlookup(to_text(A6:A);arrayformula(to_text('Réponses au formulaire 1'!A3:E));{2\3\4\5};0))))}On peut inclure ce tri dans le script.
function maj() {
var classeur = SpreadsheetApp.getActiveSpreadsheet();
var formulaire = classeur.getSheetByName('Réponses au formulaire 1');
var liste = classeur.getSheetByName('Liste adhérents version Steelson Staliyevich');
var derF = getLastDataRow(formulaire,"A")
var derL = liste.getLastRow()
var valeurs = liste.getRange('A'+5+':A'+derL).getDisplayValues().join().split(",")
var ajout=[]
for (var i=3;i<=derF;i++){
var reponse = formulaire.getRange('A'+i).getDisplayValue()
var ligne = valeurs.indexOf(reponse);
if (ligne == -1) {
ajout.push([reponse])
}
}
if (ajout.length) {
liste.getRange(derL+1,1,ajout.length,1).setValues(ajout);
SpreadsheetApp.flush();
var data = liste.getRange(6, 1, derL, 7);
data.sort([{column: 2, ascending: true}, {column: 3, ascending: true}]);
}
}
function getLastDataRow(sheet,col) {
var lastRow = sheet.getLastRow();
var range = sheet.getRange(col + lastRow);
if (range.getValue() !== "") {
return lastRow;
} else {
return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
}
}Je viens d'ajouter un déclencheur automatique, a chaque formulaire envoyé, la macro se déclenche.
je ne connais pas bien Google Forms, cela m'intéresse, comment tu fais ? et dans ce cas je pense que la macro doit pouvoir être très allégée.
Alors plusieurs choses.
Ta formule j'en ai pas la maitrise, mais j'arrive plus ou moins à l'interpréter, la j'ai pu choisir l'age plutot que la date de naissance.
J'ai bien vu les colonne A & F etre dynamique et suivre B C D E, ca c'est super. Parcontre comme tu peux le voir la, le tri alphabétique ne se fait pas totalement.
Concernant les macro je n'ai aucune connaissance, ca sera la prochaine étape un jour, du coup celle que tu viens de mettre sur ton dernier poste, c'est une 2 eme macro pour le tableau ou c'est une modification de la première ? On a qu une seule macro d apres ce que j'ai compris. Tu confirmes ?
Concernant les déclencheurs, sur la console sur le volet de gauche tu as Déclencheurs en 3 eme position.
Tu peux ajouter un déclencheur en bas à droite, la tu vois que j'en ai deja mis un.
Et la je comprends pas toujours tout, mais tu peux choisir un déclenchement en rapport avec la feuille de calcul, horaire, ou agenda.
Donc la on vas partir sur un déclenchement via un evenement via la feuille de calcul.
Et ensuite on determine le type d'événement qui vas déclencher la macro, comme tu peux le voir ici.
Je te donne un cas d'usage que j'ai sur un autre tableau.
Un professeur de danse donne des cours à 18 éleves tous les mercredi apres midi sous réservation.
Du coup on crée un formulaire bien sympa ou on s inscrit à l un des 3 cours de 6 éleves max.
L'addon Formranger (tu trouveras aisement plein de tuto qui t expliqueront bien mieux que moi) fait en sorte que sur les 3 choix de réservation : 14h00 , 15h00 ou 16h00 des qu il détecte 6 inscrits dans le créneaux en question sur le sheets, il retire la possibilité de ce choix sur le formulaire.
Ensuite le mercredi après midi, quand les cours sont passés et qu il faut s'inscrire à ceux de la semaine prochaine, la entre jeu la macro qui pour ordre tous les mercredi à 23h00 de supprimer les lignes de 2 à 18 de l'onglet "Réponses aux formulaires1!".
Macro que j'ai pu enregistrer avec l'enregistreur de macro proposé sur Sheets.
Du coup tous les jeudi matin c'est reset, le tableau est vierge, ca se relibere sur le formulaire.
Donc voila le combo formulaire + formranger + enregistreur de macro + déclencheur de macro.
A ton niveau tu peux rédiger toute la macro toi même. Mais certains de ces outils te permettront certainement de les simplifier et les rendre plus accessibles !
ok pour les déclencheurs, je pensais en fait que tu avais fait un script sur le formulaire lui-même, ce que je cherche à faire ... mais j'ai bien compris qu'en fait tu déclenchais le script à chaque ouverture de fichier
il n'y a qu'une seule macro, j'ai légèrement modifiée et ajouté un tri sur les colonnes 2 et 3
pour la formule, voici comment la lire :
{"Nom"\"Prénom"\"Age"\"Formule"; >> ce sont les en-têtes, la séparation \ signifie que c'est sur la même ligne et ; que l'on passe à la ligne
arrayformula(
if($A$6:$A="";; >> s'il n'y a pas d'horodatage en A je n'affiche rien, sinon la formule principale est ici :
arrayformula(
vlookup(
to_text(A6:A);arrayformula(to_text('Réponses au formulaire 1'!A3:E))
>> je cherche la valeur de l'horodatage qui sert de référence dans la feuille de réponse
>> comme il s'agit d'heure, je passe les valeurs en texte sinon je n'arrive pas à les trouver
;{2\3\4\5} >> et je prend ensuite d'un seul coup les 2è, 3è, 4è et 5è colonnes du tableau
;0))))}