Finition pour un script svp

Résolu

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);
  }
}

3 réponses

  1. Modérateur

    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
    1. 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
      1. Modérateur

        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
    2. 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