Déplacer des lignes via une macro (bouton) vers une feuille "Archives"

Bonjour,

Très simplement, j'aimerai déplacer toutes les lignes d'un tableau (hors en-tête) vers une autre feuille qu'on appellera "Archives".

Evidemment l'objectif c'est de toujours déplacer les lignes dans "Archives" à la suite de celles précédemment archivées.

J'aimerai faire ça avec une macro, associée à un bouton déclencheur.

J'ai tenté plusieurs codes, une petite dizaine, mais google sheet c'est vraiment pas à la hauteur d'Excel en terme de codage.

Voici le lien vers une copie de mon fichier, vous pouvez en faire ce que vous voulez.

https://docs.google.com/spreadsheets/d/1RlZtbgBxyYRoD9cBnqs4Zv90yEOhK8-Vnx-DyK2F9hk/edit?usp=sharing

Un grand merci

Bonjour,

J'ai tenté plusieurs codes, une petite dizaine, mais google sheet c'est vraiment pas à la hauteur d'Excel en terme de codage.

Je suis d'accord avec toi ... mais c'est bien mieux avec GSheets qu'avec VBA !

Comment les lignes sont-elles repérées ? (pas par des cellules fusionnées, je n'aime pas cela !) ... avec des couleurs ?

On est d'accord qu'on déplace et on supprime dans l'original ...

ps : j'ai plutôt l'habitude de travailler avec une case à cocher, ce qui permet de la faire instantanément.

Si tu ouvres mon lien tu verras, j'ai repéré le plus simplement possible.
Pas de fusion, juste des lignes classiques, avec des colonnes classiques.

Et oui, on déplace, on ne copie pas.
La case à cocher n'est pas pertinente, le but est d'archiver toutes les lignes en un clic en fin de journée, et pas petit à petit.

Le lien mène a un fichier déjà mis en forme, y'a plus qu'à !

Si tu ouvres mon lien tu verras, j'ai repéré le plus simplement possible.

oui, mais d'un point de vue informatique, quel est le critère qui me permet de dire que cette ligne doit être archivée ? la couleur ?

basé sur la couleur de la ligne

function moveRowsToArchives() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName('Sheet1')
  const archive = ss.getSheetByName('Archives')
  const values = sh.getDataRange().getValues().splice(1)
  const couleurs = sh.getDataRange().getBackgrounds().splice(1)
  const codeCouleur = '#93c47d'
  let lignesArchives = [];
  let dataArchives = []
  couleurs.forEach((c, i) => {
    if (c[0] == codeCouleur) {
      lignesArchives.push(+i + 2);
      dataArchives.push(values[i])
    }
  })
  archive.getRange(+archive.getLastRow()+1,1,dataArchives.length,dataArchives[0].length).setValues(dataArchives)
  lignesArchives.reverse().forEach(x => sh.deleteRow(x));
}

L'action c'est:

1. Repérer les lignes qui ont du contenu

2. les déplacer

Fin.

Y'a pas d'histoire de couleur, y'a pas d'histoire de case à cocher, je veux juste un truc du genre "Si une ligne dans A5:J500 n'est pas vide, déplacer la ligne dans Archives"

et je veux pouvoir le faire manuellement en cliquant sur un bouton qui exécutera une macro.

1. Repérer les lignes qui ont du contenu

Y'a pas d'histoire de couleur, y'a pas d'histoire de case à cocher,

C'était l'objet de ma question ...

Comment les lignes sont-elles repérées ? (pas par des cellules fusionnées, je n'aime pas cela !) ... avec des couleurs ?

Concernant le bouton, je te proposerai à la place un menu personnalisé.

J'ai supprimé la colonne K

function onOpen() {
  var menu = [
    { name: "Archiver", functionName: "moveRowsToArchives" }
  ];
  SpreadsheetApp.getActiveSpreadsheet().addMenu("➪ M E N U", menu);
}
function moveRowsToArchives() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sh = ss.getSheetByName('Sheet1')
  const archive = ss.getSheetByName('Archives')
  const values = sh.getDataRange().getValues().splice(1)
  let lignesArchives = [];
  let dataArchives = []
  values.forEach((r, i) => {
    var flag = true
    r.forEach(c => { if (c == '') flag = false })
    if (flag) {
      lignesArchives.push(+i + 2);
      dataArchives.push(r)
    }
  })
  archive.getRange(+archive.getLastRow()+1,1,dataArchives.length,dataArchives[0].length).setValues(dataArchives)
  lignesArchives.reverse().forEach(x => sh.deleteRow(x));
}
image
Rechercher des sujets similaires à "deplacer lignes via macro bouton feuille archives"