Copie avec conditions

Bonjour,

Quelles pourraient être les instructions appscript pour réaliser cette copie de feuille sur une autre, faisant en sorte que les lignes marquée « A « en colonne A soient des lignes vides ?

Dans le fichier indiqué ci-dessous, il s'agit des feuilles1 & 3

Je vous en remercie par avance

Cordialement

JL

https://docs.google.com/spreadsheets/d/1LhlW3pKiF_smWlgFm70muGaQv6Uny-lS_2LpC8W81-w/edit?usp=sharing

Bonjour,

Ton fichier est protégé; on ne peut pas y accéder avec ton lien !

1001 excuses + autant pour l'autre sujet !

Merci

JL

Ben, il suffit de copier à partir de la colonne B, non ?

Ben non .. il ya aussi la ligne 4

A ta décharge, la feuille 1 n'était pas claire : les lignes 16 à ... étaient masquées.

Sur la feuille 3, les 2, 4 et 17 sont vides...

j'ai réafiché la feuille 1

En attendant, je m'occupe de mes lignes masquées.

Un grand merci et à plus

Cordialement

JL

Bonjour,

Voici une ébauche à adapter :

edit : le nom des feuilles dans la section 1 est à adapter

function myFunction() {
  // 1. Déclarer les feuille où exécuter ce script :
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('Feuille 1');
  const sheetCible = ss.getSheetByName('Feuille 2');

  // 2. Stocker la feuille d'origine dans une variable + la variable qui va contenir la copie
  let data = sheet.getDataRange().getValues();
  let newData = [];

  // 3. Itérer sur chaque occurrence dans data, et stocker la donnée contenue en colonne A dans une variable
  for (let i = 0; i < data.length; i++) {
    let colonneA = data[i][0];
  // 4. si l'élément colonne A et ligne "i" = A alors on ajoute une donnée vide dans newData
    if (colonneA === 'A') {
      newData.push([""]);
  // 5. Sinon on ajoute les données de la ligne
    } else {
      newData.push(data[i]);
    }
  }

  // 6. Trouver la taille maximale des sous-tableaux
  let maxCols = newData.reduce((max, row) => Math.max(max, row.length), 0);

  // 7. Remplir les sous-tableaux avec des cellules vides pour les lignes plus courtes
  newData = newData.map(row => {
    while (row.length < maxCols) {
      row.push("");
    }
    return row;
  });

  // 8. Écrire newData dans la Feuille 2
  sheetCible.getRange(1, 1, newData.length, maxCols).setValues(newData);
}

Bonsoir,

Voilà des nouvelles :

Le script de masquage des lignes vides est OK

Pour la copie, (ci-dessus), ce n'est pas pareil ...

Cela marche parfaitement sur le tableau d'essai

Mais pas sur mon projet ?

Je n'y ai modifié que deux choses :

Les noms des feuilles, à ce propos, il faut mettre les noms entre "" ou ' ' ? de toute façon cela ne change rien au problème.

Modifié aussi la valeur de "i" au départ (i=6)

2023 11 07 19h28 39

Puisqu'il est arrivé là, c'est qu'il a lu toutes les lignes, mais il n'y a rien dans la deuxième feuille.

Par ailleurs, je ne comprends pas ce qui se passe avec les instructions qui suivent la sortie de boucle

Merci d'éclairer ma lanterne

Cordialement

JL

PS: si je dois vous envoyer un lien d'accès, autant qu'il soit privé, comment fait-on ?

Bonjour,

Les noms des feuilles, à ce propos, il faut mettre les noms entre "" ou ' ' ?

> comme vous voulez ! Les 2 fonctionnent.

Modifié aussi la valeur de "i" au départ (i=6)

> c'est sans doute cela qui pose problème, vous décalez ainsi les plages, dans quel but avez-vous modifié cette variable ?

Bonjour,

je désir copier à partir de la ligne 6, jusqu à la fin des données.

Bonsoir,

J'étais toute la journée en vadrouille, et la réponse de ce matin, depuis mon téléphone, était sèche et je m'en excuse.

Dès mon retour, j'ai remis la valeur de i à 0, et le résultat est le même.

Si je peux faire quelques manips pour alimenter ta réflexion, je suis dispo dès demain.

Cordialement

JL

Bonjour,

Bonne nouvelle : tout va bien, les deux scripts sont en place et fonctionnent parfaitement !

Le problème se situait au niveau du nom de la feuille de destination dans lequel une faute de frappe, pas évidente, rendait le déroulement impossible.

Avec mes excuses et mes remerciements

Cordialement

JL

PS; Je n'ai pas trouvé le bouton "résolu" !

Edit : Si !

Ok, + si vous voulez exclure les 6 premières lignes de ce script, il vaut mieux agir sur cette variable :

  let data = sheet.getDataRange().getValues();

En la remplaçant par ex par :

  let data = sheet.getRange(6,1,sheet.getLastRow(),sheet.getLastColumn()).getValues();

+ lors de la copie si vous voulez aussi décaler, remplacer :

  sheetCible.getRange(1, 1, newData.length, maxCols).setValues(newData);

par :

  sheetCible.getRange(6, 1, newData.length, maxCols).setValues(newData);

EDIT : si tout est OK vous pouvez clôturer le topic en cliquant sur le bouton de la réponse.

Bonjour,

Je n'ai pris connaissance de votre proposition qu'après avoir remercié Filoche.

Donc après avoir également corrigé la dernière ligne, je me retrouve avec un projet plus-que-parfait !!...

Merci encore à tous les deux

Rechercher des sujets similaires à "copie conditions"