Copie de sauvegarde, ... avec les permissions

Bonjour,

Mon précédent problème résolu, je constate qu'il manque les Partages et Permissions… pour une sauvegarde, c'est pas terrible !

Existe-t-il dans ce domaine un moyen de conserver ces éléments au sein du fichier de destinations ?

Pour mémoire, je vous joins la fonction en question.

function Sauvegarde() {
// ID du dossier de destination (dossier Sauvegardes de Mon Drive)
var dossierId = '18u1w97D5BxUAiQbxqL71ROX68VoyI-XS';
// Obtenir le fichier actif
var fichierActif = DriveApp.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId());
// Créer une copie du fichier dans le dossier spécifié
var dossierDestination = DriveApp.getFolderById(dossierId);
fichierActif.makeCopy('Tableau de bord' + ' - Sauvegarde', dossierDestination);
}

Merci d'avance, cordialement

JL

SVP ...

Cordialement

JL

Bonjour,

Il me semble que le sujet a déjà été traité.

https://forum.excel-pratique.com/sheets/makecopy-et-conservation-des-permissions-171984#p1066624

Cordialement,

Fil.

Bonjour,

Mal cherché, comme souvent

J'ai exécuté la fonction suivante :

function recopieAvecPlagesProtégées() {
var srcSheetId = 'Tableau de bord - Ateneo'
var folderID = '1kiDvIKeqOm1_HNjn8MPWzoDAN2On1HOh'
var destFolder = DriveApp.getFolderById('18u1w97D5BxUAiQbxqL71ROX68VoyI-XS')
var destSheetName = 'Tableau de bord' + ' - Sauvegarde'
var newId = DriveApp.getFileById(srcSheetId).makeCopy(destSheetName, destFolder).getId(); // ligne 62
var dest = SpreadsheetApp.openById(newId)
SpreadsheetApp.openById(srcSheetId).getSheets().forEach( (sh,i) => {
transfererProtections(sh,dest.getSheets()[i])
})
}

et obtenu le message suivant...

Exception: Unexpected error while getting the method or property getFileById on object DriveApp.recopieAvecPlagesProtégées@ Tableau de Bord.gs:62

DriveApp ?

Merci

JL

Là, malheureusement, ça dépasse mes maigres connaissances en Apps Script.

Peut-être que Pierre, Sébastien ou autres pourront t'aider... 👍

wait and see !...

merci

JL

Bonjour,

Mes connaissances sont maigres aussi mais je vois que vous utilisez getFileById avec comme argument srcSheetId = 'Tableau de bord - Ateneo'... Il me semble qu'il s'agirait plutot du nom de votre fichier, pas de son ID.

Essayez peut etre plutot Class DriveApp | Apps Script | Google for Developers getFileByName avec cet argument, ou entrez l'ID de votre fichier au lieu de son nom.

Le problème, c'est que je suis encore moins compétent que vous !...

Comme suggéré, j'ai remplacé le nom du fichier par l'ID :

function recopieAvecPlagesProtégées() {

var srcSheetId = '1pUiO5hlD453aYlEaL2kDNBmt65T5TbmSNCurNR7uHlM'

var folderID = '1kiDvIKeqOm1_HNjn8MPWzoDAN2On1HOh'

var destFolder = DriveApp.getFolderById('18u1w97D5BxUAiQbxqL71ROX68VoyI-XS')

var destSheetName = 'Tableau de bord' + ' - Sauvegarde'

var newId = DriveApp.getFileById(srcSheetId).makeCopy(destSheetName, destFolder).getId(); //62

var dest = SpreadsheetApp.openById(newId)

SpreadsheetApp.openById(srcSheetId).getSheets().forEach( (sh,i) => { //64

transfererProtections(sh,dest.getSheets()[i]) //65

})

}

ReferenceError: transfererProtections is not defined(anonyme)@ Tableau de Bord.gs:65

recopieAvecPlagesProtégées@ Tableau de Bord.gs:64

on a gagné une ligne !.... mais ça se précise, non?

Cordialement

JL

Comme indiqué dans le message de Steelson " avec la fonction décrite précédemment".

càd avec la fonction de son message précédent

function transfererProtections(sh1,sh2){
  if (sh1.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0]) {
    // cas d'une protection de feuille avec exclusion de certaines plages
    var p1 = sh1.getProtections(SpreadsheetApp.ProtectionType.SHEET)[0];
    var p2 = sh2.protect();
    p2.setDescription(p1.getDescription());
    p2.setWarningOnly(p1.isWarningOnly());
    if (!p1.isWarningOnly()) {
      p2.removeEditors(p2.getEditors());
      p2.addEditors(p1.getEditors());
    }
    var ranges = [];
    p1.getUnprotectedRanges().forEach(rng => {
      ranges.push(sh2.getRange(rng.getA1Notation()));
    })
    p2.setUnprotectedRanges(ranges);
  }
  else {
    // cas d'une protection de plages
    sh1.getProtections(SpreadsheetApp.ProtectionType.RANGE).forEach(p1 => {
      var p2 = sh2.getRange(p1.getRange().getA1Notation()).protect();
      p2.setDescription(p1.getDescription());
      p2.setWarningOnly(p1.isWarningOnly());
      if (!p1.isWarningOnly()) {
        p2.removeEditors(p2.getEditors());
        p2.addEditors(p1.getEditors());
      }
    })
  }
}

puisque votre code y fait appel dans la ligne où se produit l'erreur. Si vous traduisez le message d'erreur il indique d'ailleurs "fonction transfererProtections n'est pas définie"

Merci de m'avoir remis les points sur les i ...

La fonction transfert mise en place, tout est rentré dans l'ordre.

Merci à tous

Cordialement

JL

N'oublie pas de clôturer le sujet, il pourra servir à d'autres... 👍

Rechercher des sujets similaires à "copie sauvegarde permissions"