Macro GoogleSheet - Création quotidienne feuille avec nom du jour

Bonjour à toutes et tous,

L'école dans laquelle je travaille doit assurer un suivi quotidien, et archivé, du transport de bus (pour assurer une remontée des cas contacts covid, pour savoir instantanément qui est présent dans le bus (obligatoire dans un établissement scolaire à l'étranger), etc.).
Compléter un sheet en ligne avec une douchette ne pose pas de problème. Par contre, je cherche à automatiser la sauvegarde quotidienne des données des deux premières colonnes du premier onglet (BUS 1), dans un autre onglet créé automatiquement, et portant la date à laquelle ont été réalisées les saisies par douchette. Une fois cette sauvegarde effectuée, les informations saisies le jour précédent seront effacées pour commencer une nouvelle journée de saisie.

J'ai commencé à créer une macro, mais franchement, je n'y connais vraiment pas grand chose...

https://docs.google.com/spreadsheets/d/1aeGMs3lm3Ph-iCDqMfKmqsIL7xcewZIxIYiO8xt1keo/edit?usp=sharing

Si vous avez des pistes, des conseils, alors je suis preneur.

Avec mes remerciements anticipés pour vos éventuelles contributions! Belle journée à toutes et tous.

Cédric

Bonjour,

D'abord, j'ai changé les paramètres du script en mettant Asia/Bangkok pour être en conformité avec ta feuille.

image

j'ai ajouté un menu

function onOpen() {
  SpreadsheetApp.getUi().createMenu('↓ Menu ↓')
    .addItem('👉 Sauvegarder les données', 'sauvegardeQuotidienneOnglet')
    .addToUi();
}

et le script que tu lances avec le menu en haut à droite

function sauvegardeQuotidienneOnglet() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var f = SpreadsheetApp.getActive();
  var range = f.getDataRange()
  var data = range.getValues()
  var date = Utilities.formatDate(f.getRange('B1').getValue(), Session.getScriptTimeZone(), "dd/MM/yyyy");
  var newf = ss.insertSheet().setName(date);
  newf.getRange(1,1,data.length,2).setValues(data)
  range.clearContent()
};

attention, on ne peut dans ce cas le faire qu'une seule fois par jour

https://docs.google.com/spreadsheets/d/1ao4kdFb1-FWDWCVDmFlrIu9kMXTSBIRZVlSbwBb87SU/copy


je pense qu'il serait plus intéressant de mettre à la queue leu leu dans un onglet et ensuite filtrer par date

Bonjour

Merci pour ce retour. Je vais me pencher sur le contenu des scripts proposés, car ça marche bien, génial, mais je ne comprends pas tout:
- Est-ce que je dois moi aussi modifier les paramètres du script pour la zone? Je ne vois pas pour l'instant comment faire (je vais chercher).
- Je comptais automatiser ensuite le script, tous les jours (donc aucun inconvénient à ce que cela ne soit réalisé qu'une fois par jour, c'est ce qui est recherché) par exemple à 23h, mais sans écraser la colonne B qui conserve, elle, ses formules. En effet, les personnes chargées de la douchettes ne sauront inscrire la formule dédiée qui intègrera aussi l'heure, et le nom du bus.

En tout cas, merci pour le coup de main!

Belle journée!

Cédric

- Est-ce que je dois moi aussi modifier les paramètres du script pour la zone? Je ne vois pas pour l'instant comment faire (je vais chercher).

il vaut mieux aligner la timezone du script et celle de la feuille, or au début de la nouvelle interface de l'éditeur de script google avait fait l'erreur de l'initialiser à New York ! je n'ai trouvé aucune documentation sur le sujet, j'ai trouvé un bout de réponse auprès d'un japonais...

  • il faut aller dans Paramètres du projet (sidebar à gauche) et cliquer sur la checkbox "Afficher le fichier manifeste "appsscript.json" dans l'éditeur"
  • revenir sur l'éditeur qui fera apparaître appscript.json
  • et changer la timezone, voici une liste (exhaustive ?)
