Optimisation Apps Script Google Sheet

Bonjour,

Je débute dans l'utilisation de Google Sheet et des scripts.

J'ai réussi a faire un script qui me permet de faire tout ça à la fois :

- Valider des ventes effectuées (Switch de la colonne "Vente en cours" vers colonne "Quantité vendu")

- Déduire les ventes effectuées du stock (Déduire la colonne "Vente en cours du stock")

Le problème c'est que le script prend énormément de temps à s'exécuter avec tout ces ".getValue/.setValue", j'ai essayé de suivre un tuto pour l'optimiser mais je ne suis pas assez bon.

Avec vous une solution pour l'optimiser ?

Voici le script :

function Vente_reserve() {

let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Antonin (Réserve - 2869)');

let stock_reserve = sheet.getRange('C3:C46');

let vteencours = sheet.getRange('E3:E46'); let qtevendu = sheet.getRange('F3:F46');

for(let x = 1; x <= 44; x ++ ){

a = stock_reserve.getCell(x,1).getValues()

b = vteencours.getCell(x,1).getValues()

c = qtevendu.getCell(x,1).getValues()

retrait_stock = +a - (+b)

ajout_histo_vente = +b + +c

stock_reserve.getCell(x,1).setValue(retrait_stock)

qtevendu.getCell(x,1).setValue(parseInt(ajout_histo_vente))

vteencours.getCell(x,1).setValue(0)

}

}

Bonjour,

utilise la balise </> qui se trouve au-dessus du cadre de dialogue pour pus de lisibilité

il faut remplacer en effet getvalue et setValue par une copie globale avant la boucle et une restitution globale après la boucle, donc travailler avec un array

peux-tu partager un fichier exemple? https://www.sheets-pratique.com/fr/cours/partage

Voilà le code =)

function Vente_reserve() {

let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Antonin (Réserve - 2869)');
let stock_reserve = sheet.getRange('C3:C46');
let vteencours = sheet.getRange('E3:E46'); 
let qtevendu = sheet.getRange('F3:F46');

for(let x = 1; x <= 44; x ++ ){

a = stock_reserve.getCell(x,1).getValues()

b = vteencours.getCell(x,1).getValues()

c = qtevendu.getCell(x,1).getValues()

retrait_stock = +a - (+b)

ajout_histo_vente = +b + +c

stock_reserve.getCell(x,1).setValue(retrait_stock)

qtevendu.getCell(x,1).setValue(parseInt(ajout_histo_vente))

vteencours.getCell(x,1).setValue(0)

}

}

Pour le fichier le voici :

Feuille de calcul sans titre - Google Sheets

L'accès à la feuille est refusé.

peux-tu partager un fichier exemple? https://www.sheets-pratique.com/fr/cours/partage

Essaie comme ceci

function Vente_reserve() {

  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Antonin (Réserve - 2869)');
  let data = sheet.getRange('C3:F46').getValues()

  for (let x = 0; x < 44; x++) { // les indices comment à 0 dans un tableau-array

    a = data[x][0] // premier indice = ligne, second = colonne, correspond à C
    b = data[x][2] // correspond à E
    c = data[x][3] // correspond à F

    retrait_stock = +a - (+b)

    ajout_histo_vente = +b + +c

    data[x][0] = retrait_stock                  // stock_reserve 'C3:C46'

    data[x][3] = (parseInt(ajout_histo_vente))  // qtevendu 'F3:F46'

    data[x][2] = 0                              // vteencours 'E3:E46'

  }

  sheet.getRange('C3:F46').setValues(data)

}

L'idée est d'emmener dans un tableau (array) les données C3:F46 et de travailler sur ce tableau avant de le remettre dans la feuille. Attention, les indices d'un tableau commencent à 0.

Merci mille fois ! ça fonctionne parfaitement ! :D

Rechercher des sujets similaires à "optimisation apps script google sheet"