Google Script - Remplacer URL spreadsheets par un autre mais via une boucle

Bonjour,

j'ai un fichier sheet de travail complexe que je souhaiterais partager à mes collègues afin qu'il soit utilisable à partir d'un modele.

Ce fichier dont le lien est ci-dessous (version très simplifiée) disposent de plusieurs onglets.

https://docs.google.com/spreadsheets/d/1n2Zg2aOcBzbYfa-qPBcbiBUfIW7XStOWnrPMa73T-6g/edit?usp=sharing

1er onglet "Liste des spreadsheets liées":

- Colonne A est listées toutes les URLs utilisées dans mon template mais qu'il faut remplacer par celles de la colonne B

- Colonne B est listées toutes les URLs que je souhaite utiliser à la place de celles de la colonne A

Autres onglets: Mes fichiers de travail qui disposent de centaines de formules sur un range large récupèrent des données via des importrange.

L'idée est que le script puisse récupérer les URLs de la colonne A de l'onglet "Liste des spreadsheets liées" et que via des boucles, il puisse modifier les URLs dans les formules par celles de la colonne B.

Sur ce forum, Mike m'avait communiqué ce script, qui permet de faire le job mais d'une manière manuelle (sans. boucle et changent led formules dans toutes les sheets):

// enable Sheets API at Advanced Google services
function traitement() {
const replaceConditions = {
"https://docs.google.com/spreadsheets/d/xxxxxxxxxxxx/edit#gid=0": "yyyyyyyyyyyyy",
"xxxxxxxxxxxx": "yyyyyyyyyyyyy",
};
const ss = SpreadsheetApp.getActiveSpreadsheet();
const requests = Object.entries(replaceConditions).map(([k, v]) => ({
findReplace: {
find: k.toString(),
replacement: v.toString(),
includeFormulas: true,
allSheets: true,
},
}));
Sheets.Spreadsheets.batchUpdate({ requests: requests }, ss.getId());
}

Pouveez vous m'aider à le modifier afin que les modifs soient automatique sur l'ensemble des onglets sauf sur l'onglet "Liste des spreadsheets liées"?

J'ai essayé mais je n'y arrive pas car celui-ci utilise l'API Google sheet ....

Merci encore une fois de votre aide.

Bonne journée Vincent

Bonjour,

J'ai essayé mais je n'y arrive pas car celui-ci utilise l'API Google sheet ....

l'une des raisons est que tu as beau modifier le premier script, comme il en existe un autre avec le même nom, c'est lui qui sera exécuté ! J'ai donc changé le nom du second.

Essaie comme ceci

// enable Sheets API at Advanced Google services
function traitement() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // je construis les conditions
  const replaceConditions = {};
  const base = ss.getSheetByName('Liste des spreadsheets liées')
  const data = base.getDataRange().getValues()
  data.forEach((d, i) => { if (i > 1) replaceConditions[d[0]] = d[1] })

  // j'exécute partout
  const requests = Object.entries(replaceConditions).map(([k, v]) => ({
    findReplace: {
      find: k.toString(),
      replacement: v.toString(),
      includeFormulas: true,
      allSheets: true,
    },
  }));
  Sheets.Spreadsheets.batchUpdate({ requests: requests }, ss.getId());

  // je remets le tableau en place
  base.getDataRange().setValues(data)
}

Tu es vraiment un champion.....merci une nouvelle fois !

Cela fonctionne très bien.

Par contre, juste pour ma connaissance en script.

1- N'est il pas possible d'exclure la sheet 'Liste des spreadsheets liées' dans le paramètre allSheets: true?

cela éviterait de recoller les données d'entrée?

Je te pose la question car j'avais essayé de chercher la solution sur des forums/sites mais sans solution !

Bonne journée à toi

1- N'est il pas possible d'exclure la sheet 'Liste des spreadsheets liées' dans le paramètre allSheets: true?

cela éviterait de recoller les données d'entrée?

Je te pose la question car j'avais essayé de chercher la solution sur des forums/sites mais sans solution !

je me suis posé la question ce matin, mais non je n'ai pas trouvé comment exclure une feuille, et je ne voulais pas lister toutes les autres feuilles

in fine c'est une solution simple !

okay...super !

Rechercher des sujets similaires à "google script remplacer url spreadsheets via boucle"