Implémenter date automatiquement en colonne A si B rempli (sans variation)

Bonjour à tous,

Nouveau sur le forum, toutes mes excuses si ce sujet a déjà été abordé. (Fort probablement).

Je suis assez novice dans l'utilisation de GS mais je me débrouille, en revanche, complétement newbie concernant l'utilisation de script.

Comme indiqué en objet, j'aimerais que lorsque je remplis qqchose en B1 par exemple, vienne se mettre la date en A1 et que celle ci reste figée (sans passer par =AUJOURDHUI() donc).

Après quelques recherches, j'ai vu qu'il fallait passer par un script justement, donc "Extensions => Apps Scripts" n'est ce pas?

Il me semble avoir vu ici un script ressemblant à ceci:

function onEdit(event){ 
  var col = 4; // colonne D
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if ((r.getColumn() == col) && (r.getRow() > 2)){ 
    if (r.getValue()==0) {
      r.offset(0,4).setValue(new Date()); // de D à H = 4
    }
    else {
      r.offset(0,4).clearContent()
    }
  }
}

Mais n'ayant pas jusque là les connaissances suffisantes, je ne sais l'adapter.

D'avance, un grand merci pour toute aide apportée.

TC

Bonjour,

Une proposition issue d'un script de Steelson sur ce forum et adapté à votre demande

function onEdit(e) {
  var cel = e.source.getActiveRange();
  if (cel.getColumn() == 2) {
    if ( ! cel.isBlank() ) {
      var d = Utilities.formatDate(new Date(), "GMT-5", "dd MM yyyy")
      cel.offset(0,-1).setValue(d);
    }else{
      cel.offset(0,-1).clearContent();
    }
  }
}

Ssi vous écrivez en colonne B alors la date se met, si vous effacer une cellule de la colonne B, la date est effacé.

Bonjour,

Attention juste au GMT, à l'heure de Paris on est en GMT+1, GMT-5 doit correspondre à une horaire au Canada / Usa.

Bien vu Pierre, merci

function onEdit(e) {
  var cel = e.source.getActiveRange();
  if (cel.getColumn() == 2) {
    if ( ! cel.isBlank() ) {
      var d = Utilities.formatDate(new Date(), "GMT+1", "dd MM yyyy")
      cel.offset(0,-1).setValue(d);
    }else{
      cel.offset(0,-1).clearContent();
    }
  }
}

Bonjour,

Merci beaucoup pour votre réactivité et vos réponses. Je pense faire une erreur à quelque part, car j'ai ce message d'erreur:

image

Une idée de ce qu'il se passe s'il vous plait? Désolé et encore merci!

Le code erreur est "normal" vu qu'il s'agît d'une fonction onEdit, cependant il manque le nom de la feuille, j'ai été un peu vite à taper...

Il vous suffit de remplacer le nom "Feuille 1" par celui de la feuille concerner sinon cette fonction fera de même sur chaque feuille active

function onEdit(e) {
  var range = e.range;
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Feuille 1");
  if (range.getColumn() == 2 && range.getValue() != "") {
    var d = Utilities.formatDate(new Date(), "GMT+1", "dd MM yyyy")
    sheet.getRange(range.getRow(), 1).setValue(d);
  }else{
    sheet.getRange(range.getRow(), 1).clearContent();
  }
}

Un grand merci Fred, en effet, cela fonctionne très bien!

En revanche, j'ai une autre problématique.

Si je continue à remplir une autre colonne, C ou D par exemple, ma date incrémentée automatiquement via le script en A s'efface.

Que puis je modifier pour que cela n'arrive plus?

Nous allons procéder différemment

Du coup ne sera pris en compte les saisies dans la plage B2:B ce qui permet de mettre une entête.

Si saisie dans B2:B, la date s'affiche en A2:A

Si on efface une cellule de B2:B la ligne entière s'efface et un tri est effectué sur la colonne A dans la plage A2:A

Si on saisie dans n'importe quelle cellule des colonnes autre que A ou B, pas de soucis normalement.

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Feuille 1"); //Remplacer par le nom de votre feuille
  var range = e.range;
  var row = range.getRow();
  var column = range.getColumn();

  if (column == 2 && row > 1) {
    var value = range.getValue();
    var date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy");

    if (value != "" && sheet.getRange(row, 1).getValue() == "") {
      sheet.getRange(row, 1).setValue(date);
    }

    if (value == "") {
      sheet.getRange(row, 1, 1, sheet.getLastColumn()).clearContent();
      sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).sort({column: 1, ascending: true});
    }
  }
}

Vous pouvez à nouveau cliquer sur "sujet résolu" pour enlever 1ère solution proposée qui ne convenait pas.

A vous relire.

Dailleurs il serait possible de remplacer

var date = Utilities.formatDate(new Date(), "GMT+1", "dd/MM/yyyy");

par

var date = Utilities.formatDate(new Date(), sheet.getParent().getSpreadsheetTimeZone(), "dd/MM/yyyy");

ce qui permet à la date de s'aligner aux paramètres géographiques de votre classeur.

Bonjour,

Désolé pour ma réponse tardive, avec ce nouveau script, cela fonctionne parfaitement, encore merci à vous!

Rechercher des sujets similaires à "implementer date automatiquement colonne rempli variation"