Sheets - Vérifier si une valeur est présente dans un champ défini

Bonjour à tous,

Je ne suis pas développeur et je découvre Sheets mais je dois mettre en place un fichier de gestion de PC de prêts pour l'équipe où je me trouve sous Sheets et avec du script.

Voici mon problème:

Dans mon classeur, j'ai une feuille ("Loan Interface") correspondant à l'interface principale qui sera utilisée par le technicien pour enregistrer le prêt de PC, et une autre feuille ("PARAMETERS") qui contient (entre autre) la liste des utilisateurs autorisées à demander un PC de prêt.

Sur mon interface principale ("Loan Interface"), j'ai créé un menu déroulant en cellule "C17" qui affiche la liste des utilisateurs de ma feuille "PARAMETERS" (liste dont le range est "S4:S60"). La liste déroulante "C17" est dynamique et en fonction d'un autre paramètre peut m'afficher une autre liste dans cette même cellule mais ce n'est pas le sujet (c'est juste pour info).

J'aimerai faire un script me fasse ceci (en français :) ):

- Si sur la feuille "Loan Interface" la valeur en "C17" est présente dans le range "S4:S60" de la feuille "PARAMETERS", alors sur la feuille "Loan Interface" je veux afficher "Autorisé" dans la cellule "F17"; sinon, ne fait rien.

J'espère que j'ai été assez explicite...mais je ne peux pas afficher mon fichier pour des raisons de confidentialités.

J'ai réussi à faire le script suivant en mettant une donnée fixe mais je ne sais pas comment aller effectuer la vérification dans une autre feuille et dans un range de cellules... :

function Loanto() {

var spreadsheet = SpreadsheetApp.getActive();
var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");

spreadsheet.setActiveSheet(sheetLoanRec);
spreadsheet.getRange('F7').activate;

if(spreadsheet.getRange('F7').getValue()=="UNITARY LOAN") {
spreadsheet.getRange('C17').activate;
if(spreadsheet.getRange('C17').getValue() == "MARTIN Laurent"){
spreadsheet.getRange('F17').activate;
spreadsheet.getRange('F17').setValue('Authorized');
} else{
spreadsheet.getRange('F17').setValue("non authorized");
};
} else {
spreadsheet.getRange('F17').activate;
spreadsheet.getRange('F17').setValue("Other loan type detected");
};
};

Merci d'avance pour votre précieuse aide....

Bonjour,

sujet intéressant, peux-tu mettre un lien vers une copie simplifiée de ton projet ? cela aiderait / simplifierait la mise au point d'une solution adaptée

https://www.sheets-pratique.com/fr/cours/partage

Bonjour et merci pour votre intérêt à mon pb.

Voici le lien vers mon fichier: https://docs.google.com/spreadsheets/d/1ux5Pv9stsUjZl7ARleupExZa6C8hKLRYAuQm9tv7s34/edit?usp=sharing

Donc en résumé, j'ai 2 cas possibles :

1) Si dans "LOAN TYPE" je sélectionne "Course Loan" & dans "COURSE N°" je sélectionne un cours, j'ai ma liste de stagiaires qui s'affiche dans "LOAN TO".

2) Si dans "LOAN TYPE" je sélectionne "Unitary Loan", j'ai ma liste d'instructeurs autorisés dans "LOAN TO".

Ce switch de menu déroulant adaptable fonctionne (ouf!).

Maintenant, ce que je voudrais faire, c'est :

- Si c'est un stagiaire qui est sélectionné, alors je voudrais afficher "Course detected" en F17

- Si c'est un instructeur autorisé (donc de la liste) qui est sélectionné, alors je voudrais afficher "Authorized" en F17

- Si l'instructeur ne fait pas partie de la liste, je le rentre manuellement dans la cellule "LOAN TO", mais je voudrais à ce moment-là que ça m'affiche "Non-authorized" en F17 et aussi que je puisse avoir mon menu déroulant en F17 avec mes 2 valideurs afin que je puisse sélectionner l'un ou l'autre.

J'espère avoir été assez explicite dans mon besoin ;-)

Merci beaucoup pour votre aide

