Ajouter lien d'une feuille automatiquement dans une autre feuille

Bonjour à tous !

Je vous explique mon workflow et ce que je souhaiterai faire ... :

Je pars d'une feuille qu'on va appeler "BASE". À partir de cette feuille, je créer des copie pour chaque client, que je nomme "TESLA" "APPLE" "GOOGLE" etc ... Mais l'idée c'est que les formules où les scripts doivent être effectué à partir de la feuille "BASE".

Une fois que les copies sont créées .. exemple .. pour "TESLA" je travaille dessus ... et je rentre tous mes clients dans une feuille "SUIVI" ...

Jusqu'à maintenant, je les rentrait manuellement et j'insérais le lien manuellement ...

Je voulais savoir si il y avait une possibilité, d'intégrer avec AppScripts, un menu dans la feuille des clients, qui irait ajouter son nom et le lien directement dans la feuille suivi.

Je vous laisse tous les liens ci dessous si ça peut paraitre plus clair ...

FEUILLE BASE (à partir de laquelle je fais les copies) : https://docs.google.com/spreadsheets/d/1zrUc8RzxmxFV2tLQ7_jntU3LKR3eAmE6FhkFOtuI4cM/edit#gid=0
FEUILLE TESLA (copie à partir de feuille BASE) : https://docs.google.com/spreadsheets/d/1PotPD5qicJRN9fa__g-ahSxhA1De_NpCwAEFMMEh-Xw/edit#gid=0
FEUILLE GOOGLE (copie à partir de feuille BASE) : https://docs.google.com/spreadsheets/d/1dsHpl3sctLnXhfDX6qVWJPXP3HOr_2puObw2OMMuWa4/edit#gid=0

FEUILLE SUIVI : https://docs.google.com/spreadsheets/d/12Ezxc-HNf5OF1EgJ6Ji-ITrzZl6Z4iQVgPF5nDKMTEE/edit#gid=0

Evidemment, dans la feuille suivi, il faudra que les liens s'inserent à la suite dans la colonne A, avec le nom du titre de la feuille en question avec le lien qui pointe, ainsi que la date en question ... Je me suis permis aussi de faire quelques captures d'écrans pour vous expliquer ...

capture d e cran 2022 05 16 a 10 23 16 capture d e cran 2022 05 16 a 10 23 25 capture d e cran 2022 05 16 a 10 23 36 capture d e cran 2022 05 16 a 10 23 44 capture d e cran 2022 05 16 a 10 23 52

J'espère avoir été assez clair.

Merci pour votre aide.

Bonjour,

Je conseille plutôt de mettre le script dans le fichier SUIVI

function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
    .addItem('👉 Copier le modèle BASE', 'cloner')
    .addToUi();
}
function cloner(){
  // je demande un nom de fichier
  const nom = Browser.inputBox("Cloner le fichier BASE", 'Entrez le nom et patientez un instant SVP...', Browser.Buttons.OK_CANCEL);
  if (nom=='cancel'){return}

  // je recopie le fichier BASE
  var base = DriveApp.getFilesByName("BASE").next()
  var url = base.makeCopy(nom).getUrl()

  // je mets un commentaire dans le nouveau fichier
  SpreadsheetApp.openByUrl(url).getSheets()[0].getRange('A1').setValue(' ... '+nom)

  // j'ajoute le lien dans le fichier SUIVI
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]
  var range = sheet.getRange('A' + (+sheet.getLastRow() + 1))
  var richValue = SpreadsheetApp.newRichTextValue()
    .setText(nom)
    .setLinkUrl(url)
    .build();
  range.setRichTextValue(richValue);
  range.offset(0,1).setValue(new Date())

  // j'avertis
  SpreadsheetApp.getActive().toast(`Fichier "${nom}" créé !`)
}

Bonjour,

Merci !

Cependant je n'arrive pas à exécuter le script parce que j'ai ce message ... :

capture d e cran 2022 05 16 a 12 03 24

je viens de re-essayer depuis un nouveau fichier et je n'ai pas ce genre de messages, juste une demande d'autorisation classique

image

c'est la première fois que tu rencontres ce genre de message ?

J'aimerais bien savoir ce qui bloque, donc essaie par étapes

1-

function cloner(){
  // je demande un nom de fichier
  const nom = Browser.inputBox("Cloner le fichier BASE", 'Entrez le nom et patientez un instant SVP...', Browser.Buttons.OK_CANCEL);
  if (nom=='cancel'){return}
}

2- il est probable que cela bloque sur le makeCopy

function cloner(){
  // je demande un nom de fichier
  const nom = Browser.inputBox("Cloner le fichier BASE", 'Entrez le nom et patientez un instant SVP...', Browser.Buttons.OK_CANCEL);
  if (nom=='cancel'){return}

  // je recopie le fichier BASE
  var base = DriveApp.getFilesByName("BASE").next()
  var url = base.makeCopy(nom).getUrl()
}

est-ce que les fichiers que tu manipules sont directement à la racine du drive ou dans un dossier ?

