[Script] Selectionner derniere cellule vide d'une colonne et Somme

Ce n'est plus le sujet correspondant au titre.

On est là pour aider, mais j'ai l'impression de produire du code et parfois revenir sur des sujets similaires. Il me semble que j'ai déjà fait des sélections et ouvertures de fichiers par leur nom et non leur id, ce serait bien d'en reprendre le script de ton côté et que je te montre comment compléter.

Et n'oublie pas de clore les posts (les 3/4 sont toujours ouverts)

Je n'ai jamais demander ceci dans mes autres posts.

c'est vrai je me suis evadé mais parceque ton aide est precieuse.

je ne sais pas copier une feuille dans un autre fichier et le renommer avec le numéro 18 par exemple.

function myFunction() {
  // Je voudrais copier la "Feuille 1" du fichier "C" dans le fichier "A" mais avant la feuille "M" en la renommant a la date d'hier.
  var fichierC = SpreadsheetApp.openById(getFileId('C'))
  var fichierA = SpreadsheetApp.openById(getFileId('A'))
  var valeurs = fichierC.getSheetByName('Feuille 1').getDataRange().getValues()
  var d = (new Date()).getDate() - 1
  var destination = fichierA.insertSheet(fichierA.getSheets().length-1).setName(d)
  destination.getRange(1,1,valeurs.length,valeurs[0].length).setValues(valeurs)
}
function getFileId(nomDuFicherRecherche) {
  var files = DriveApp.getFilesByName(nomDuFicherRecherche);
  while (files.hasNext()) {
    var file = files.next();
    return (file.getId())
  }
}

Pour le script des 0 dans le fichier C colonne A.

Dans le fichier ca marche mais dans un GS sur le drive voici mon code mais ca ne marche pas;

function addZeros(){
  var sh = SpreadsheetApp.openById(getFileId("C"));
  var rng = sh.getRange(1,1,sh.getLastDataRow('A'),1)
  var data = rng.getValues()
  data.forEach(r => r[0] = r[0]==''?0:r[0])
  rng.setValues(data)
}
Object.prototype.getLastDataRow = function(col){
  var lastRow = this.getLastRow();
  if (col == null){col='A'}
  var range = this.getRange(col + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }  
};

ci dessous l'erreur:

15:49:31    Avis    Exécution démarrée
15:49:32    Erreur    
Exception: The parameters (String,number,number,number) don't match the method signature for SpreadsheetApp.Spreadsheet.getRange.
addZeros    @ Code.gs:1304

Comment corriger cela?

Où se trouve la fonction getFileId ?

La réponse est ici sur cette fonction https://forum.excel-pratique.com/recherche/getfileid?d=eyJtYyI6ImdldEZpbGVJZCIsImEiOiIiLCJmIjoiMCIsI... , à ajouter !

function addzero(){
  var sh = SpreadsheetApp.openById(getFileId("C"));
  var rng = sh.getRange(1,1,sh.getLastDataRow('A'),1)
  var data = rng.getValues()
  data.forEach(r => r[0] = r[0]==''?0:r[0])
  rng.setValues(data)
}
Object.prototype.getLastDataRow = function(col){
  var lastRow = this.getLastRow();
  if (col == null){col='A'}
  var range = this.getRange(col + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  } 

function getFileId(nomDuFicherRecherche) {
  var files = DriveApp.getFilesByName(nomDuFicherRecherche);
  while (files.hasNext()) {
    var file = files.next();
    return (file.getId())
  }
} 
};

erreur toujours:

16:27:03    Avis    Exécution démarrée
16:27:03    Erreur    
Exception: The parameters (String,number,number,number) don't match the method signature for SpreadsheetApp.Spreadsheet.getRange.
Coffrem3    @ Code.gs:1304

la fonction getFileId etait deja presente.

" // Je voudrais copier la "Feuille 1" du fichier "C" dans le fichier "A" mais avant la feuille "M" en la renommant a la date d'hier."

Quand il y a un tableau avec du format et des formules comme l'exemple du fichier B:

https://docs.google.com/spreadsheets/d/16SiFv-SRmxkBzen6UdkNI5_f4UEc1UV-ucQ9N07_NXk/edit?usp=sharing

Seul les valeurs se copient et non pas le format et les formules.

Comment faire pour tout copier dans ton script?

tu remplaces

var sh=SpreadsheetApp.getActiveSheet()

qui est une feuille, par

var sh = SpreadsheetApp.openById(getFileId("C"));

qui est un fichier !

cela ne peut pas fonctionner

ceci fonctionne, en mettant aussi la fonction getFileId à la bonne place (et pas à l'intérieur de la fonction Object.prototype.getLastDataRow = function (col))

function addzero() {
  var sh = SpreadsheetApp.openById(getFileId("C")).getSheetByName('Feuille 1')
  var rng = sh.getRange(1, 1, sh.getLastDataRow('A'), 1)
  var data = rng.getValues()
  data.forEach(r => r[0] = r[0] == '' ? 0 : r[0])
  rng.setValues(data)
}
Object.prototype.getLastDataRow = function (col) {
  var lastRow = this.getLastRow();
  if (col == null) { col = 'A' }
  var range = this.getRange(col + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }
}
function getFileId(nomDuFicherRecherche) {
  var files = DriveApp.getFilesByName(nomDuFicherRecherche);
  while (files.hasNext()) {
    var file = files.next();
    return (file.getId())
  }
}

Seul les valeurs se copient et non pas le format et les formules.

Comment faire pour tout copier dans ton script?

ce n'est pas possible avec un script, on ne peut copier des formats que d'une feuille à l'autre dans le même fichier

copyTo ou moveTo sont rejetés si ce n'est pas le même fichier

ce n'est plus le même sujet, pour trouver et partager une solution ouvre un autre post

et par la même occasion, clos les autres posts

Dernier post:

Dans le fichier C toujours,

Je voudrais dans la colonne F mettre des 0 entre F15 et F27 seulement ou il y a des cellules vides.

Peux tu poster le script stp toujours lancer du fichier GS.

Apres ca je change de sujet.

Merci

Jack

Les topics sont mélangés, cela ne facilite pas la recherche de ce que j'ai déjà fait !

Ne sachant pas s'il y a des formules, je te donne une solution plus rustique

function addzero() {
  // Je voudrais dans la colonne F mettre des 0 entre F15 et F27 seulement ou il y a des cellules vides
  var sh = SpreadsheetApp.openById(getFileId("C")).getSheetByName('Feuille 1')
  for (var i=15;i<=27;i++){
    if (sh.getRange('F'+i).getValue()==''){sh.getRange('F'+i).setValue(0)}
  }
}

J'ai du mal à voir l'intérêt d'ajouter des 0 !

Rechercher des sujets similaires à "script selectionner derniere vide colonne somme"