Finition pour un script svp
RésoluBonjour,
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
-
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(); }
-
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(); }-
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 }
-
-
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