Google Script - Rechercher un email dans une colonne et coller caractéres

Bonjour,

Je démarre en script , pourriez vous m'aider sur ce sujet?

J'ai un fichier google sheet avec deux feuilles:

1-Basis

2-New Comer

Le but de ce fichier est de suivre les arrivées et sorties de personnel dans mon service, et de garder l'historique.

Pour cela, je saisie dans l'onglet "New Comer", les infos suivantes:

- ColA : email nouvel arrivant

- ColB: prenom

- ColC: nom

- ColD: fonction

- ColE: url image for Script

- ColF: manager

- ColG: sigle

- ColH: Position N°

- ColI: Arrival in Position

- ColJ: Replace (email de la personne remplacée)

Le script suivant copie les infos ci-dessus de l'onglet New Comer vers l'onglet Basis en dernière ligne (ce script fonctionne):

function newComerIntegration() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetNewComer = ss.getSheetByName("New Comer");
var sheetBasis = ss.getSheetByName("Basis");
var lastRow = sheetBasis.getLastRow();

sheetNewComer.getRange("A2:I2").copyTo(sheetBasis.getRange("A"+(lastRow+1)+":I"+(lastRow+1)), {contentsOnly:true});
}

Je souhaiterais par la suite Copier l'info de la colonne I "Arrival in Position" de l'onglet "New Comer", et le coller dans la table de l'onglet Basis en colonne J, de la ligne qui correspond à la personne qui quitte le service.

Le script devra faire, ce que me permet une recherche V ou Index equiv

=INDEX('New Comer'!$A$2:$J$7;EQUIV($A42;'New Comer'!$J$2:$J$7;0);9)

Pourriez vous m'aider à compléter mon script ci-dessus pour effectuer cette opération supplémentaire?

Merci de votre aide.

Bonjour,

Ajoute cette fonction de recherche de l'email

function recherche(email){
  var sh = sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('xxxxxxxxxx')
  var data = sh.getRange(2,1,sh.getLastRow()-1,1).getValues()
  for (var i=0;i<data.length;i++){
    if (data[i][0]==email){
      return i + 2
    }
  }
  return -1
}

si la réponse est -1, l'email n'existe pas, sinon la fonction te renverra la n° de ligne où se trouve l'email.

Remplace xxxxxxxxx par le nom de la feuille car je n'ai pas compris au vu de ta fonction index ! mais je pense que c'est Basis

Cela donnerait

function recherche(email){
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Basis')
  var data = sh.getRange(2,1,sh.getLastRow()-1,1).getValues()
  for (var i=0;i<data.length;i++){
    if (data[i][0]==email){
      return i + 2
    }
  }
  return -1
}

function newComerIntegration() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetNewComer = ss.getSheetByName("New Comer");
  var sheetBasis = ss.getSheetByName("Basis");
  var lastRow = sheetBasis.getLastRow();
  if (recherche(sheetNewComer.getRange("A2").getValue == -1){
    sheetNewComer.getRange("A2:I2").copyTo(sheetBasis.getRange("A"+(lastRow+1)+":I"+(lastRow+1)), {contentsOnly:true});
  }
  else{
    // ici ce que tu souhaites faire
  }
}

comme je n'ai pas compris ce que tu souhaites faire, je te laisse cette partie, ou alors mets u, lien vers une copie de ton fichier

Voici plus d'explication, car je n'arrive pas à faire fonctionner ton code.

En page New comer, est ajouté manuellement la ligne 2:

image

Via le script du message d'origine et qui fonctionne, cette ligne est recopiée, dans l'onglet Basis, comme surligné en vert ci-dessous:

image

Je souhaiterais , que le script me remplisse les deux cases qui sont surlignées en rouge par la date de départ "01/10/2021" et par la personne qui le remplace "TOTO.TITI@XXXX.com".

Pour cela, dans l'onglet Basis est listé tous le personnel de mon entreprise. Il faudrait que le script trouve la bonne ligne ou se trouve le salarié YYYYYYY.AAAAA@XXXX.com et ajoute dans la colonne J et K la date de départ et la personne qui le remplace "TOTO.TITI@XXXX.com".

Ces infos se trouve dans l'onglet "New Comer"

Merci encore

Peux-tu mettre un lien vers une copie anonymisée de ton fichier, cela facile le travail et permet de voir les en-têtes de lignes et colonnes que l'on ne voit pas sur les photos.

Merci

Bonjour,

Merci pour le temps que tu passes pour m'aider et me trouver une solution .

Voici le lien pour accéder au document:

https://docs.google.com/spreadsheets/d/15-GcYuNzWNmpTzCjhPPJAehUkUyopwhx_kGImT_Xc2I/edit?usp=sharing

Les cases que le nouveau script doit mettre à jour sont K2:L, lorsque le premier script crée le new comer dans l'onglet Basis

Merci encore

Bonne soirée

function newComerIntegration() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetNewComer = ss.getSheetByName("New Comer");
  var sheetBasis = ss.getSheetByName("Basis");
  var lastRow = sheetBasis.getLastRow();
  sheetNewComer.getRange("A2:I2").copyTo(sheetBasis.getRange("A"+(lastRow+1)+":I"+(lastRow+1)), {contentsOnly:true});
  var row = recherche(sheetNewComer.getRange("J2").getValue())
  Logger.log(row)
  if (row != -1){
    sheetBasis.getRange("J"+(row)).setValue(sheetNewComer.getRange("I2").getValue())
    sheetBasis.getRange("K"+(row)).setValue(sheetNewComer.getRange("A2").getValue())
  }
}

function recherche(email){
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Basis')
  var data = sh.getRange(2,1,sh.getLastRow()-1,1).getValues()
  for (var i=0;i<data.length;i++){
    if (data[i][0]==email){
      return i + 2
    }
  }
  return -1
}

Bonjour,

Merci beaucoup, cela fonctionne.

Pourrais-tu m'expliquer la ligne de code suivant?

for (var i=0;i<data.length;i++){ if (data[i][0]==email){ return i + 2 } } return -1 }

Merci

  • Si, en balayant la colonne 0 (colonne A),
    • c'est à-dire en testant les data[i][0] avec i varie de 0 à la longueur -1 de data (nota : les indices en app script commencent à 0),
  • je trouve une valeur égale à l'email,
  • alors je retourne i, voire même i+2 car les données commençaient en ligne 2
  • sinon je retourne -1 que je vais tester dans la boucle principale pour savoir si le script a trouvé la ligne.

Je pense même qu'il faudrait fonctionner à l'envers pour prévenir le fait que le même email revienne une seconde fois

  for (var i=data.length-1 ; i>=0 ; i--){
    if (data[i][0]==email){
      return i + 2
    }
  }
Rechercher des sujets similaires à "google script rechercher email colonne coller caracteres"