Problème pour partager 1 seul élément d'un fichier sheet

Bonjour a toutes et tous !

voilà mon petit soucis

j'ai un fichier sheet qui contient plusieurs feuilles ...

je souhaiterai savoir si il est possible de ne partager (en lecture seule) qu'une seule feuille de ce fichier ? de plus si cette fonction est possible il faudrait que la personne qui accède à ce fichier (qui n'aura pas forcément de compte google ...) ne puisse pas voir (ni le nom des autres feuilles ni leur contenu... )

est-ce possible une telle manip ?

par avance merci pour vos retours !!!

très bonne journée

Bonjour,

Crée un nouveau fichier en partage lecture seule dans lequel tu mets une formule de type

=IMPORTRANGE("id du fichier","nom_onglet!A1:Z")

Bonjour

merci pour ce retour

j'avais pensé à cette formule mais le problème réside dans le fait que je cherche à partager une feuille d'un fichier sheet (en gros 1 feuille = 1 personne)

dans ce fichier il peu y avoir 50 feuilles ou plus , si je crée 1 fichier par personne je risque de m'y perdre ...

cordialement

et les personnes ne peuvent pas voir les autres feuilles des autres personnes ?

  1. on pourrait imaginer un menu déroulant dans cette proposition d'avoir un fichier avec importrange
  2. bon, de toute façon, compte tenu que les personnes n'ont pas forcément accès de compte google, il reste une solution de faire un fichier html à mettre sur serveur comme ce que j'avais aidé à réaliser ici https://www.menudiecilire.it/pizza.html (reste que les bidouilleurs peuvent aller voir le code source et récupérer l'id du fichier)

est-ce que Gilbert ou Alex ont des idées ?

une peu de littérature anglaise mais qui confirme en partie ce que je disais

https://blog.coupler.io/how-to-share-google-sheet/#Sharing_a_single_sheet_of_a_document_with_one_use...

  • protection des feuilles
  • masquage des feuilles
  • permissions

https://blog.coupler.io/how-to-share-google-sheet/#Sharing_a_single_sheet_of_a_document_with_multipl...

  • création d'une feuille avec IMPORTRANGE

même chose ici : https://spreadsheetpoint.com/how-to-share-only-one-sheet-in-google-sheets/

j'ajoute donc aussi l'utilisation du endpoint au format json ou csv soit à partir d'un fichier google sheets, soit d'une fichier html, soit d'un fichier excel


la solution IMPORTRANGE n'est rien d'autre que d'avoir 50 regards différents sur le même fichier, chaque utilisateur a sa propre "clé" de lecture

sinon en effet j'avais pensé a utiliser la fonction importrange mais alors comment faire :

si j'ai 50 fichiers avec une feuille ok je peux m'organiser ....

mais dans ce cas (et pour info) a la base il y a un fichier général qui récolte les réponse d'un formulaire donc comment faire pour avoir un importrange qui puisse filtrer uniquement les données de la bonne personne (j'avais pensé à l'adresse mail mais comme la personne répondra plusieurs fois je vais avoir plusieurs lignes de réponses ...)

en gros un importrange qui filtre directement par adresse mail de l'émetteur

possible ça ?

je vais faire quelques essais demain, y compris en exploitant les filteredviews et les fvid https://support.google.com/analytics/answer/1033162 (à ne pas confondre avec les filtres) et la possibilité de les construire avec un script

dans quelle colonne se situe l'email ?

top même si je ne comprends pas tout

c'est la colonne B

merci de tenter quelque chose !!!

a demain !!!

je sais faire manuellement les filterviews pré-programmées sur un fichier comportant importrange, là il n'y a pas de difficultés mais c'est long et il faut prévoir "tout le monde" ...

je regarde pour automatiser

bonjour

alors prévoir tout le monde va être compliqué car il y aura forcément des personnes qui viendront s'inscrire au fur et a mesure pour utiliser le formulaire....

quelques fonctions développées ...


ATTENTION: le code peut effrayer ... ce n'est pas le but! il s'agit de mettre en place des "briques" de programmation qui permettront de faire ensuite une fonction facile à utiliser et pertinente. Ce qu'il faut voir surtout c'est l'atteinte de l'objectif : avoir une feuille indépendante des réponses au formulaire et qui puisse être vue indépendamment par plusieurs personnes selon la valeur contenues en B.


