script très lent Le sujet est résolu

Avatar de l’utilisateur
TheZig
Messages : 32
Inscription : 18 mars 2023 18:08
A remercié : 7 fois
Remercié : 3 fois

script très lent

Message par TheZig »

Bonjour,

J'ai 2 onglets: un appelé Donnees, et un autre appelé CH qui contient un query de la feuille Données ce qui donne une liste sur laquelle je rajoute une case à cocher à chaque bout de ligne.
Voici la macro que j'ai écrite:
function  majCH() {
const LastRow = FeuillCH.getLastRow();  // on trouve la dernière ligne
const cellDateEch = FeuillCH.getRange("E2").getValues();
 for (li=5; li<=LastRow; li++) //parcours des lignes 5 à dernière non vide
  {
    let idAdherent = FeuillCH.getRange('A'+li).getValue();
    const numeroLigne = trouverAdherentParSonId(idAdherent);

 Logger.log('numeroLigne: '+numeroLigne)

       if (numeroLigne > 0)
//si on trouve l'adhérent
      {
 //on va chercher la valeur de la case sur la ligne col G
        let rapproch = FeuillCH.getRange('G'+li).getValue(); 
       
          if (rapproch == true)   
// si la case est sur True
            {
          //on va dans la feuille Données sur la cellule de la colonne qui est indiquée en E2 sur CH (ex:Z pour Ech1)
             cellCol = FeuilleDonnees.getRange(cellDateEch+numeroLigne);
                 //on y insère la date du jour
            cellCol.setValue(new Date());
             FeuilleDonnees.getRange('AL' +numeroLigne).setValue(new Date());    //on ajoute la date du jour de modif
            FeuillCH.deleteRow(li); // on supprime toute la ligne traitée, mais en fait on ne supprime réellement que la case puisque la liste est issue d'un query           
          
      }
  } 
}
Le traitement est très lent, y aurait-il moyen de modifier le code pour le rendre plus rapide ?
Ce qui se conçoit bien, s'énonce clairement (Boileau) 
Avatar de l’utilisateur
NC-Ahmet

Coach Numericoach
Invétéré
Messages : 86
Inscription : 19 sept. 2022 14:09
A remercié : 16 fois
Remercié : 19 fois

Re: script très lent

Message par NC-Ahmet »

Hello,

Oui ton script est trop lent pour une raison très simple : tu fais énormément de requêtes ! 🤯

Tu fais une boucle dans laquelle à chaque répétition tu fais un "getRange()", puis "setValue()", puis "getRange()" à nouveau, puis "deleteRow()". Et ce, à chaque itération !

Un conseil : fais plutôt setValues() en dehors de ta boucle. L'idée c'est que tu récupères une plage entière, tu la manipules en Apps Script puis tu la réinjectes dans Sheets.

Change ton approche.

Je t'invite à lire la page suivante qui évoque les meilleures pratiques à avoir dans Google Apps Script.

Bonne journée !
Avatar de l’utilisateur
TheZig
Messages : 32
Inscription : 18 mars 2023 18:08
A remercié : 7 fois
Remercié : 3 fois

Re: script très lent

Message par TheZig »

Merci pour le lien, je vais lire avec attention

J'ai bien compris le principe pour le setValues, mais...

justement, comme je l'ai écrit sur un autre fil, mon problème est très bête:  comment récupérer la plage entière après ma boucle ?

Edit: début de réponse sur le lien...

que pourrais-je lire comme doc qui m'explique un peu mieux cette histoire de tableau ? 
Ce qui se conçoit bien, s'énonce clairement (Boileau) 
Avatar de l’utilisateur
NC-Ahmet

Coach Numericoach
Invétéré
Messages : 86
Inscription : 19 sept. 2022 14:09
A remercié : 16 fois
Remercié : 19 fois

Re: script très lent

Message par NC-Ahmet »

Hello,

Google ainsi que la documentation JavaScript officielle seront tes amis ! Sinon aujourd'hui on a des outils d'IA géniaux... Je pense notamment à ChatGPT, Google Bard, ou encore Phind.com (ce dernier étant très pratique pour le dev).

Tu peux directement effectuer des demandes, par exemple sur phind.com, en demandant "comment manipuler un tableau JS afin de faire ça, ça et ça, j'utilise Google Apps Script". Tu peux même y intégrer ton code et il t'aidera à le corriger.

Tu peux même lui demander de t'expliquer. Attention, garde toujours un esprit critique, l'IA peut se tromper parfois ! Mais son aide peut-être très précieuse aussi...

A+ et bon scripting ! :)
Avatar de l’utilisateur
TheZig
Messages : 32
Inscription : 18 mars 2023 18:08
A remercié : 7 fois
Remercié : 3 fois

Re: script très lent

Message par TheZig »

Ah oui, l'IA, ça fait un moment que j'y ai songé, et vu ce que tu me dis, qu'il peut expliquer (j'aime comprendre ce que je fais) je vais voir ça de plus près. Merci
Ce qui se conçoit bien, s'énonce clairement (Boileau) 
Répondre

Rejoignez la discussion 💬

Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres

Inscrivez-vous dès aujourd'hui

Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles

Inscription

Connectez-vous