3- si tu as plusieurs fichiers nommés BASE cela peut aussi provenir de là, dans ce cas essaie avec l'id du fichier

function cloner(){
  // je demande un nom de fichier
  const nom = Browser.inputBox("Cloner le fichier BASE", 'Entrez le nom et patientez un instant SVP...', Browser.Buttons.OK_CANCEL);
  if (nom=='cancel'){return}

  // je recopie le fichier BASE
  var base = DriveApp.getFileById('1zrUc8RzxmxFV2tLQ7_jntU3LKR3eAmE6FhkFOtuI4cM')
  var url = base.makeCopy(nom).getUrl()
}

Dès la première étape .. lorsque j'éxécute le script on me demande d'examiner les autorisations et lorsque je sélectionne mon compte et que je me connecte il y a le message d'erreur.

capture d e cran 2022 05 16 a 20 29 11 capture d e cran 2022 05 16 a 20 29 16 capture d e cran 2022 05 16 a 20 29 21

Assez curieux, cela m'arrive par exemple quand je veux qu'une application tiers accès à mon compte, il faut dans ce cas aller autoriser cette application

Autoriser une application tierce moins sécurisées et votre compte Google

Certaines applications et certains appareils utilisent une technologie de connexion moins sécurisée, qui rend votre compte vulnérable. Vous pouvez désactiver l’accès pour ces applications (recommandé) ou l’activer si vous voulez les utiliser malgré les risques encourus. Google DÉSACTIVE automatiquement ce paramètre s’il n’est pas utilisé.

Connectez-vous à votre compte Google

Puis accédez à ce lien : https://www.google.com/settings/security/lesssecureapps

Passez le paramètre “Autoriser les applications moins sécurisées” sur Activer

As-tu plusieurs adresses gmail comme ici https://forums.commentcamarche.net/forum/affich-37429833-deux-adresses-gmail-message-erreur-blocage-... ? Es-tu dans une "organisation" au sens Google ? Utilises-tu un espace partagé ?

Cela va être difficile de t'aider à distance, il faudrait que tu regardes ce que dit la littérature. https://www.google.com/search?q=cette+application+a+tent%C3%A9+d%27acc%C3%A9der+%C3%A0+des+informati...

Bonjour,

Alors en essayant de me connecter avec une autre adresse gmail, j'ai pu lancer le menu et ouvrir la boite de dialogue

capture d e cran 2022 05 17 a 11 20 13

mais lorsque je rentre un nom n'importe lequel j'ai ce message d'erreur qui apparait :

capture d e cran 2022 05 17 a 11 19 33

Aurais-tu une solution ?

Merci.

Peut être pour que ce soit plus simple, c'est juste une suggestion ... mais quitte à écrire le nom du fichier client, autant l'écrire directement en colonne A dans le fichier SUIVI.

Exemple :

A1 : TESLA
A2 : GOOGLE
A3 : COCA

etc ...

Et qu'ensuite avec App Script, ça insère directement le lien du fichier du même nom à la base du dossier drive sans qu'on fasse "click droit" -> "insérer lien" ...

Enfin, je ne sais pas, c'est une suggestion...

Alors, la solution était peut-être devant mes yeux aussi ... dans l'éditeur de script, à gauche, il y a services, il faut choisir Drive API

Il était activé sur mon fichier test ...

image

Tiens moi informé !

Ça ne marche toujours pas, mais on va faire quelque chose de plus simple je pense.

Partons d'un nouveau fichier : SUIVI CLIENT : https://docs.google.com/spreadsheets/d/1dFctGdATAnPGlLszr-LU_eatBtT6JSgFM8kTahUNWHU/edit#gid=0

Avec en colonne A le nom de mes clients.

Ici, à la racine de mon google drive, j'ai mes fichiers clients :

CLIENT A : https://docs.google.com/spreadsheets/d/1Z0aAw4liY_1nkQfaugsCLS10eojZ5Jx_RH0IlgR8Fps/edit#gid=0
CLIENT B : https://docs.google.com/spreadsheets/d/1aGs1gUBUkX0YuI0uFOGvtFA95eWCV_CWkzudxSuLlfI/edit#gid=0
CLIENT C : https://docs.google.com/spreadsheets/d/1f_N0eqP10CigIAhsB_bDprybkPccLoLj8_q6hq83O0g/edit#gid=0
CLIENT D : https://docs.google.com/spreadsheets/d/1X13O1p_ikhw0crX_by_EsbdcnpyMncio4cPkq8XHorI/edit#gid=0

Bien sur, tous les fichiers se trouvent à la racine de mon Google Drive.

L'idée serait que lorsque je rentre le nom du fichier client en colonne A dans la feuille SUIVI CLIENT ... ça aille chercher le lien du fichier correspondant et l'intègre directement au lieu de faire "click droit" -> "insérer lien" -> "coller le lien"

Admettons j'ai un fichier client à la racine qui s'appelle EVIAN.

Si je rentre "EVIAN" en colonne A ... le lien sera mis automatiquement vers le fichier "EVIAN" à la racine de mon Google Drive.

