Sélection d'une macro à partir d'une liste déroulante

Bonjour cher membre et je remercie d'avance pour votre éventuel collaboration,

Voici mon problème: sur une feuille google sheets j'ai 13 macros, ce que j'aimerais ce serait de pouvoir lancer l'une d'elle à partir d'une liste déroulante.

Puisque ces macros servent surtout a reconditionner un tableau et trier celui-ci selon différent critère, il est donc plus facile de choisir celui que l'on veut via cette liste.

image une sans tri:

image

image avec tri sur la colonne "date 8" le nom des macros se trouve sur la première ligne:

La première ligne contient seulement le nom de la macro de la colonne

la liste déroulante ce trouve en "B2" car la première ligne sera supprimer c'est pour le besoin de l'explication.

image

Dernière précision les données de l liste pourraient changer l'année suivante car cette feuille sera recopier pour l'année suivante mais avec de nouvelle données en ligne 3 et 4 (lieu et date).

Voici le code en ma possession

function D1() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('1:1').activate();
  spreadsheet.getActiveRangeList().setBackground('#ffffff');
  spreadsheet.getRange('E1').activate();
  spreadsheet.getActiveRangeList().setBackground('#ffff00');
  spreadsheet.getRange('6:43').activate()
  .sort([{column: 5, ascending: false}, {column: 4, ascending: false}, {column: 3, ascending: true}, {column: 1, ascending: true}, {column: 2, ascending: true}]);
  spreadsheet.getRange('E44').activate();
  spreadsheet.getCurrentCell().setValue(' ');
  spreadsheet.getRange('E6').activate();
};

function onEdit(e) {
   const range = e.range;
   if ((range.getRow()===1) && (range.getColumn()===2)){
     if (range.getValue()==="x" ){D2();
}}}

function D2() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('1:1').activate();
  spreadsheet.getActiveRangeList().setBackground('#ffffff');
  spreadsheet.getRange('F1').activate();
  spreadsheet.getActiveRangeList().setBackground('#ffff00');

  spreadsheet.getRange('E:E').activate();
  spreadsheet.getActiveSheet().hideColumns(spreadsheet.getActiveRange().getColumn(), spreadsheet.getActiveRange().getNumColumns());

  spreadsheet.getRange('W1').activate();
  spreadsheet.getCurrentCell().setValue(' ');  
  spreadsheet.getRange('6:43').activate()
  .sort([{column: 6, ascending: false}, {column: 4, ascending: false}, {column: 3, ascending: true}, {column: 1, ascending: true}, {column: 2, ascending: true}]);
  spreadsheet.getRange('F6').activate();
};

mais le code pour "D2" ne fonctionne pas.

P.S.: je ne suis pas programmateur j'essaye de me débrouiller, c'est pour cela que j'ai besoin de votre aide.

https://docs.google.com/spreadsheets/d/1_jbo8VXvpWsG-3JYz9uXXT1ssjDTmpyIRNcLmZzILpM/edit?usp=sharing

merci d'avance

Mbelle

Bonjour,

L'accès au fichier est refusé, partage comme suit https://www.sheets-pratique.com/fr/cours/partage

J'opterais davantage pour un menu personnalisé

function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
.addItem('👉 bla bla 1', 'fonction1')
.addItem('👉 bla bla 2', 'fonction2')
.addItem('👉 bla bla 3', 'fonction3')
.addItem('👉 bla bla 4', 'fonction4')
    .addToUi();
}

Bonjour Steelson,

Cela fonctionne très bien merci pour ton aide.

mbell

re Steelson,

voici le lien correct https://docs.google.com/spreadsheets/d/1_jbo8VXvpWsG-3JYz9uXXT1ssjDTmpyIRNcLmZzILpM/edit?usp=sharing

Le problème actuellement rencontré: lorsque je sélectionne "Entrainement 9", donc l'avant dernier (super l'astuce menu)

image

si je choisi un lien antérieur comme "Entrainement 2" les colonnes masquées ne plus visible donc dans la formule juste un problème.

image

L'entrainement 2 est bien choisis mais il faut passer par les deux flèches entre "D et M"

image

Il doit y avoir dans la formule une erreur car ce que j'aimerais c'est que la colonne choisie("Entrainement x") soit à côté de la colonne "D" comme ici

image

voici la formule pour cet exemple

function D2() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('1:1').activate();
  spreadsheet.getActiveRangeList().setBackground('#ffffff');
  spreadsheet.getRange('F1').activate();
  spreadsheet.getActiveRangeList().setBackground('#ffff00');

  spreadsheet.getRange('E:E').activate();
  spreadsheet.getActiveSheet().hideColumns(spreadsheet.getActiveRange().getColumn(), spreadsheet.getActiveRange().getNumColumns());

  spreadsheet.getRange('W1').activate();
  spreadsheet.getCurrentCell().setValue(' ');  
  spreadsheet.getRange('5:42').activate()
  .sort([{column: 6, ascending: false}, {column: 4, ascending: false}, {column: 3, ascending: true}, {column: 1, ascending: true}, {column: 2, ascending: true}]);
  spreadsheet.getRange('F5').activate();
};

Merci pour ton aide Steelson

mbelle

Il faudrait remettre ta colonne visible https://developers.google.com/apps-script/reference/spreadsheet/sheet#showcolumnscolumnindex

Ajoute alors

  spreadsheet.getActiveSheet().showColumns(7) // 7=G

après

  spreadsheet.getRange('g1').activate();

idem pour chaque

re:

Super je vais donc adapter à toutes les macros.

Juste une dernière chose Steelson comment je dois faire pour laisser le fichier accessible aux éditeurs pour éditer modifier les dates les lieux et pour les autres usager laisser accessible seulement les cellules "F5:O42" sans me tromper.

Merci d'avance.

mbelle

rere:

juste une petite chose sur la formule:

si je suis sur la colonne M donc macro D8

image

et que je reviens en H macro D3 c'est correct la colonne est bien affichée mais pas ceux d'après

image

de H à M ces colonnes devraient restées visible (si possible)

Si non parfait j'ai super avancé sur le projet il reste plus que sa et la sécurité ensuite .

Merci beaucoup pour ton aide.

mbelle

image

de H à M ces colonnes devraient restées visible (si possible)

regarde la doc ... c'est la bible

  spreadsheet.getActiveSheet().showColumns(7,5) // 7=G

j'ai mis 5 ... mais calcule le nombre de colonnes à afficher

laisser le fichier accessible aux éditeurs pour éditer modifier les dates les lieux et pour les autres usager laisser accessible seulement les cellules "F5:O42" sans me tromper.

il faut protéger la feuille sauf les zones qui restent accessibles et donner les droits à certains

puis donner les seuls droits en lecture à tous

re:

Petit question avec un droit de lecture les autres usager auraient quand même la possibilité ou non de modifier les cellules "F5:O42" ?

non

nota : on dérive du sujet qui est "Sélection d'une macro à partir d'une liste déroulante"

Bonsoir Seelson,

Je te remercie beaucoup pour ton aide qui m'a permis de trouver une solution à un problème avec lequel je tournais en rond.

Bonne continuation au forum et à toi.

mbelle

Rechercher des sujets similaires à "selection macro partir liste deroulante"