Finition pour un script svp

Résolu/Fermé
biog13 Messages postés 22 Date d'inscription lundi 12 juillet 2021 Statut Membre Dernière intervention 3 août 2023 - 16 janv. 2023 à 12:29
biog13 Messages postés 22 Date d'inscription lundi 12 juillet 2021 Statut Membre Dernière intervention 3 août 2023 - 17 janv. 2023 à 14:26

Bonjour,

J'utilise depuis plusieurs mois un script pour ajouter automatique la date lorsqu'on modifie une cellule de la colonne1.

ça marche quand on modifie manuellement la cellule ou quand on fait copier/coller.

Mais j'ai voulu mettre en place une fenêtre de saisie avec une macro qui vient copier/coller les informations et depuis la date de s'incrémente plus automatique alors que le script fonctionne toujours manuellement...

Vous auriez une idée svp ?

et si je pouvais affecter la macro uniquement  la sheet1 ça serait top aussi :)

merci pour votre aide

function onEdit(e) {
  const as = e.source.getActiveSheet();
  const row = e.range.getRow();
  const col = e.range.getColumn();
   const tz = e.source.getSpreadsheetTimeZone();
  const date = Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy     HH:mm:ss');

  if (col==1){ 
        as.getRange(row,15).setValue(date);
  }
}
A voir également:

3 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
16 janv. 2023 à 13:58

Bonjour,

Le plus simple, tu créés une fonction et tu y fais appel dans ta macro...

par exemple :

function onEdit(e) {
 setDate();
}

function setDate(){
  const as = e.source.getActiveSheet();
  const row = e.range.getRow();
  const col = e.range.getColumn();
   const tz = e.source.getSpreadsheetTimeZone();
  const date = Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy     HH:mm:ss');

  if (col==1){ 
     as.getRange(row,15).setValue(date);
  }
}

function tamacro(){

 //ton code.....


 // puis appel de la fonction setDate
  setDate();
}

0
biog13 Messages postés 22 Date d'inscription lundi 12 juillet 2021 Statut Membre Dernière intervention 3 août 2023
16 janv. 2023 à 15:16

Merci Jordane, pour ton idée.

J'ai du me louper, j'ai un message d'erreur -> ReferenceError: e is not defined

Mais en effet je peux faire évoluer le script pour que la date se rajoute quand je clique sur le bouton  "Ajouter" de la fenêtre de saisie, plutôt que quand une cellule est modifiée dans le sheet. c'est peut-être plus simple...

function onEdit(e) {
 setDate();
}

function setDate(){
  const as = e.source.getActiveSheet();
  const row = e.range.getRow();
  const col = e.range.getColumn();
   const tz = e.source.getSpreadsheetTimeZone();
  const date = Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy     HH:mm:ss');

  if (col==1){ 
        as.getRange(row,15).setValue(date);
  }
}

function ReinitialiserFormulaire() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRangeList(['G4', 'J4', 'D4:D5', 'D7', 'G7', 'J7', 'D9', 'G9', 'J9', 'D12', 'G12', 'J12', 'C16']).activate()
  .clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('D12').activate();
  spreadsheet.getRange('C28').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('G12').activate();
  spreadsheet.getRange('C28').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('J12').activate();
  spreadsheet.getRange('C28').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('D5').activate();
  spreadsheet.getActiveRangeList().insertCheckboxes();
};

function Ajouter() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('Suivi!2:2').activate();
  spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1);
  spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
  spreadsheet.getRange('saisie!D4').copyTo(spreadsheet.getRange('Suivi!A2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!D5').copyTo(spreadsheet.getRange('Suivi!B2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!G4').copyTo(spreadsheet.getRange('Suivi!C2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!J4').copyTo(spreadsheet.getRange('Suivi!D2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!D7').copyTo(spreadsheet.getRange('Suivi!E2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!G7').copyTo(spreadsheet.getRange('Suivi!F2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!J7').copyTo(spreadsheet.getRange('Suivi!G2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!D9').copyTo(spreadsheet.getRange('Suivi!H2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!G9').copyTo(spreadsheet.getRange('Suivi!I2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!J9').copyTo(spreadsheet.getRange('Suivi!J2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.getRange('saisie!D12').copyTo(spreadsheet.getRange('Suivi!K2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.getRange('saisie!G12').copyTo(spreadsheet.getRange('Suivi!L2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.getRange('saisie!J12').copyTo(spreadsheet.getRange('Suivi!M2'), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
  spreadsheet.getRange('saisie!C16').copyTo(spreadsheet.getRange('Suivi!N2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('saisie'), true);
  spreadsheet.getRange('D4').activate();
     setDate();
}
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié le 17 janv. 2023 à 14:37

Désolé, j'ai copié/collé un peu vite.

ça serait plutot du genre :

function onEdit(e) {
  const as = e.source.getActiveSheet();
  const row = e.range.getRow();
  const col = e.range.getColumn();
  const tz = e.source.getSpreadsheetTimeZone();
  setDate(as,row,col,tz);
}

function setDate(as,row,col,tz){
  const date = Utilities.formatDate(new Date(), tz, 'dd-MM-yyyy     HH:mm:ss');
  if (col==1){ 
     as.getRange(row,15).setValue(date);
  }
}

function tamacro(){

 //ton code.....


 // puis appel de la fonction setDate
  setDate(as,row,col,tz); // attention aux paramètres
}
0
biog13 Messages postés 22 Date d'inscription lundi 12 juillet 2021 Statut Membre Dernière intervention 3 août 2023
17 janv. 2023 à 14:26

c'est pas brillant, je m'en sors pas... :( 

Jordane, je vais avoir besoin des 1% restant de la macro stp

J'ai besoin qu'elle me rajoute la date dans  'Suivi!O2'

vu que je rajoute une ligne à chaque nouvelle entrée, la cellule cible est toujours O2

0