Ajouter lien d'une feuille automatiquement dans une autre feuille

1 - Justement le problème des délencheurs c'est que le lorsque je l'active avec mon compte secondaire (celui que je n'utilise pas tous les jours), j'ai accès aux paramètres avancés qui me disent d'autoriser le script à être utilisé. Lorsque j'essaye de l'activer avec mon compte principal, c'est à ce moment là que j'ai le message Cette application est bloquée, sans possibilité de l'autoriser...

j'avais oublié ce problème ... mais du coup il y a plein de scripts que tu ne peux pas lancer !

je suis sec (voir quand même ici https://support.google.com/accounts/answer/6010255?hl=fr)

Je vais essayer de regarder un peu plus en détail mais je crois que rien n'y fait ...

Adapter le script pour qu'il renvoie vers le lien du dossier que je t'ai envoyé ça semble envisageable ?

Adapter le script pour qu'il renvoie vers le lien du dossier que je t'ai envoyé ça semble envisageable ?

en le faisant à partir du compte qui "fonctionne" et en partageant ensuite la fichier, ou en le recopiant avec le compte n°2, sinon je ne vois pas

C'est à dire que j'ai exécuté le déclencheur avec le compte qui fonctionne et lorsque avec mon compte principal (qui ne fonctionne pas) je mets le nom des fichiers qui sont à la base du drive du compte qui fonctionne, ça fonctionne, je ne vois pas si tu vois ce que je veux dire.

capture d e cran 2022 05 19 a 15 56 59

Tu vois là, je suis connectée avec mon compte principal qui ne fonctionne pas. Mais lorsque je rentre "TESLA" ou "HIMALAYA", ce sont les fichiers qui sont à la racine du drive de mon compte secondaire qui fonctionne (le compte "O"). Donc à partir de là, je me dis que peut être, peut-on juste changer le lien du script pour pointer vers le lien d'un dossier partagé sur le drive en particulier au lieu d'aller rechercher sur le drive du compte qui a activé le déclencheur ...

J'espère avoir été claire.

Merci de ton aide.

je pense arriver à te suivre ...

déjà là ça fonctionne, mais il faudrait que tu partages chaque fichier

l'idée de partager un dossier de ton drive avec l'autre compte est donc en effet intéressant ... il faut que je modifie le script pour aller chercher le fichier dans le dossier partagé

nouveau challenge, je regarde ... ça va encore m'empêcher de dormir (lol)

Dans tous les cas, tous mes fichiers sont partagés déjà donc ce n'est pas un soucis à ce niveau là !

Bah super ! Merci beaucoup !

essaie ceci (mets l'id du dossier partagé à la place de ################)

function onSpeEdit(e) {
  var sh = e.source.getActiveSheet()
  var rng = e.source.getActiveRange()
  if (sh.getName() == 'Feuille 1' && rng.getColumn() == 1) {
    var richValue = SpreadsheetApp.newRichTextValue()
      .setText(e.value)
      .setLinkUrl(getMyFile(e.value))
      .build();
    rng.setRichTextValue(richValue);
  }
}
function getMyFile(nomdufichier) {
  var files = DriveApp.getFilesByName(nomdufichier);
  var folderID = '######################'
  while (files.hasNext()) {
    var file = files.next();
    if (file) {
      parents = file.getParents()
      while (parents.hasNext()) {
        folder = parents.next();
        if (folder.getId() == folderID) {
          var url = file.getUrl();
          return (url);
        }
      }
    }
  }
}

Ça n'a pas l'air de marcher, tu me confirmes bien que l'ID du dossier c'est bien ça ?

capture d e cran 2022 05 19 a 19 39 02

Je te laisse regarder le script, apparemment y'a une erreur à l'exécution : https://docs.google.com/spreadsheets/d/1gVbtflk6jgQWHY1qjnjk8i5yhdNlrtVA9T94IIU8Gys/edit#gid=0

capture d e cran 2022 05 19 a 19 41 05

Merci beaucoup.

ne lance pas le script à partir de l'éditeur de script, il se lance en automatique uand tu introduis un nom en colonne 1 de Suivi

oui l'id du dossier est bien celui-là

je n'ai pas d'erreur d'exécution de mon côté, le nom est bien souligné en bleu

Ça n'a toujours pas l'air de marcher de mon coté ..

J'ai essayé de créer un nouveau fichier "APPLE" et lorsque je le mets en colonne A, le lien ne marche pas ...

drive : https://bit.ly/3MxchrT
google sheet : https://docs.google.com/spreadsheets/d/1gVbtflk6jgQWHY1qjnjk8i5yhdNlrtVA9T94IIU8Gys/edit#gid=0

Regarde si cela fonctionne (à priori chez moi c'est ok avec ton dossier partagé). Activer Drive API Service.

A priori tout est fait sur ton fichier, il n'y a plus qu'à tester !

Il faudra peut-être redonner des autorisations, dans ce cas lance onSpeEdit à partir de l'éditeur de script même si cela te donnera une erreur.

function onSpeEdit(e) {
  var sh = e.source.getActiveSheet()
  var rng = e.source.getActiveRange()
  if (sh.getName() == 'Suivi' && rng.getColumn() == 1) {
    var richValue = SpreadsheetApp.newRichTextValue()
      .setText(e.value)
      .setLinkUrl(getMyFile(e.value))
      .build();
    rng.setRichTextValue(richValue);
  }
}
function getMyFile(nomdufichier) {
  var url = ''
  listFilesInSharedDrive('1wsSbKhut7fdjyz2w259SwYLV06vl0b5P').forEach(item => {
    if (item.title == nomdufichier){ 
      url = DriveApp.getFileById(item.id).getUrl()
    }
  })
  return url
}
function listFilesInSharedDrive(teamDriveId) {
  // https://www.labnol.org/shared-drives-google-script-220128
  let pageToken = null;
  const response = [];
  do {
    const { items = [], nextPageToken = null } = Drive.Files.list({
      pageToken,
      maxResults: 50,
      supportsAllDrives: true,
      includeItemsFromAllDrives: true,
      q: `'${teamDriveId}' in parents and trashed = false and mimeType != 'application/vnd.google-apps.folder'`,
      fields: 'nextPageToken, items(id,title,mimeType)',
    });
    items.forEach((item) => response.push(item));
    pageToken = nextPageToken;
  } while (pageToken !== null);
  return (response);
}

Yes, super !

Je sais pas ce que t'as fait mais ça a l'air de marcher ...

Bon maintenant, il faut que je fasse pareil sur mes vrais fichiers de travail !

Je sens que je vais galérer et que ça va pas marcher au final 😂

Merci beaucoup en tout cas !

Je sais pas ce que t'as fait mais ça a l'air de marcher ...

tu m'as poussé dans mes retranchements et je suis allé chercher du côté de

      supportsAllDrives: true,
      includeItemsFromAllDrives: true,

cela fonctionne, parfait, mais j'ai toujours des craintes quand on aborde les trucs pointus qu'un jour google déprécie des méthodes ou propriétés d'objet !

Salut !

Je me permets de rouvrir la discussion ! Tout ce que tu as fait marche très bien, ne t'en fais pas ! (ouf ! lol).
Je l'ai adapté sur mon fichier de travail et tout à l'air de bien fonctionner ... !

Cependant j'aimerais bien ajouter un petit quelque chose.

Reprenons le fichier de suivi avec les clients : https://docs.google.com/spreadsheets/d/1gVbtflk6jgQWHY1qjnjk8i5yhdNlrtVA9T94IIU8Gys/edit#gid=0

L'automatisation marche très bien ! ça va bien chercher le lien au bon endroit ... Ce que j'aimerais c'est qu'en colonne B .. ça aille chercher une information dans le fichier client correspondant en colonne A.

Exemple en B1, ça aille copier la cellule qu'il y a en B3 de la feuille APPLE "APPLE B3"
Pareil pour les autres, pour CLIENT 1, ça aille chercher en B3 de la feuille CLIENT 1 : "CLIENT 1 B3"

Ainsi on aurait en :

B1 : "APPLE B3"
B2 : "CLIENT 1 B3"
B3 : "EUROS B3"

et ainsi de suite ...

Sachant que l'information à copier sera toujours en B3 de la feuille client en question.

J'espère que tu comprends l'idée... Après, peut être que ça peut se faire à partir d'une formule aussi, à voir ...

Je te remercie.

Hello,

function onSpeEdit(e) {
  var sh = e.source.getActiveSheet()
  var rng = e.source.getActiveRange()
  if (sh.getName() == 'Suivi' && rng.getColumn() == 1) {
    var url = getMyFile(e.value)
    var richValue = SpreadsheetApp.newRichTextValue()
      .setText(e.value)
      .setLinkUrl(url)
      .build();
    rng.setRichTextValue(richValue);
    rng.offset(0,1).setValue(SpreadsheetApp.openByUrl(url).getSheets()[0].getRange('B3').getValue())
  }
}

Yay ! Super ça marche à merveille !

Merci beaucoup !

Rechercher des sujets similaires à "ajouter lien feuille automatiquement"