Maintenant, la cerise sur le gâteau serait qu'une fois les quantités mise a jour via ton code, les colonne A et C de l'onglet ENTREESTOCK soit vidées
il serait alors plus intéressant de passer tes formules en arrayformula (et au passage supprimer a minima 900 lignes pour alléger ton fichier), si tu peux le faire de ton côté
function onOpen() {
var menu = [
{ name: "RAZ", functionName: "raz" }
];
SpreadsheetApp.getActiveSpreadsheet().addMenu("➪ M E N U", menu);
}
function raz() {
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('ENTREESTOCK')
var lr = Math.max(sh.getLastRow(),3)
sh.getRange('A2:A'+lr).clearContent()
sh.getRange('C2:C'+lr).clearContent()
}
et que les colonnes AE à AG de l'onglet CATA soient copiées vers une nouvelle feuille appelée COURSES, puis trié par "Denom perso" croissante sur ce nouvel onglet (ignorer "vide" et "0"), avant d'être envoyé vers l'impression puis de supprimer ce même onglet.
ok, mais sauf impression car cela pose souvent des problèmes, on peut par contre sortir en pdf
solution plus simple, sur une nouvelle feuille COURSES
=query(CATA!AE:AG;"select AG,AE,AF where AE>=0 or AF>=0 order by AG";1)
que tu imprimes