/*
var world_timezones =
[
    'Europe/Andorra',
    'Asia/Dubai',
    'Asia/Kabul',
    'Europe/Tirane',
    'Asia/Yerevan',
    'Antarctica/Casey',
    'Antarctica/Davis',
    'Antarctica/DumontDUrville', 
    'Antarctica/Mawson',
    'Antarctica/Palmer',
    'Antarctica/Rothera',
    'Antarctica/Syowa',
    'Antarctica/Troll',
    'Antarctica/Vostok',
    'America/Argentina/Buenos_Aires',
    'America/Argentina/Cordoba',
    'America/Argentina/Salta',
    'America/Argentina/Jujuy',
    'America/Argentina/Tucuman',
    'America/Argentina/Catamarca',
    'America/Argentina/La_Rioja',
    'America/Argentina/San_Juan',
    'America/Argentina/Mendoza',
    'America/Argentina/San_Luis',
    'America/Argentina/Rio_Gallegos',
    'America/Argentina/Ushuaia',
    'Pacific/Pago_Pago',
    'Europe/Vienna',
    'Australia/Lord_Howe',
    'Antarctica/Macquarie',
    'Australia/Hobart',
    'Australia/Currie',
    'Australia/Melbourne',
    'Australia/Sydney',
    'Australia/Broken_Hill',
    'Australia/Brisbane',
    'Australia/Lindeman',
    'Australia/Adelaide',
    'Australia/Darwin',
    'Australia/Perth',
    'Australia/Eucla',
    'Asia/Baku',
    'America/Barbados',
    'Asia/Dhaka',
    'Europe/Brussels',
    'Europe/Sofia',
    'Atlantic/Bermuda',
    'Asia/Brunei',
    'America/La_Paz',
    'America/Noronha',
    'America/Belem',
    'America/Fortaleza',
    'America/Recife',
    'America/Araguaina',
    'America/Maceio',
    'America/Bahia',
    'America/Sao_Paulo',
    'America/Campo_Grande',
    'America/Cuiaba',
    'America/Santarem',
    'America/Porto_Velho',
    'America/Boa_Vista',
    'America/Manaus',
    'America/Eirunepe',
    'America/Rio_Branco',
    'America/Nassau',
    'Asia/Thimphu',
    'Europe/Minsk',
    'America/Belize',
    'America/St_Johns',
    'America/Halifax',
    'America/Glace_Bay',
    'America/Moncton',
    'America/Goose_Bay',
    'America/Blanc-Sablon',
    'America/Toronto',
    'America/Nipigon',
    'America/Thunder_Bay',
    'America/Iqaluit',
    'America/Pangnirtung',
    'America/Atikokan',
    'America/Winnipeg',
    'America/Rainy_River',
    'America/Resolute',
    'America/Rankin_Inlet',
    'America/Regina',
    'America/Swift_Current',
    'America/Edmonton',
    'America/Cambridge_Bay',
    'America/Yellowknife',
    'America/Inuvik',
    'America/Creston',
    'America/Dawson_Creek',
    'America/Fort_Nelson',
    'America/Vancouver',
    'America/Whitehorse',
    'America/Dawson',
    'Indian/Cocos',
    'Europe/Zurich',
    'Africa/Abidjan',
    'Pacific/Rarotonga',
    'America/Santiago',
    'America/Punta_Arenas',
    'Pacific/Easter',
    'Asia/Shanghai',
    'Asia/Urumqi',
    'America/Bogota',
    'America/Costa_Rica',
    'America/Havana',
    'Atlantic/Cape_Verde',
    'America/Curacao',
    'Indian/Christmas',
    'Asia/Nicosia',
    'Asia/Famagusta',
    'Europe/Prague',
    'Europe/Berlin',
    'Europe/Copenhagen',
    'America/Santo_Domingo',
    'Africa/Algiers',
    'America/Guayaquil',
    'Pacific/Galapagos',
    'Europe/Tallinn',
    'Africa/Cairo',
    'Africa/El_Aaiun',
    'Europe/Madrid',
    'Africa/Ceuta',
    'Atlantic/Canary',
    'Europe/Helsinki',
    'Pacific/Fiji',
    'Atlantic/Stanley',
    'Pacific/Chuuk',
    'Pacific/Pohnpei',
    'Pacific/Kosrae',
    'Atlantic/Faroe',
    'Europe/Paris',
    'Europe/London',
    'Asia/Tbilisi',
    'America/Cayenne',
    'Africa/Accra',
    'Europe/Gibraltar',
    'America/Godthab',
    'America/Danmarkshavn',
    'America/Scoresbysund',
    'America/Thule',
    'Europe/Athens',
    'Atlantic/South_Georgia',
    'America/Guatemala',
    'Pacific/Guam',
    'Africa/Bissau',
    'America/Guyana',
    'Asia/Hong_Kong',
    'America/Tegucigalpa',
    'America/Port-au-Prince',
    'Europe/Budapest',
    'Asia/Jakarta',
    'Asia/Pontianak',
    'Asia/Makassar',
    'Asia/Jayapura',
    'Europe/Dublin',
    'Asia/Jerusalem',
    'Asia/Kolkata',
    'Indian/Chagos',
    'Asia/Baghdad',
    'Asia/Tehran',
    'Atlantic/Reykjavik',
    'Europe/Rome',
    'America/Jamaica',
    'Asia/Amman',
    'Asia/Tokyo',
    'Africa/Nairobi',
    'Asia/Bishkek',
    'Pacific/Tarawa',
    'Pacific/Enderbury',
    'Pacific/Kiritimati',
    'Asia/Pyongyang',
    'Asia/Seoul',
    'Asia/Almaty',
    'Asia/Qyzylorda',
    'Asia/Qostanay', 
    'Asia/Aqtobe',
    'Asia/Aqtau',
    'Asia/Atyrau',
    'Asia/Oral',
    'Asia/Beirut',
    'Asia/Colombo',
    'Africa/Monrovia',
    'Europe/Vilnius',
    'Europe/Luxembourg',
    'Europe/Riga',
    'Africa/Tripoli',
    'Africa/Casablanca',
    'Europe/Monaco',
    'Europe/Chisinau',
    'Pacific/Majuro',
    'Pacific/Kwajalein',
    'Asia/Yangon',
    'Asia/Ulaanbaatar',
    'Asia/Hovd',
    'Asia/Choibalsan',
    'Asia/Macau',
    'America/Martinique',
    'Europe/Malta',
    'Indian/Mauritius',
    'Indian/Maldives',
    'America/Mexico_City',
    'America/Cancun',
    'America/Merida',
    'America/Monterrey',
    'America/Matamoros',
    'America/Mazatlan',
    'America/Chihuahua',
    'America/Ojinaga',
    'America/Hermosillo',
    'America/Tijuana',
    'America/Bahia_Banderas',
    'Asia/Kuala_Lumpur',
    'Asia/Kuching',
    'Africa/Maputo',
    'Africa/Windhoek',
    'Pacific/Noumea',
    'Pacific/Norfolk',
    'Africa/Lagos',
    'America/Managua',
    'Europe/Amsterdam',
    'Europe/Oslo',
    'Asia/Kathmandu',
    'Pacific/Nauru',
    'Pacific/Niue',
    'Pacific/Auckland',
    'Pacific/Chatham',
    'America/Panama',
    'America/Lima',
    'Pacific/Tahiti',
    'Pacific/Marquesas',
    'Pacific/Gambier',
    'Pacific/Port_Moresby',
    'Pacific/Bougainville',
    'Asia/Manila',
    'Asia/Karachi',
    'Europe/Warsaw',
    'America/Miquelon',
    'Pacific/Pitcairn',
    'America/Puerto_Rico',
    'Asia/Gaza',
    'Asia/Hebron',
    'Europe/Lisbon',
    'Atlantic/Madeira',
    'Atlantic/Azores',
    'Pacific/Palau',
    'America/Asuncion',
    'Asia/Qatar',
    'Indian/Reunion',
    'Europe/Bucharest',
    'Europe/Belgrade',
    'Europe/Kaliningrad',
    'Europe/Moscow',
    'Europe/Simferopol',
    'Europe/Kirov',
    'Europe/Astrakhan',
    'Europe/Volgograd',
    'Europe/Saratov',
    'Europe/Ulyanovsk',
    'Europe/Samara',
    'Asia/Yekaterinburg',
    'Asia/Omsk',
    'Asia/Novosibirsk',
    'Asia/Barnaul',
    'Asia/Tomsk',
    'Asia/Novokuznetsk',
    'Asia/Krasnoyarsk',
    'Asia/Irkutsk',
    'Asia/Chita',
    'Asia/Yakutsk',
    'Asia/Khandyga',
    'Asia/Vladivostok',
    'Asia/Ust-Nera',
    'Asia/Magadan',
    'Asia/Sakhalin',
    'Asia/Srednekolymsk',
    'Asia/Kamchatka',
    'Asia/Anadyr',
    'Asia/Riyadh',
    'Pacific/Guadalcanal',
    'Indian/Mahe',
    'Africa/Khartoum',
    'Europe/Stockholm',
    'Asia/Singapore',
    'America/Paramaribo',
    'Africa/Juba',
    'Africa/Sao_Tome',
    'America/El_Salvador',
    'Asia/Damascus',
    'America/Grand_Turk',
    'Africa/Ndjamena',
    'Indian/Kerguelen',
    'Asia/Bangkok',
    'Asia/Dushanbe',
    'Pacific/Fakaofo',
    'Asia/Dili',
    'Asia/Ashgabat',
    'Africa/Tunis',
    'Pacific/Tongatapu',
    'Europe/Istanbul',
    'America/Port_of_Spain',
    'Pacific/Funafuti',
    'Asia/Taipei',
    'Europe/Kiev',
    'Europe/Uzhgorod',
    'Europe/Zaporozhye',
    'Pacific/Wake',
    'America/New_York',
    'America/Detroit',
    'America/Kentucky/Louisville',
    'America/Kentucky/Monticello',
    'America/Indiana/Indianapolis',
    'America/Indiana/Vincennes',
    'America/Indiana/Winamac',
    'America/Indiana/Marengo',
    'America/Indiana/Petersburg',
    'America/Indiana/Vevay',
    'America/Chicago',
    'America/Indiana/Tell_City',
    'America/Indiana/Knox',
    'America/Menominee',
    'America/North_Dakota/Center',
    'America/North_Dakota/New_Salem',
    'America/North_Dakota/Beulah',
    'America/Denver',
    'America/Boise',
    'America/Phoenix',
    'America/Los_Angeles',
    'America/Anchorage',
    'America/Juneau',
    'America/Sitka',
    'America/Metlakatla',
    'America/Yakutat',
    'America/Nome',
    'America/Adak',
    'Pacific/Honolulu',
    'America/Montevideo',
    'Asia/Samarkand',
    'Asia/Tashkent',
    'America/Caracas',
    'Asia/Ho_Chi_Minh',
    'Pacific/Efate',
    'Pacific/Wallis',
    'Pacific/Apia',
    'Africa/Johannesburg'
];
*/
Bonjour,

