Lien hypertexte d'un fichier enregistré à partir d'une macro

Bonjour à tous !

Grâce 2 utilisateurs de ce forum, j'ai une macro qui me permet d'enregistrer ma feuille de calcul n°5 (=mes factures) et de tenir à jour un tableau de suivi (dans une autre feuille de calcul) qui récapitule les données clés des devis envoyés.

Je me demande s'il serait possible d'ajouter le lien des fichiers enregistrés (=les factures) dans mon tableau de suivi (=compléter la dernière colonne) ?

capture d ecran 2021 04 18 a 18 55 46

L'un d'entre vous pourrait-il m'aider svp ?

Voilà la macro qui enregistre les factures et remplit le tableau de suivi :

//enregistrer la facture
const doc2 = SpreadsheetApp.getActive();
const feuille2 = doc2.getSheetByName('facture');
const docID2 = '1z_poDPdcrf98wyDO9ql8UPDJg1szeZYK_krOMHgrLOI';
const feuilleID2 = '897185388';
const dossier2 = DriveApp.getFolderById('1WNyBdexfylgflnDeKtMcdIN-eS578dlH');
const fichier2 = feuille2.getRange("G12").getValue().toString() + ".xlsx"
const url2 = 'https://docs.google.com/spreadsheets/d/' + docID2 + '/export?';
const exportOptions2 =
'exportFormat=xlsx&format=xlsx' +
'&size=A4' +
'&portrait=true' + // orientation portrait, false pour paysage
'&fitw=true' +
'&sheetnames=false&printtitle=false' + // pas de nom ni de titre à l'impression
'&pagenumbers=false&gridlines=false' + // pas de numérotation, pas de grille
'&fzr=false' + // frozen rows = pas de répétition de l'en-tête
'&gid=' + feuilleID2;
var params2 = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
var reponse2 = UrlFetchApp.fetch(url2 + exportOptions2, params2).getBlob();
// Sauvegarde du fichier.
dossier2.createFile(reponse2.setName(fichier2));

//remplir le fichier de suivi des devis
var f1 = doc.getSheetByName('DEVIS');
var f2 = doc.getSheetByName('Suivi-des-devis');
var f3 = doc.getSheetByName('Ne-pas-toucher');
var adresses = ["G9:I9", "P8", "G10","X41","X43"];
var destination = ["B2","C2","D2","E2", "F2"];
f2.insertRowBefore(2);
for (var i = 0; i < adresses.length; i++){
f2.getRange(destination[i]).setValue(f1.getRange(adresses[i]).getValue());
}
f2.getRange('G2').setValue(f3.getRange('K4').getValue());

Merci bcp !

Lauriane

J'ai trouvé un moyen de le faire en bidouillant avec une macro qui me permet de lister tous les documents de mon drive qui portent le nom d'une facture. Voilà la macro :

var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Ne-pas-toucher'), true);
spreadsheet.getRange('C50').activate();
var files = DriveApp.searchFiles("title contains 'Fac'");
while (files.hasNext()) {
var file = files.next();
var data = [
file.getName(),
file.getUrl(),
file.getMimeType()
];
spreadsheet.appendRow(data);

Cependant, j'ai mtn un autre souci : impossible d'importer une facture dans mon fichier. La fonction ImportRange ne fonctionne pas (ça me met directement "vous n'avez pas l'autorisation, sans me demander au préalable d'autorisation. J'ai eu beau cherché sur le net une solution, je n'ai pas trouvé.

capture d ecran 2021 04 20 a 09 52 33

Pour contourner ce pb, je me suis dit que je vais créer une macro pour parvenir au même résultat. Mais une fois encore, j'ai un message d'erreur

capture d ecran 2021 04 20 a 09 54 37

Je ne comprends pas pourquoi Google Sheet me refuse l'accès. Je suis pourtant propriétaire des deux fichiers...

L'un de vous saurait-il comment je pourrai procéder ?....

Je vous remercie

Au fait, voilà la macro qui réplique la fonction ImportRange :

function import(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
const id = ss.getRange("I2").getValue(); //Le lien de la facture ce trouve en I2 (et même en mettant directement l'ID d'une des factures, ça ne fonctionne pas)
var target = SpreadsheetApp.openById("id");
var source_sheet = ss.getSheetByName("Facture");
var target_sheet = target.getSheetByName("Facture");
var source_range = source_sheet.getRange("A10:G10");
var source_range = source_sheet.getRange("A10:X50");
var target_range = target_sheet.getRange("A1:X50");
source_range.copyTo(target_range);
var last_row = target_sheet.getLastRow();
target_sheet.insertRowAfter(last_row);
var target_range = target_sheet.getRange("A"+(last_row+1)+":G"+(last_row+1));
}

Bonjour,

C'est assez difficile à traiter ls droits d'accès ... j'ai une question : les fichiers sont enregistrés sur ton drive ou sur un drive partagé ?

Bonsoir, merci pour votre réponse.

Le fichier se trouve sur un drive partagé

... et donc je pense que le problème vient de là. Et malheureusement je ne connais pas la solution sauf à veiller peut-être que les dossiers et fichiers sont partagés. Mais je n'en ai pas l'expérience.

Je relance le sujet pour essayer de trouver une meilleure méthode que celle qui liste tous les fichiers (nom + url) de mon drive dont le nom contient 'FAC-'. Cette méthode n'est pas pratique et alourdie trop la macro

Mon besoin initial c'est juste d'obtenir l'URL de la facture qui vient tout juste d'être enregistrée à l'aide de ma macro. Cette facture portera toujours le nom 'FAC_n°du devis' sachant que le numéro de devis se trouve sur la feuille DEVIS! en E6, et elle est enregistré dans le dossier du drive portant l'ID '1WNyBdexfylgflnDeKtMcdIN-eS578dlH'

J'ai besoin que la macro trouve l'URL de la facture et l'inscrive dans la cellule O2 dans la feuille 'Suivi-des-devis!'

J'ai vrm essayé d'écrire la macro toute seule, mais j'y arrive pas ....

Voilà une ébauche non concluante :

function testenregistrement() {
const doc = SpreadsheetApp.getActive();
var f2 = doc.getSheetByName('Suivi-des-devis');
var dossier2 = DriveApp.getFolderById("1WNyBdexfylgflnDeKtMcdIN-eS578dlH")
var nom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DEVIS').getRange('E6').getValue()
var files =dossier2.getFilesByName("FAC_" + nom).getUrl();
f2.getRange('O2').setValue(files);
};

Merci beaucoup !

C'est bon problème résolu : voilà la macro qui fonctionne

function testenregistrement() {
const doc = SpreadsheetApp.getActive();
var f2 = doc.getSheetByName('Suivi-des-devis');
var dossier2 = DriveApp.getFolderById("1WNyBdexfylgflnDeKtMcdIN-eS578dlH")
var nom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DEVIS').getRange('E6').getValue()
var files = dossier2.getFilesByName("FAC_" + nom).next().getUrl();
f2.getRange('O2').setValue(files);

};
Rechercher des sujets similaires à "lien hypertexte fichier enregistre partir macro"