Déclencheur Macro sur plusieurs feuilles sheets

- - Dernière réponse :  adriencomm - 5 sept. 2019 à 16:28
Bonjour,

J'ai un problème sur mes macros sur sheets, j'ai enregistrer plusieurs macros via l'outil "enregistrer une macro".

J'ai mis ensuite des déclencheurs pour lancé la macro tous les lundis à 1h, mais le problème est que toutes les macros se lancent uniquement sur la première feuille de mon classeur.

Je cherche donc la solution pour mettre un déclencheur sur plusieurs feuille de mon classeur.

J'espère avoir été clair.


Merci pour votre aide.
Afficher la suite 

5 réponses

Messages postés
8527
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 septembre 2019
423
0
Merci
bonjour, c'est peut-être la macro elle-même qui ne travaille que sur une feuille?
J'ai essayé de créer 4 macro sur 4 pages différentes mais quand je mets les déclencheurs les 4 macros se lancent juste sur la première page...
yg_be
Messages postés
8527
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 septembre 2019
423 > Adrien -
qu's-tu fait pour que chaque macro s'occupe de la bonne page?
Je me juste sur la page qui m'intéresse, je lance l'enregistrement de la macro, je fais mes 4 5 manip sur la page en question est je termine l'enregistrement.
yg_be
Messages postés
8527
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 septembre 2019
423 > adriencomm -
peux-tu montrer le code de ta macro? je pense que la macro travaille sur la feuille courante, la feuille active au moment où la macro est démarrée.
souhaites-tu qu'une seule macro travaille sur plusieurs feuilles?
Idéalement oui mes feuilles sont les mêmes donc en fait j'ai reproduit la même macro plusieurs fois en espérant qu'elle s'active sur les différentes feuilles sur lesquelles j'ai fait les manipulations.

Il me semblait que c'était le problème, mais je connais pas suffisamment le langage macro pour décelé le problème.

En tout cas merci pour ton aide.
function Macrofff2() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('6:6').activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getRange('7:7').activate();
  spreadsheet.getRange('16:22').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('A8:B11').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('A13:T13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('Q8:T11').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('T8'));
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('O8:O11').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('O10'));
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};



Voilà :)
Commenter la réponse de yg_be
Messages postés
8527
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 septembre 2019
423
0
Merci
après
var spreadsheet = SpreadsheetApp.getActive(); 

tu pourrais faire
var feuille = spreadsheet.getSheetByName("lenomdelafeuille")
feuille.activate;

il y a beaucoup à optimiser dans ton code.
Je vais essayé ça, je te cache pas que je suis loin d'être un expert et que je principale pour l'instant c'est que mes macros fonctionnent ^^

Et du coup pour que la macro s'applique sur plusieurs feuille tu saurais m aider ?
yg_be
Messages postés
8527
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 septembre 2019
423 > Adrie -
je ferais une macro principale qui s'occupe de toutes les feuilles:
function macrotout(){
Macrofff2("premiernom");
Macrofff2("secondnom");
};

et je modifierais ainsi le début de la macro existante:
 function Macrofff2(nomfeuille) { 
var spreadsheet = SpreadsheetApp.getActive(); 
var feuille = spreadsheet.getSheetByName(nomfeuille);
Commenter la réponse de yg_be
Messages postés
26294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
1783
0
Merci
Bonjour
Ton souci vient du fait que tu cibles la feuille active
SpreadsheetApp.getActive(


Il faut nommer (indiquer) la feuille voulue..
Sinon il ne traitera que celle qui est affichée à l'écran
Commenter la réponse de jordane45
0
Merci
J'ai bien changé dans ma macro mais celle-ci se lance plusieurs fois dans la même feuille.

function macrotout(){
Macrofff2("Léna");
Macrofff2("Cyrine");
Macrofff2("Chloé");
Macrofff2("Pauline");
};


function Macrofff2(nomfeuille) {
var spreadsheet = SpreadsheetApp.getActive();
var feuille = spreadsheet.getSheetByName(nomfeuille);
spreadsheet.getRange('6:6').activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getRange('7:7').activate();
spreadsheet.getRange('16:22').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getRange('A8:B11').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('A13:T13').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('Q8:T11').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('T8'));
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('O8:O11').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('O10'));
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};





désolé les gars je sais que je suis pas très bon
jordane45
Messages postés
26294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
1783 -
Pour commencer.... merci à l'avenir d'utiliser les BALISES DE CODE pour poster ton code sur le forum.
Explications disponibles ICI :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
.

Ensuite, .. comme je te l'ai déjà indiqué... actuellement ton code utiliser la feuille ACTIVE
var spreadsheet = SpreadsheetApp.getActive();

Donc.. c'est cette variable qu'il faut adapter en fonction de la feuille à cibler!
jordane45
Messages postés
26294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
1783 > jordane45
Messages postés
26294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
-
Pardon...
ce sont les instructions suivantes qu'il faut modifier
spreadsheet.getActiveSheet()

A remplacer par la variable que tu as créé : feuille
yg_be
Messages postés
8527
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 septembre 2019
423 -
il faut ajouter
feuille.activate;

juste en dessous de la ligne
var feuille
.
ok mais quelle ligne je dois rajouter à la place de

function Macrofff3() {
  var spreadsheet = SpreadsheetApp.getActive();


J'ai essayé ça

var feuille = spreadsheet.getSheetByName("Léna");


mais ça ne fonctionne pas...
Commenter la réponse de adrien
Messages postés
26294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
1783
0
Merci
Niveau code, ça devrait donner un truc du genre
function Macrofff2(nomfeuille) {
var spreadsheet = SpreadsheetApp.getActive();
var feuille = spreadsheet.getSheetByName(nomfeuille);
feuille.getRange('6:6').activate();
feuille.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
//etc...


Au fait, je déplace la question.
Je ne pense pas que google sheets utilise le VB ou le VBA .... le langage utilisé c'est le JAVASCRIPT.

Merci

voilà mon code complet

function Essai1(Léna) {
  var spreadsheet = SpreadsheetApp.getActive();
var feuille = spreadsheet.getSheetByName("Léna");
  feuille.activate;
  spreadsheet.getRange('7:15').activate();
  spreadsheet.getActiveSheet().insertRowsAfter(spreadsheet.getActiveRange().getLastRow(), 9);
  spreadsheet.getActiveRange().offset(spreadsheet.getActiveRange().getNumRows(), 0, 9, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getRange('A16').activate();
  spreadsheet.getRange('A7:T13').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('K15:M15').activate();
  spreadsheet.setCurrentCell(spreadsheet.getRange('M15'));
  spreadsheet.getActiveSheet().setRowHeight(22, 45);
  spreadsheet.getActiveSheet().setRowHeight(22, 62);
  spreadsheet.getRange('A16:B16').activate();
  spreadsheet.getRange('A7:T13').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.getRange('O10:O11').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('O8:O9').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('Q8').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('Q9').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('Q10').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('Q11').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('R8:R11').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('S8:S11').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('T8:T11').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('P13:T13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('N13:O13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('M13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('K13:L13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('I13:J13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('G13:H13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('E13:F13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('C13:D13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('B13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('A13').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('A8:A11').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('B8:B11').activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};


Malheuresement la macro se lance uniquement sur la première feuille...
jordane45
Messages postés
26294
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 septembre 2019
1783 -
Ta première feuille ne se nommerait pas
Léna par hasard ???
Mdr non, je suis pas bon mais pas à ce point là ^^
Commenter la réponse de jordane45