NOW qui ne change pas

Bonjour,

Je souhaiterais utiliser la fonction now (ou similaire) sans que celle ci ne change a chaque fois que je l'utilise.

En gros j'ai un tableau ou je dois saisir des données a un, instant "T" et pouvoir conserver la date ( et l'heure si possible ). Pour plus de rapidité j'ai effectué une liste déroulante avec la fonction "NOW" pour avoir seulement a cliquer dessus, hors a chaque fois que je sélectionne "NOW" sur une autre ligne, cela me modifie ma première mes précédentes lignes aussi.

Comment pourrais-je faire pour que mes ligne ne soit pas modifiés a chaque fois qu'une date est rentrée?

Merci d'avance!

Bonjour,

Il te faut un script qui mette en "dur" la date et l'heure

range.setValue(new Date());

range étant défini auparavant

exemple ...

function onEdit(event){ 
  var col = 2; // colonne B
  var feuille = "TABLEAU_DE_SUIVI_DE_FABRICATION";
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if ((r.getColumn() == col) && (f.getName() == feuille) && (r.getRow() > 2)){ 
    r.offset(0,1).setValue(new Date());
  }
}

Merci pour ta réponse, je suis débutant sur sheet et je sais pas du tout ou rentrer les script, pourrait tu m'expliquer ou les saisir et comment ça fonctionne ou alors me diriger vers un tuto ?

Encore merci

Le plus simple serait d'expliquer sur un cas concret. Peux-tu mettre un lin vers une copie anonymisée de ton fichier ? https://www.sheets-pratique.com/fr/cours/partage

Bonjour, excusez moi du temps de réponse.

Voici le lien: https://docs.google.com/spreadsheets/d/17_RUrwZtZZ0xV9lvvpaP4gLwNGttuDil4VDwy9YxKFM/edit?usp=sharing

Encore merci de votre temps et votre aide

Bonjour,

Fais outils > Editeur de script

et remplace ce qui est proposé par

function onEdit(event){ 
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if ((r.getColumn() > 1) && (f.getName() != "Total") && (r.getRow() > 1)){ 
    f.getRange('A'+r.getRow()).setValue(new Date());
  }
}

Bonjour, j'ai essayé mais cela ne fonctionne pas.

J'ai raté une étape?

Le fichier avec le script est toujours dispo avec le lien au dessus

Encore merci

Cela fonctionne

Il ne faut pas mettre la validation des données. Il suffit d'écrire dans les colonnes B, C ou D et une date+heure sera inscrite.

En effet je n'avais pas vu, merci c'est top, petite question, dans mon fichier original, j'ai d'autres colonnes derrières qui sont saisi plusieurs jours après. Hors avec le script actuelle il faut que tout le reste de la ligne soit rempli ? Et il faut que lorsque je remplie les casses vides lors de la première saisie que la date le change pas

Désolé je ne l'avais pas précisé avant parce que je ne pensais pas que cela fonctionnerait comme ça.

Avec le script actuel, quelle que soit la colonne renseignée, la date se (re-)met à jour.

On peut :

  1. soit déclencher la date juste par une cas à cocher que l'on peut mettre colonne A et la date+heure colonne B
  2. soit indiquer quelles sont les colonnes qui déclenchent l'horodatage

La deuxième option qui déclenche la date lorsque une colonne précise est remplie me paraît la plus adapté à mon besoin, que dois je modifier pour obtenir ce résultat ?

Encore merci

Bonjour,

Le script de Mikhail adapté

Une colonne précise:

function onEdit(event){ 
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var col = 3; //numéro de colonne de C, si tu veux E alors 5 et ainsi de suite...
  if ((r.getColumn() == col) && (f.getName() != "Total") && (r.getRow() > 1)){ 
    f.getRange('A'+r.getRow()).setValue(new Date());
  }
}

Plusieurs colonnes voulu:

function onEdit(event){ 
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var col = [1,3,7]; //Colonnes A ou C ou G et ainsi de suite en séparant les numéros d’une virgule
  for(i=0;i<col.length;i++){
    if((r.getColumn() == col[i]) && (f.getName() != "Total") && (r.getRow() > 1)){ 
      f.getRange('A'+r.getRow()).setValue(new Date());
      break;
    }
  }
}

Bonne Journée

... ou bien

function onEdit(event){ 
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var col = ['B','C']
  if ((r.getColumn() > 1) && (f.getName() != "Total") && (r.getRow() > 1) && (col.indexOf(columnToLetter(r.getColumn()))!=-1)){ 
    f.getRange('A'+r.getRow()).setValue(new Date());
  }
}
function columnToLetter(column) {
  var temp, letter = '';
  while (column > 0) {
    temp = (column - 1) % 26;
    letter = String.fromCharCode(temp + 65) + letter;
    column = (column - temp - 1) / 26;
  }
  return letter;
}

plus ergonomique en utilisant les lettres et sans boucle sur la colonne

Merci a tous, ça a l'air fonctionnel et conforme a mes besoins, merci du temps passé sur mon projet!

tu peux donc clore ce fil de discussion en cliquant sur

Rechercher des sujets similaires à "qui change pas"