J'ai oublié de préciser que l'action souhaitée doit se faire via script et non par formule (car la formule apparaitra dans le menu déroulant du choix du "Requestor" et sera supprimée si on choisi un des 2 requestors)...

Il faut que tu partages ton fichier comme suit https://www.sheets-pratique.com/fr/cours/partage

Oulà, j'ai un écran de 10" ... je vais m'en sortir

Maintenant, ce que je voudrais faire, c'est :

- Si c'est un stagiaire qui est sélectionné, alors je voudrais afficher "Course detected" en F17

- Si c'est un instructeur autorisé (donc de la liste) qui est sélectionné, alors je voudrais afficher "Authorized" en F17

- Si l'instructeur ne fait pas partie de la liste, je le rentre manuellement dans la cellule "LOAN TO", mais je voudrais à ce moment-là que ça m'affiche "Non-authorized" en F17 et aussi que je puisse avoir mon menu déroulant en F17 avec mes 2 valideurs afin que je puisse sélectionner l'un ou l'autre.

F17 ou F18 ?

F17 :-)

Je n'ai pas bien compris la logique de tout cela, mais j'ai suivi scrupuleusement les instructions ...

function onEdit(e){
  loan_type(e);  
  testC17(e);
};
function testC17(e){
  var spreadsheet = SpreadsheetApp.getActive();
  var sheetLoanRec = spreadsheet.getSheetByName("Loan Interface");
  var sheetParameters = spreadsheet.getSheetByName("PARAMETERS");
  if(e.range.getRow() == 17 && e.range.getColumn() == 3){
    var stagiaires = sheetParameters.getRange('Q4:Q20').getValues().join().split(",");
    var instructeurs = sheetParameters.getRange('S4:S20').getValues().join().split(",");
    if (sheetLoanRec.getRange('F7').getValue()=='COURSE LOAN'){
      if(stagiaires.indexOf(sheetLoanRec.getRange('C17').getValue())!=-1){
        sheetLoanRec.getRange('F17').setValue('Course detected')
      }
    }
    if (sheetLoanRec.getRange('F7').getValue()=='UNITARY LOAN'){
      if(instructeurs.indexOf(sheetLoanRec.getRange('C17').getValue())!=-1){
        sheetLoanRec.getRange('F17').setValue('Authorized')
      }
      else{
        sheetLoanRec.getRange('F17').setValue('Non-authorized')
      }
    }
  }
};

pour en revenir au titre, voici comment je procède

recherche valeur dans colonne
-----------------------------
  var values = feuille.getRange('A:A').getValues().join().split(","); 
  var ligne = values.indexOf('ce que je cherche'); // indexOf vaut -1 si pas trouvé
  if (ligne != -1) {
  }

Merci beaucoup! Je vais tester cela tout de suite!

Juste pour essayer de vous expliquer plus en détail, je peux prêter du matériel informatique comme ceci:

- Pour un stagiaire qui vient à mon bureau : il me faut juste le numéro du cours et les stagiaires de ce cours apparaissent automatiquement

- Pour un instructeur: 1) S'il est dans une liste définie, je peux lui prêter

2) S'il n'est pas dans la liste: a) il a une autorisation exceptionnelle écrite d'un des 2 directeurs l'autorisant, et là je lui prête

b) il n'a pas d'autorisation, pas de prêt de matériel

Ps: C'est impeccable, ça fonctionne super bien! C'est exactement cela que je cherchais!

Merci mille fois pour la résolution de mon pb et aussi pour la connaissance qui me manquait!

Re :-)

J'ai un petit bug (mais rien de méchant):

En fait, la fonction tourne en permanence et lorsque j'écris ça switche de cellule....

Y a t'il moyen de stopper la fonction une fois qu'une valeur est indiquée?

Pour la partie que j'ai rédigée, cela ne devrait pas switcher sur une autre cellule.

Sur la partie existante, supprime ceci qui est pour moi inutile

spreadsheet.getRange('XXXXX').activate()

ou

spreadsheet.setActiveSheet(sheetLoanRec)

Nickel! Merci :-)

J'aurai une autre question mais ce sera un nouveau post :-)

Rechercher des sujets similaires à "sheets verifier valeur presente champ defini"