je pense qu'il serait plus intéressant de mettre à la queue leu leu dans un onglet et ensuite filtrer par date

Oui, après mure réflexion, je pense que c'est plus judicieux, tu as raison. Par contre, il faut que je fasse attention à copier les données en dessous de la dernière cellule de la colonne A utilisée pour ne pas écraser les précédentes.

J'ai trouvé la fonction dernière ligne utilisée, mais je ne sais pas vraiment l'utiliser...

function TEST() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A:B').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('SAUVEGARDE'), true);{
    DerniereLigneUtilisee = Cells(Rows.Count, A).End(xlUp).Row
  }
  spreadsheet.getRange('BUS_1!A:B').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('BUS_1'), true);
  spreadsheet.getRange('A:A').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};

Quelle galère quand on n'y connait rien...

C'est bien d'avoir essayé, c'est comme cela qu'on apprend, mais ceci me semble être de l'excel Cells(Rows.Count, A).End(xlUp).Row

function onOpen() {
  SpreadsheetApp.getUi().createMenu('↓ Menu ↓')
    .addItem('👉 Sauvegarder les données', 'archiver')
    .addToUi();
}
function archiver() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var f = SpreadsheetApp.getActive();
  var range = f.getDataRange()
  var data = range.getValues()
  var archive = ss.getSheetByName('BDD')
  archive.getRange(archive.getLastRow()+1,1,data.length,2).setValues(data)
  range.clearContent()
}

