Bonjour tout le monde.
J'ai choisi Google Sheets pour son côté "portable". La possibilité d'avoir des feuilles visibles autant sur un mac qu'un PC ou sous Android était pour moi importante.
Il ne m'est pas venu à l'esprit, à ce moment là, de douter de l'efficacité de l'exécution des scripts.
Mais, là maintenant, ce que je constate comme niveau de performance me ramène à une époque préhistorique, c'est simplement incroyable.
Je demande (pour l'instant) très peu de choses au script, mais je comptais bien en faire beaucoup plus dans un 2ième temps.
Pour l'instant, j'ai un simple bout de code qui parcourt une feuille ne contenant que 22 lignes et qui, selon la valeur dans une colonne donnée, décide de faire un "align-gauche/italic" pour les valeurs inférieures à 0 et un "align-droite/normal" pour les autres.
Il lui faut entre 6 et 8 secondes pour ça! pour 22 lignes! et 16 secondes pour 50 lignes, c'est donc proportionnel!
Même en 1990, il y a 30 ans de cela, un tel temps d'exécution pour si peu de choses était impensable.
Juste pour info, ma machine tourne sous windows10, elle est toute neuve et extrèmement performante. Même chose pour ma connexion internet (fibre).
Là, je m'inquiète vraiment sur le choix que j'ai fait, parce que les feuilles à venir seront bien plus lourdes que celles d'aujourd'hui.
Ou alors j'ai mal écrit le script (peut-être qu'il y a quelque chose qui m'échappe).
Je vais joindre le script, d'avance merci et bonne journée.
var wc_premiereLigne = 7;
function credit_debit(){
var w_sheet = SpreadsheetApp.getActiveSheet();
var w_maxRow = getMaxRowBySheet(w_sheet);
var r;
for (r=wc_premiereLigne; r < w_maxRow; r++){
creditDebit(w_sheet, r);
}
}
function creditDebit(ww_sheet, ww_row) {
var w_range = ww_sheet.getRange('C' + ww_row + ':' + 'D' + ww_row);
if (ww_sheet.getRange(ww_row, 4).getValue() > 0) {
w_range.setFontStyle('normal');
w_range.setHorizontalAlignment('right');
} else {
w_range.setFontStyle('italic');
w_range.setHorizontalAlignment('left');
}
}
function getMaxRowBySheet(ww_sheet){
var r;
var w_maxRow = 0;
for (r=wc_premiereLigne; r<1000 && w_maxRow==0; r++) {
if (ww_sheet.getRange(r, 2).getValue()=='' && ww_sheet.getRange(r, 3).getValue()=='' && ww_sheet.getRange(r, 4).getValue()=='') { // la date, le total et le détail nulls
w_maxRow=r;
}
}
return w_maxRow;
}