[General Questions and Answers] MaximusNimbusMeridius:
Bonjour à tous,

Je développe ma base de données sur Google Sheet, et j'aimerais pouvoir y générer des factures en pdf automatiquement, rapidement et gratuitement.

[Code à la fin]

La fonction script .gs aboutit bien, cependant le pdf généré ne peut pas être ouvert normalement après la génération, lorsque je clique sur le pdf j'obtiens ça :

lien de téléchargement du pdf généré : https://drive.google.com/file/d/1ahWPYlssZORkkE09wHIW8zoyp7uWlJiA/view?usp=sharing

Je suis obligé de me connecter sur mon compte Google VIA le document (jamais vu auparavant), pour pouvoir voir le contenu du pdf. Et j'ai l'impression que c'est uniquement après m'être connecté sur le compte avec lequel je l'ai créé, qu'il s'ouvre et se télécharge correctement (avec un autre compte, si je me connecte , j 'atterris sur le google sheet carrément, il ne me télécharge alors même plus le pdf, ni me le montre...)

Si vous avez des tuyaux pour contourner cette espèce de "mode privé", voire même une autre méthode, je suis preneur (même une simple suggestion). Merci pour le temps que vous voudrez bien m'accorder je reste disponible et réactif

Cela donne :

```

fonction onOpen() {

const ui = SpreadsheetApp.getUi();

ui.createMenu("GED").addItem("Enregistrer le PDF ↓ ","savePDF").addToUi();

}

fonction savePDF()

{

// SÉLECTIONNEUR LA FEUILLE A SAUVEGARDE

const ss = SpreadsheetApp.getActiveSpreadsheet();

feuille const = ss.getActiveSheet();

//URL de SS ?

const ssUrl = ss.getUrl();

const sheetId=sheet.getSheetId();

const url = ssUrl.replace(/\/edit.*$/,'')

+ '/export?exportformat=pdf&format=pdf'

+ '&taille=LETTRE'

+ '&portrait=vrai'

+ '&fitw=true'

+ '&top_margin=0.50'

+ '&bottom_margin=0.50'

+ '&marge_gauche=0.50'

+ '&marge_droite=0.50'

+ '&sheetnames=false'

+ '&printtitle=false'

+ '&pagenum=false'

+ '&gridlines=false'

+ '&fzr=FAUX'

+ '&gid='+sheetId;

// CREER LE PDF A PARTIR DE L'URL

// var jeton = ScriptApp.getOAuthToken();

const docurl = UrlFetchApp.fetch(url);

const pdf = docurl.getAs('application/pdf');

fichier const = DriveApp.createFile(pdf);

// RÉCOLTER LES INFORMATIONS DANS LA FEUILLE POUR COMPOSER LE NOM DU DOCUMENT

const docId = feuille.getRange('B2').getValue();

const clientName = sheet.getRange('C3').getValue();

const docDate = feuille.getRange('D2').getValue();

//mise en forme de la date : mois-annee

const docDateMMYY = docDate.getMonth()+"-"+docDate.getFullYear();

// Concaténons le tout

const docName = docId+"_DEVIS_10Zaine_"+clientName+"_"+docDateMMYY ;

// RENOMMER ET COPIER LE PDF DANS LE BON DOSSIER

/*

ATTENTION IL FAUT ADAPTATEUR LE CODE AVEC L'ID DU DOSSIER DE DESTINATION

https://drive.google.com/open?id=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

*/

dossier const = DriveApp.getFolderById("1OnsayBs90_G1NmBVbQALYNK_SmpWLWPF");

const finalFile = file.makeCopy(docName,folder);

//SUPPRIMER LE PDF ORIGINAL

file.setTrashed(true);

//RÉCUPÉRER LE LIEN

const docUrl = finalFile.getUrl();

//ajouter l'urL dans la GED.

const sheetGed = ss.getSheetByName('GED');

sheetGed.appendRow([new Date(),docId,docUrl,docName]);

// envoyer le document au client

const clientEmail = sheet.getRange('C7').getValue();

const message = "Bonjour"+"<p>Veuillez trouver ci-joint le devis "+docName+"</p>"+"<a href='"+docUrl+"'>Cliquez ici pour ouvrir le devis.</a >" ;

MailApp.sendEmail({to:clientEmail , subject: "Votre devis "+docName, htmlBody:message}) ;

// ANNONCER LA RÉUSSITE DE CRÉATION DU DOCUMENT

const ui = SpreadsheetApp.getUi();

ui.alert('Bien joué\n\nLe devis '+ docId +' a bien été créé\nIl porte le nom : '+docName+'\n\nLe lien a été ajouté dans la GED.');

openWindow(docUrl);

}

// Ouvrir le document dans une nouvelle fenêtre :

fonction openWindow(url)

{

let htmlContent = 'Le document a été créé. <a href="'+url+'" target="_blank">Cliquez ici pour l\'ouvrir</a>'+

'<script>const thisWindowOpen = window.open("'+url+'" , "_blank", "resizable,scrollbars,status"); </script>';

const html = HtmlService.createHtmlOutput(htmlContent)

.setHauteur(100)

.setWidth(500);

const ui = SpreadsheetApp.getUi();

ui.showModalDialog(html, "Ouverture en cours.");

}```

Voici l'origine du code : https://thierryvanoffe.com/google-a...-lien-dun-pdf-depuis-une-feuille-de-calcul-en -un-clic/