Explication / Problèmes:
Problème:
Il y a un problème évident avec votre code en particulier ici:
event.source.getActiveSheet()==" 100 "
Vous comparez un objet feuille avec une chaîne de caractères et cela renverra toujours false
. La manière correcte de le faire serait:
event.source.getActiveSheet().getName()==" 100 "
mais ici j'ai également essayé d'optimiser votre code car il est assez inefficace.
Optimisation:
Vous ne tirez pas pleinement parti de l'objet event.
SpreadsheetApp.getActiveSpreadsheet()
peut être remplacé par e.source
.
Vous définissez également les mêmes variables plusieurs fois alors que vous n'avez besoin de le faire qu'une seule fois:
- Pour
event.source.getActiveSheet()
et var sheet = SpreadsheetApp.getActiveSheet();
vous pouvez définir une seule variable pour stocker l'objet de la feuille active et l'appeler chaque fois que vous en avez besoin.
Enfin, je ne suis pas tout à fait sûr de votre logique concernant la boucle for
puisque vous ne l'avez pas mentionnée dans votre question.
Mais je vois que vous utilisez une boucle for
, une instruction if
et une ligne break
pour sortir de la boucle for
dès qu'il y a une correspondance entre la valeur source et la valeur dans la feuille collée.
-
Au lieu d'utiliser une boucle for
, vous pouvez utiliser findIndex pour trouver la valeur qui correspond au critère data[i][1] == value
.
-
Aussi, la méthode complète getDataRange()
n'est pas nécessaire si vous avez l'intention d'utiliser une seule colonne, c'est pourquoi j'ai modifié cette partie aussi.
Solution:
function onEdit(e){
const ss = e.source;
const ar = e.range;
const activeSheet = ss.getActiveSheet();
const pasteSheet = ss.getSheetByName("");
if (ar.getValue()==" " && activeSheet.getName()==" 100 "){
const value = activeSheet.getRange(ar.getRow(), 1).getValue();
const data = pasteSheet.getRange('B1:B'+pasteSheet.getLastRow()).getValues().flat();
const indx = data.findIndex((element) => element == value);
if (indx>-1){
const pasteRng = pasteSheet.getRange(indx+1,2);
pasteRng.clearContent();
pasteRng.setValue('');
}
}
}
Dites-moi si cela a fonctionné pour vous, sinon j'aimerais le modifier pour que cela le fasse.