J'espère avoir été assez claire.

Merci beaucoup.

Dans la feuille que tu appelles liens (sinon change le nom dans le script) du fichier SUIVI CLIENT, dès que tu mettras le nom d'un fichier, alors le lien se fera automatiquement si ce fichier a été trouvé.

Mets un déclencheur sur la fonction onSpeEdit

image
function onSpeEdit(e) {
  var sh = e.source.getActiveSheet()
  var rng = e.source.getActiveRange()
  if (sh.getName() == 'liens' && 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);
  while (files.hasNext()) {
    var file = files.next();
    if (file) {
      var url = file.getUrl();
      return (url);
    };
  };
}

Bonjour,

Merci pour la réponse mais cela n'a pas l'air de marcher ...

https://docs.google.com/spreadsheets/d/1dFctGdATAnPGlLszr-LU_eatBtT6JSgFM8kTahUNWHU/edit#gid=0

comme ta feuille s'appelle "Feuille 1" il faut mettre cela dans le script à la place du nom "liens" que j'avais mis ici

if (sh.getName() == 'liens' && rng.getColumn() == 1) {

voir mon commentaire plus haut

Dans la feuille que tu appelles liens (sinon change le nom dans le script) du fichier SUIVI CLIENT, dès que tu mettras le nom d'un fichier, alors le lien se fera automatiquement si ce fichier a été trouvé.

Mets un déclencheur sur la fonction onSpeEdit

YAY !

ÇA MARCHE !

Merci beaucoup !

Ouf !

Bon, il manque l'heure, dans ce cas ajoute

rng.offset(0,1).setValue(new Date())

Par contre j'ai toujours ce problème d'autorisation quand j'exécute App Scripts sur mon compte google principal, Google me bloque l'accès avec message d'erreur "Cette application est bloquée"

capture d e cran 2022 05 16 a 12 03 24

Par contre lorsque je fais le test avec un autre compte google le message d'erreur qui s'affiche est "Google n'a pas validé cette application" et j'ai accès aux paramètres avancés pour autoriser Google à y avoir accès. Chose que je ne peux pas avec mon autre compte ...

capture d e cran 2022 05 17 a 11 19 13

Je suis un peu sec sur ces problèmes de comptes ! J'en ai 2, et pour jouer avec le second, je partage.

Donc partage en ne mentionnant que ta seconde adresse email (si tu n'as pas d'encapsulage dans une "organisation".

J'ai beau remuer tout internet, je n'arrive pas à régler ce problème ...

Peut être pouvons-nous trouver une solution pour le contourner ...

D'après ce que j'ai compris, lorsqu'on active le déclencheur sur la fonction onSpeEdit, le lien va chercher les fichier à la base du drive de l'utilisateur qui a activé le déclenheur et ce peu importe l'utilisateur qui rentre le texte.

Exemple : J'ai activé le déclencheur avec mon compte2@gmail.com et sur le Google Sheet, si je mets le nom d'un fichier qui se trouve à la base du drive du compte2 ça va chercher le lien, peu importe si je le fais avec mon compte1 ou mon compte2 ou même un compte invité.

Peut être qu'on pourrait dans le script ... mettre un bout de code qui irait chercher les fichiers spécifiquement du compte1@gmail.com même si ce n'est pas ce compte qui a activé le déclencheur ...

Vois-tu où je veux en venir ? Et penses-tu que c'est faisable ?

Merci.

1-

Si tu utilises 2 comptes, il faut que chacun définisse un déclencheur pour lui-même. 2 comptes/2 utilisateurs = 2 déclencheurs.

Est-ce cela la solution ? ou bien il y a un autre loup ? Regarde déjà ce point.

2-

Après, aller chercher dans un autre drive que le "sien" ... il faut que tu partages ton drive (je crains que ce soit réservé aux entreprises avec un compte spécial "Google Workspace account") ou un dossier (ce serait plus prudent) avec ton second compte ?

Et dans ce cas il faudra certainement indiquer l'identifiant du dossier pour y rechercher les fichiers. Il faudrait dans ce cas adapter le script, je regarderai si le point 1 n'est pas suffisant.

3-

Mais la solution la plus simple est de mettre les fichiers dans le compte que tu utilises tous les jours ?

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'ai essayé de voir du coté de Google Cloud Platform, en essayant éventuellement de créer des autorisations et d'associer le script à un nouveau projet Google Cloud Platform, mais le script ne marche plus dans ce cas là ... peut être pourrais-tu regarder de ce côté là ?)

2 & 3 - Alors éventuellement créer un dossier exprès peut être plus simple :

Voici l'URL du dossier (de mon compte principal) : https://bit.ly/3sFO6zu

Les deux fichiers y sont dedans (il n'y a aucun script encore...) ... donc l'idée ça serait de pouvoir activer le déclencheur avec un compte secondaire, mais que ça puisse prendre les liens qui se trouvent dans le dossier principal.

Merci beaucoup si tu peux adapter le script.

Rechercher des sujets similaires à "ajouter lien feuille automatiquement"