Exécuter un google script sur les cellules d'un range sélectionné

Bonjour,

Je cherche à exécuter ce script sur les cellules de la plage sélectionnée. Il crée des dossiers dans le drive nommé par le contenu de la cellule.

Ici, il fonctionne que sur une cellule à la fois. Merci pour votre aide.

function createAndHyperlink2022() { var confirm = Browser.msgBox('⚠️ ATTENTION : les nouvelles factures doivent être en rouge et trier par couleur.', Browser.Buttons.YES_NO); if(confirm!='yes'){return}; var ss, sh, parent, parent2, r, v, thisCell, folder ss = SpreadsheetApp.getActive() sh = ss.getSheetByName('Globale') parent = DriveApp.getFileById(ss.getId()).getParents().next(); parent2 = DriveApp.getFolderById("xxxx") r = sh.getCurrentCell(); v = r.getValues() thisCell = r if (v[0] && !thisCell.getFormula()) { folder = parent2.createFolder(v[0]); thisCell.setFormula('=HYPERLINK("' + folder.getUrl() + '"; "' + v[0] + '")'); } }
Bonne journée

Basile

Bonjour,

mais c'est illisble, peut tu remettre le script en utilisant la balise </> plutôt que [] ? merci

Bonjour,

Navré.

Voici ;

function createAndHyperlink2022() {

    var ss, sh, parent, parent2, r, v, thisCell, folder
    ss = SpreadsheetApp.getActive()
    sh = ss.getSheetByName('Globale')
    parent = DriveApp.getFileById(ss.getId()).getParents().next();
    parent2 = DriveApp.getFolderById(xxx")
    r = sh.getActiveRange();
    v = r.getValues()

        thisCell = r 
        if (v[0] && !thisCell.getFormula()) {
            folder = parent2.createFolder(v[0]);
            thisCell.setFormula('=HYPERLINK("' + folder.getUrl() + '"; "' + v[0] + '")');
        }
        SpreadsheetApp.getActive().toast('Dossier créé sur le Drive' , '📁 Confirmation')
    }

Merci

Bonjour,

petite erreur de syntaxe ici

parent2 = DriveApp.getFolderById("xxx")

à quoi sert parent ?

parent = DriveApp.getFileById(ss.getId()).getParents().next();

il y a aussi une ambiguïté en écrivant

thisCell.getFormula()

car thisCell peut être une plage de cellules, dans ce cas on utilise getFormulas() au pluriel puisque tu mets getValues() au pluriel

r = sh.getActiveRange();
v = r.getValues()

.. mais le reste ne suit pas


Bref explique ce que tu souhaites et notamment s'il n'y a qu'une seule ou plusieurs cellules sélectionnées

Bonjour Steelson,

Merci pour ton message.

Je cherche à créer un dossier dans le drive qui porte le nom de la cellule et dans la cellule, le nom apparait avec le lien derrière. Et de pouvoir exécuter le script sur les cellules sélectionnées.

ok, ce dossier se rattache-t-il à la racine de ton drive ou à un dossier déjà existant ?

Dans un dossier déjà existant

Règle les paramètres ...

voir ci-après
image

Merci Steelson,

Est ce que ce script fonctionnera uniquement sur des cellules sélectionnées?

Elles ne sont pas ici sélectionnées, elles sont indiquées par

var range = f.getRange('A2:A'+f.getLastRow())

c'est à dire toute la colonne A depuis ligne 2

Si nécessaire, précise le comme j'avais demandé

Bref explique ce que tu souhaites et notamment s'il n'y a qu'une seule ou plusieurs cellules sélectionnées

En fait, j'aimerai pouvoir sélectionner avec la souris plusieurs cellule et cliquer sur le bouton que j'ai mis dans le menu pour que le script s'exécute uniquement sur les ces cellules. Current cells ou selected cells

Il faut que la sélection soit continue

voir ci-après
Steelson !

Un immense merci.

C'est exactement ça que je cherchais. Je te remercie. C'est top.
Je vais gagner du temps.

Merci merci !

Je pense qu'il faut quand même ajouter une condition sur la cellule (non vide)

function creerDossiers() {
  parentId = 'id du dossier';
  var f = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = SpreadsheetApp.getActiveRange();
  var parent = DriveApp.getFolderById(parentId);
  var data = range.getValues();
  var formules = range.getFormulas();
  for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[0].length; j++) {
      if (formules[i][j] == '') {
        if (data[i][j] != '') {
          var folder = parent.createFolder(data[i][j]);
          f.getRange(range.getRow() + i, range.getColumn() + j).setFormula(`=HYPERLINK("${folder.getUrl()}";"${data[i][j]}")`)
        }
      }
    }
  }
  SpreadsheetApp.getActive().toast('Dossiers créés sous "' + parent.getName() + '" !', '📁 Confirmation')
}

Oui c'est pas idiot.

C'est génial !

Rechercher des sujets similaires à "executer google script range selectionne"