mets bien des titres de colonnes dans l'onglet BDD

en gas (google app script) la dernière est getLastRow()

Merci encore Mikhail Staliyevich alias Mike Steelson

Cela fonctionne nickel... Et dernier point, comment n'effacer que les données de la première colonne de ma première feuille? Car là, cela m'écrase tout...

Excellente journée

Bonjour,

comment n'effacer que les données de la première colonne de ma première feuille? Car là, cela m'écrase tout...

de la feuille "BUS_1" ? et on laisse la seconde colonne avec des dates comme cela ? confirme bien de façon à ce que je prenne aussi l'impact sur la copie elle-même

Oui exactement

Oui exactement

function onOpen() {
  SpreadsheetApp.getUi().createMenu('↓ Menu ↓')
    .addItem('👉 Sauvegarder les données', 'archiver')
    .addToUi();
}

function archiver() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var f = SpreadsheetApp.getActive();
  Browser.msgBox(f.getLastDataRow())
  var data = f.getRange('A1:B'+f.getLastDataRow()).getValues()
  Browser.msgBox(data)
  var archive = ss.getSheetByName('SAUVEGARDE')
  archive.getRange(archive.getLastRow()+1,1,data.length,data[0].length).setValues(data)
  f.getRange('A1:A'+f.getLastDataRow()).clearContent()
}

Object.prototype.getLastDataRow = function(col){
  var lastRow = this.getLastRow();
  if (col == null){col='A'}
  var range = this.getRange(col + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }  
};

et cerise sur le gâteau, efface la colonne B et mets ceci en B1

=ARRAYFORMULA(IF(A1:A<>"";TODAY();))

tu ne seras pas limité en nombre de lignes

Un grand merci à Mikhail Staliyevich alias Mike Steelson

Rechercher des sujets similaires à "macro googlesheet creation quotidienne feuille nom jour"