// enable google sheets api

function vuesFiltreesEnRafale() {
  try { delFilterViews() } catch (e) { }
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const sh = ss.getSheetByName('liste')
  var data = sh.getRange(2, 1, sh.getLastRow() - 1, 1).getValues()
  for (var i =0;i<data.length;i++){setFilterView(data[i][0], 10000+i , data[i][0], 1)}
}

function setFilterView(nomFiltre, num, critere, colonne) {
  const ss = SpreadsheetApp.getActiveSpreadsheet()
  const resource = {
    "requests": [
      {
        "addFilterView": {
          "filter": {
            "filterViewId": num,
            "title": nomFiltre,
            "range": {
              "sheetId": ss.getSheets()[0].getSheetId(),
              "startRowIndex": 0,"endRowIndex": 100,"startColumnIndex": 0,"endColumnIndex": ss.getSheets()[0].getLastColumn()
            },
            "filterSpecs": [
              {
                "filterCriteria": {"condition": {"type": "TEXT_CONTAINS","values": [{"userEnteredValue": critere }]}},
                "columnIndex": colonne
              }
            ]
          }
        }
      }
    ]
  };
  Sheets.Spreadsheets.batchUpdate(resource, ss.getId());
  var url = 'https://docs.google.com/spreadsheets/d/'+ss.getId()+'/edit#gid='+ss.getSheets()[0].getSheetId()+'&fvid='+num
  console.log(nomFiltre, url)
}

function delFilterViews(nomOnglet) {
  var ssId = SpreadsheetApp.getActive().getId();
  Sheets.Spreadsheets.batchUpdate(
    {
      requests: Sheets.Spreadsheets.get(ssId, {
        fields: 'sheets/filterViews/filterViewId',
      }).sheets[0].filterViews.map(function (e) {
        return { deleteFilterView: { filterId: e['filterViewId'] } };
      }),
    },
    ssId
  );
}

on peut aussi retrouver facilement la liste des vues filtrées

function getAllFilterViews() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var id = ss.getId();
  var myFilterViews = Sheets.Spreadsheets.get(id, {
    fields: 'sheets/filterViews',
  }).sheets[0].filterViews;
  var list=[]
  myFilterViews.forEach(function(f){
    // Logger.log(JSON.stringify(f))
    var url = 'https://docs.google.com/spreadsheets/d/'+ss.getId()+'/edit#gid='+ss.getSheets()[0].getSheetId()+'&fvid='+f.filterViewId
    list.push([f.title,url])
  })
  Logger.log(list)
};

de façon à la traiter et l'envoyer par mail à chacun par exemple

bonjour

merci pour ce retour

j'avoue que oui cela me change de mes copier/coller , je n'y connait en code ... je pense que je vais bien m'amuser ce WE ...

je vous tiens informé si j'y arrive

bon amusement ... je pensais t'avoir perdu avec ma proposition !

reste à distribuer les url à chaque lecteur

Effectivement j'ai pris un peu peur ...

Je vais suivre a la lettre tes instructions et voir si j'y arrive

En tout cas encore merci 👍👍👍

Reprends une nouvelle copie, j'ai un peu fait évoluer le code suite à quelques essais.

Si tu reprends le code dans ton fichier, n'oublie pas que :

  • - je tiens compte de la première feuille (cela peut s'aménager)
  • - il faut activer le service sheets api (voir à gauche dans l'éditeur de script)

Un sujet qui m'a beaucoup plu ! et j'y ai appris pas mal de choses ...

des nouvelles ? si tu as eu le temps ...

bonjour

oui effectivement je n'ai pas pu y regarder car je suis actuellement HS (testé positif malheureusement ...) Et cloîtré au fond de mon lit 🌡️🥶😓

je suis bien a plat mais normalement d'ici fin de semaine cela devrait aller mieux et oui comptez sur moi pour déballer ce cadeau 🕺🎁

bien a vous

portez vous bien

Rechercher des sujets similaires à "probleme partager seul element fichier sheet"