Même version plus rapide s'il y a beaucoup de plages
Nécessite d'activer le service Google Sheets API
function quickSum3DbyMapping() {
var mapping = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('mapping');
var synth = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('synthèse')
var cells = mapping.getRange(1, 1, mapping.getLastRow(), mapping.getLastColumn()).getValues();
var result = Array.from({ length: mapping.getLastRow() }, () => Array.from({ length: mapping.getLastColumn() }, () => 0));
for (var i = 0; i < synth.getIndex() - 1; i++) {
var x = SpreadsheetApp.getActiveSpreadsheet().getSheets()[i].getRange(1, 1, mapping.getLastRow(), mapping.getLastColumn()).getValues();
cells.forEach((row, i) => {
row.forEach((cell, j) => {
result[i][j] += (cell != '') ? x[i][j] * 1 : 0
})
});
}
const ranges = []
const values = []
cells.forEach((row, i) => {
row.forEach((cell, j) => {
if (cell != '') {
ranges.push(synth.getName() + '!' + columnToLetter(j + 1) + (i + 1))
values.push([result[i][j]])
}
})
});
const data = ranges.map((e, i) => ({ range: e, values: [values[i]] }));
const spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId()
Sheets.Spreadsheets.Values.batchUpdate({ data, valueInputOption: "USER_ENTERED" }, spreadsheetId);
}
function columnToLetter(column) {
var temp, letter = '';
while (column > 0) {
temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
}