Script enregistrement de données

Bonjour à tous

Alors j'ai créé mon script d'enregistrement de données d'une feuille vers une autre, jusque là aucun soucis, il me manque juste une chose et je n'arrive pas à trouver .

J'aimerais que lors de mon prochain enregistrement, les données se collent à la suite des données précédentes.

Il y a certainement getLastRow mais je n'arrive pas à l'intégrer dans mon script 😬🫣.

Pouvez vous m'aider svp

Un grand merci

Bonjour,

En effet :

var lastRow = sheet.getLastRow()

Si tu as besoin d'aide pour l'adapter, copie ton script ici (en mettant bien la balise code </>)

J'avais essayé cette ligne , j'ai dû mal là placé lol

Du coup voici le script

function Test() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Datas P35 Green'), true);
spreadsheet.getRange('A1').activate();
spreadsheet.getRange('\'P35\'!A1').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('P35'), true);
spreadsheet.getRange('L23:L31').activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Datas P35 Green'), true);
spreadsheet.getRange('A2').activate();
spreadsheet.getRange('\'P35\'!L23:L31').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('P35'), true);
spreadsheet.getRange('U23:U31').activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Datas P35 Green'), true);
spreadsheet.getRange('B2').activate();
spreadsheet.getRange('\'P35\'!U23:U31').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('P35'), true);
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('U23').activate();
};

Aïe c'est une macro enregistrée ça

Voici un script tout fait, tu mets la feuille origine, la feuille destination et les cellules / plages à copier :

function copierDonnees() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const feuilleOrigine = ss.getSheetByName("Feuille 1"); // feuille d'origine
  const feuilleDestination = ss.getSheetByName("Feuille 2"); // feuille de destination

  const cellulesOrigines = ["A1", "B2", "C3:C5"];

  var data = [];

  cellulesOrigines.forEach(function(cell) { // on récupères les valeures
    var range = feuilleOrigine.getRange(cell);
    var rangeValues = range.getValues();
        rangeValues.forEach(function(row) {
      data.push(row);
    });
  });
  var dataAInserer = data.flat();
  var lastRow = feuilleDestination.getLastRow();
  feuilleDestination.getRange(lastRow+1, 1, 1, dataAInserer.length).setValues([dataAInserer]);
}

Sinon, explique ce que dois faire ta macro

🤣🤣🤣🤣 oui mon talent est encore limité 😁

Merci je vais essayer voir si ça marche

Cest cool merci

Hello

Merci beaucoup,ça fonctionne bien pour ce que j'ai à faire

Top

Merci

Alors, tout est nickel, tout fonctionne et c'est cool.

Il y a juste une chose, au lieu d'incrémenter sur la ligne d'en dessous j'aimerais le faire sur la ligne du dessus. j'ai essayé de modifier ce script "lastRow+1, 1, 1" en mettant un "-" à la place du "+" mais ça ne fonctionne pas

Bonjour !

Ceci :

  var lastRow = feuilleDestination.getLastRow();
  feuilleDestination.getRange(lastRow+1, 1, 1, dataAInserer.length).setValues([dataAInserer]);

insère les données dans la dernière ligne + 1 de feuilleDestination.

Donc, si tu as des données jusqu'à la ligne 10, les données seront insérées ligne 11.

Si tu veux que ça insère les données à la dernière ligne, dans mon exemple, la ligne 10 (mais si d'autres données sont présente elles seront écrasées) alors tu as juste à faire ceci :

  feuilleDestination.getRange(lastRow, 1, 1, dataAInserer.length).setValues([dataAInserer]);

Si tu veux que les données soient insèrées une ligne avant, dans mon exemple, ligne 9, alors ceci :

  feuilleDestination.getRange(lastRow-1, 1, 1, dataAInserer.length).setValues([dataAInserer]);

Si tu souhaites insérer les données au milieu d'un tableau, à un endroit précis prédéfini tu peux remplacer lastRow par le numéro de la ligne, par exemple, la ligne 4 :

  feuilleDestination.getRange(4, 1, 1, dataAInserer.length).setValues([dataAInserer]);

Si tu souhaites au préalable insérer une ligne vide, afin d'éviter d'écraser d'éventuelles données existantes, tu peux faire ainsi (toujours pour la ligne 4 dans mon exemple) :

const numLigne = 4;
feuilleDestination.insertRowAfter(numLigne)
feuilleDestination.getRange(numLigne, 1, 1, dataAInserer.length).setValues([dataAInserer]);
Rechercher des sujets similaires à "script enregistrement donnees"