Bonjour,

Grace à l'aide de CosmoKnacki, j'avais réussi à réduire le temps de calcul des colonnes de mon tableur de 20000 lignes. (objectif : si Colonne A = Endive alors Colonne B = Légume, si Colonne A = Pomme alors Colonne B = Fruit,...)

Voici le code qui marche très bien pour ce cas:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function myFunction() {
    const categories = {
        corr:
            new Map().set( new Set(['Endive', 'Carotte', 'Poireau']) , 'Légume' )
                           .set( new Set(['Pomme', 'Cerise', 'Raisin', 'Fraise', 'Poire', 'Orange', 'Citron']), 'Fruit' )
                           .set( new Set(['Zathras', 'Zaathras', 'Zathraas']), 'Zathras' ),
 
        'default': 'Rien',
 
        find: function (item) {
            for (let collection of this.corr.keys()) {
                if ( collection.has(item) )
                    return this.corr.get(collection);
            }
 
            return this['default'];
        }
    }
 
    const sheet = SpreadsheetApp.getActiveSpreadsheet(),
          firstRow = 3,
          lastRow = sheet.getLastRow(),
          rangeA = sheet.getRange(`A${firstRow}:A${lastRow}`),
          rangeB = sheet.getRange(`B${firstRow}:B${lastRow}`);
 
    rangeB.setValues(rangeA.getValues().map( n => [ categories.find(n[0]) ] ));
}
Mais je voudrais réaliser aussi une tout autre opération sur mes colonnes et malgré mes recherches je n'y arrive pas..

Je voudrais juste affecter une valeur à la colonne R en fonction de la colonne A et B.
Par exemple : Si la Colonne A >= 50, ça m'affiche la valeur de la colonne B dans la colonne R ,si la colonne A < 50, ça affiche la colonne A, sinon ça affiche 'Rien'.

Voici ce que j'ai tenté mais qui ne marche pas du tout...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function Comparaison() {
 
const sheet = SpreadsheetApp.getActiveSpreadsheet(),
      firstRow = 2,
      lastRow = sheet.getLastRow(),
      rangeA = sheet.getRange(`A${firstRow}:A${lastRow}`),
      rangeB = sheet.getRange(`B${firstRow}:B${lastRow}`),
      rangeR = sheet.getRange(`R${firstRow}:R${lastRow}`);
 
function test(item) {
  if (n >= 50) {
   return rangeB(n[0]);
   } else if (n < 50) {
   return rangeA(n[0]);
   } else
   return "Rien";
}
 
rangeR.setValues(rangeA.getValues().map(test));
 
}
Je pense que mon erreur vient de ma fonction test, est-ce cette fonction retourne (ou récupère) bien les valeurs des autres colonnes et est-ce que ma façon de déclarer "n" est correcte ? ou dois je mettre un var devant le n ?

Je vous remercie d'avance pour votre aide