Envoyer par mail un pdf issu d'un seul onglet sheet

Bonjour.

Je me suis inspiré de ce post pour aussi automatiser l'envoi d'une facture par mail et la stocker dans le drive.

J'ai également posté à la suite du message initial mais comme il est résolu, je pense préférable d'ouvrir un nouveau post (par contre mon post est en doublon ).

Seulement, j'ai des soucis....

Pour le moment je demande d'envoyer la feuille ID correspondante mais en fait je voudrais qu'il me sélectionne seulement la plage A1:G42 de mon onglet 'Facture'. Une fois le pdf édité, il tient sur 2 pages alors que l'aperçu est sur une seule....

Aussi je cherche à personnaliser le nom du pdf enregistré sous le drive. J'aimerai que le nom soit Facture du yyyyMMdd N° xx. xx correspond à la cellule B13 de mon onglet Facture. La cellule B13 est du genre "YYYY/mm/jj - xx" où "xx" est un numéro d'ordre.
J'ai bidouillé mais ça ne va pas et me fait "Facture du_20240312N°1xUKx4Ma0DmP_6E_gqdQR0zoST2wehDxxc3pxUAMEKw4"

J'ai essayé de créer const ou var docId où docId est ce numéro de facture.

Je pense qu'il faudrait que j'arrive à isoler le texte de cette cellule car les / et - mais j'ai cherché avec les & ou les ' mais rien n'y fait...

Voici le script au cas où:

function envoiCopieFeuillePDF() {
  DocumentApp.getActiveDocument();
  DriveApp.getFiles();

  // variables
  const doc = SpreadsheetApp.getActive();
  const docID = '1xUKx4Ma0DmP_6E_gqdQR0zoST2wehDxxc3pxUAMEKw4';
  const feuilleID = '1410644122';
  var email =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Facture').getRange('E41').getValue()        ;                              
  const dossier = DriveApp.getFolderById('1mNulgsvTkDRTMMhFC-lhN2vAbG6kLgEm');
  const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd");

  const docId =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Facture').getRange('B13').getValue()                     ;

  const fichier = 'Facture du' + "_" + d + "N°" + docID +".pdf"
  const objet = 'Test pdf';
  const corps = "Veuillez trouver ci-joint ...";

  // Création du fichier pdf
  const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
  const exportOptions =
    'exportFormat=pdf&format=pdf' + 
    '&size=A4' + 
    '&portrait=true' +                     // orientation portrait, false pour paysage
    '&fitw=false' +                        // pas d'ajustement en largeur
    '&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=' + feuilleID;
  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
  var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();

  // Envoi email avec fichier attaché 
    GmailApp.sendEmail(email, objet, corps, {
      htmlBody: corps,
      attachments: [{
            fileName: fichier,
            content: reponse.getBytes(),
            mimeType: "application/pdf"
        }]
    });

  // Sauvegarde du fichier. 
  dossier.createFile(reponse.setName(fichier));
}

Si quelqu'un peux me filer un coup de main, ce serait super !

Merci à tous

J'avance doucement....

J'ai réussi à résoudre mon premier souci qui était que le pdf créé ne tenait pas sur un page.

J'ai spécifié les 4 marges à 0.5à et rétréci les colonnes. Ceci dit si quelqu'un connait la commande pour n'imprimer qu'une sélection de cellules, je suis preneur !

Il ne reste que mon deuxième problème qui est de personnaliser le nom du pdf en utilisant les valeurs de certaines cellules.

J'espère que quelqu'un pourra m'aider, je continue de chercher sur le net.

Je m'auto-réponds mais je partage si cela peut en aider d'autres!!

L'erreur était toute bête, j'avais deux "const docId" alors le numero bizarre que j'avais était le premier const docId déclaré soit l'adresse de fichier sheet ;)

J'ai créée une nouvelle variable factID et tout fonctionne !

function envoiCopieFeuillePDF() {
  DocumentApp.getActiveDocument();
  DriveApp.getFiles();

  // variables
  const doc = SpreadsheetApp.getActive();
  const docID = '1xUKx4Ma0DmP_6E_gqdQR0zoST2wehDxxc3pxUAMEKw4';       ///adresse du fichier sheet
  const feuilleID = '1410644122';                                     ///sheetId  
  var email =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Facture').getRange('E41').getValue()        ;                              
  const dossier = DriveApp.getFolderById('1mNulgsvTkDRTMMhFC-lhN2vAbG6kLgEm'); // adresse du dossier de sauvegarde dans le drive
  const d = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd");

 const factID =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Facture').getRange('B13').getValue()                     ;

  const fichier = 'Facture du' + " " + d + "  N°  " + factID +".pdf"
  const objet = 'Test pdf';
  const corps = "Veuillez trouver ci-joint ...";

  // Création du fichier pdf
  const url = 'https://docs.google.com/spreadsheets/d/' + docID + '/export?';
  const exportOptions =
    'exportFormat=pdf&format=pdf' + 
    '&size=A4' + 
    '&portrait=true' +                     // orientation portrait, false pour paysage
    '&fitw=false' +                        // pas d'ajustement en largeur

    '&top_margin=0.50' +
    '&bottom_margin=0.50' +    
    '&left_margin=0.50' +
    '&right_margin=0.50' +

    '&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=' + feuilleID;
  var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
  var reponse = UrlFetchApp.fetch(url + exportOptions, params).getBlob();

  // Envoi email avec fichier attaché 
    GmailApp.sendEmail(email, objet, corps, {
      htmlBody: corps,
      attachments: [{
            fileName: fichier,
            content: reponse.getBytes(),
            mimeType: "application/pdf"
        }]
    });

  // Sauvegarde du fichier. 
  dossier.createFile(reponse.setName(fichier));
///////////////////

  }

Il ne me reste plus qu'à assigner cette macro à une case à cocher. L'application va être utilisée sur tablette et c'est le seul moyen, à ma connaissance, de déclencher des macros sur ce support. J'aurai peut-être besoin d'un coup de pouce pour cette opération.

Merci à vous !

je suis toujours à la recherche d'un bout de code pour activer cette macro depuis une case à cocher (en G42 sur mon onglet 'Facture')

function onEdit(event){
  var feuille = event.source.getActiveSheet();
  var cellule = feuille.getActiveCell();
  if(feuille.getName()=='Facture' && cellule.getColumn() == 7){  
envoiCopieFeuillePDF();}

J'ai rajouté ceci et cela fonctionne mais je voudrais qu'une fois la macro éxécutée, la case soit décochée. Quelqu'un a une idée ??

Merci encore

J'ai réussi

Rechercher des sujets similaires à "envoyer mail pdf issu seul onglet sheet"