Copier-coller des données d'une feuille à l'autre sans créer de doublons Le sujet est résolu

Avatar de l’utilisateur
Jeanne
Messages : 7
Inscription : 01 mars 2023 10:48
A remercié : 2 fois

Copier-coller des données d'une feuille à l'autre sans créer de doublons

Message par Jeanne »

Bonjour,

Bien que je commence à vraiment m'amélioré sur Apps script, je ne reste encore une fois bloquée sur un programme:

Voici le contexte. J'ai un tableau de donnée "Source " dans lequel sont trié des données
Capture1.PNG
Capture1.PNG (20.87 Kio) Consulté 7181 fois
 

Dans la barre d'action (fichier, éditions... ) j'ai ajouté l'option "Transfert" qui permet de lancer le code que je souhaite (ici il s'appelle "Qualité" ou "option4)).
Capture3.PNG
Capture3.PNG (4.92 Kio) Consulté 7177 fois
Le code en question permet de sélectionner toutes les lignes typée "Qualité" (colonne D) et de les copier-coller dans la feuille "Target". 
Capture2.PNG
Capture2.PNG (26.97 Kio) Consulté 7181 fois
De plus, le code devrait permettre de vérifier si le numéro de suivi apparait déjà dans le tableau et donc d'éviter de crée des doublons dans le tableau "Target".

Seulement, deux problèmes se posent à moi :
- A chaque activation du code "option4" une ligne vide est ajoutée sans que je sache pourquoi.
- Le code ne retire pas les doublon, au contraire il semble vouloir les multiplier...

je suis vraiment perdue et je sais qu'il n'est parfois pas facile de remarquer ses erreurs en programmation.... J'espère que vous saurez m'aider !

Cordialement,
Jeanne

PS: Je n'arrive pas a mettre des fichier joint, seulement des photos alors voici le code et les tableaux en photos.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Transfert') //ajoute l'option "transfert" dans la barre des tâches
    .addItem('Qualité', 'option4') //qualtrième option
    .addToUi();
 
}
function option4() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); //récupère le fichier actif
var source_sheet = ss.getSheetByName("Source"); //récupère la feuille source
var target_sheet = ss.getSheetByName("Target"); //récupère la feuille cible
var last_row_source = source_sheet.getLastRow(); //récupère la dernière ligne du fichier source
var last_row_target = target_sheet.getLastRow()+1; //récupère la dernière ligne du fichier cible
;
for (var i=4; i<=last_row_source;i++) //on parcoure les lignes de la feuille source
{
  var numerosource = source_sheet.getRange(i,2).getValue();// récupère le numéro de la ligne de la feuille source en colonne B(2)
  var type = source_sheet.getRange(i,4).getValue(); //récupère la valeur de la case D(4)
 
  if ( type == "Qualité") //si la case "type" est notée "Qualité"
  { for (var j=4; j<=last_row_target;j++)
    {
      var numerotarget = target_sheet.getRange(j,2).getValue();// récupère le numéro de la ligne de la feuille cible en colonne B(2)
     
 
      if (numerosource = numerotarget){}
   
      else
      {
        //Copie N° ligne
        var source_range = source_sheet.getRange("B"+(i)); // récupère la ligne à copier
        var target_range = target_sheet.getRange("B"+(last_row_target +1)); //récupère la ligne où coller
        source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
        // Copie date de création
        source_range = source_sheet.getRange("C"+(i)); // récupère la ligne à copier
        target_range = target_sheet.getRange("C"+(last_row_target +1)); //insère les valeurs dans les cases
        source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
        //Sujet-action à court terme
        source_range = source_sheet.getRange("E"+(i)); // récupère la ligne à copier
        target_range = target_sheet.getRange("D"+(last_row_target +1)); //insère les valeurs dans les cases
        source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
        //Qui
        source_range = source_sheet.getRange("F"+(i)); // récupère la ligne à copier
        target_range = target_sheet.getRange("E"+(last_row_target +1)); //insère les valeurs dans les cases
        source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
        //Commentaire
        source_range = source_sheet.getRange("G"+(i)); // récupère la ligne à copier
        target_range = target_sheet.getRange("F"+(last_row_target +1)); //insère les valeurs dans les cases
        source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
        last_row_target = last_row_target +1;
      }
    }
   
  }
}
}
Avatar de l’utilisateur
Jeanne
Messages : 7
Inscription : 01 mars 2023 10:48
A remercié : 2 fois

Re: Copier-coller des données d'une feuille à l'autre sans créer de doublons

Message par Jeanne »

Bonjour,

Cas un peu atypique, j'ai réussi à trouver une solution !
Dans le cas ou cela pourrais un jour servir à quelqu'un je met le code en bas de page.
C'est donc un code qui va prendre les lignes du tableau source et en fonction de leur type va pouvoir les copier coller dans ke tableau cible. Si le numéro de ligne apparait déjà dans le fichier source alors la ligne n'est pas copiée. Dès qu'une nouvelle ligne est ajoutée au tableau source avec un nouveau numéro, celle-ci sera ajoutée.

En espérant aider quelqu'un !
Cordialement,
Jeanne

PS: Si vous trouvez une manière plus simple de faire n'hésitez pas à me le dire !


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function option4() {
var feuille_active = SpreadsheetApp.getActiveSpreadsheet(); //récupère le fichier actif
var source_sheet = feuille_active.getSheetByName("Source"); //récupère la feuille source
var target_sheet = feuille_active.getSheetByName("Target"); //récupère la feuille cible
var last_row_source = source_sheet.getLastRow(); //récupère la dernière ligne du fichier source
var last_row_target = target_sheet.getLastRow(); //récupère la dernière ligne du fichier cible +1 dans le cas ou tableau vide
for (var i=4; i<=last_row_source;i++) //on parcoure les lignes de la feuille source
{
  var type = source_sheet.getRange(i,4).getValue(); //récupère la valeur de la case D(4) dans la feuille source
  var numerosource = source_sheet.getRange(i,2).getValue();// récupère le numéro de la ligne de la feuille source en colonne B(2)
  if ( type == "Qualité") //verification si la case "type" est notée "Qualité"
  {
    var test =0// variable test si doublon
    for (var w=4; w<=last_row_target;w++) //on parcoure les lignes de la feuille target
    {
      var target_test = target_sheet.getRange(w,2).getValue(); //récupère la valeur de la case B(2) de la feuille Target
      if ( target_test == numerosource) //si le n°de ligne de target = au numéro de ligne source
      {
       test=1
     }
    }
    { for (var j=3; j<=last_row_target;j++)// on parcours les lignes de la feuille target à partir de la ligne de titre pour que la ligne 1 ne soit pas =0
      {
        var numerotarget = target_sheet.getRange(j,2).getValue();// récupère le numéro de la ligne de la feuille cible en colonne B(2)
 
        if ( test == 1){}// si les deux n° de lignes sont les même alors ne rien faire et passer
       
        else if (numerosourcesave != numerosource)// Si la dernière valeur de numérosource est diff de la nouvelle (évite de copier deux fois la même ligne)
        {
           var numerosourcesave = numerosource
          //Copie N° ligne
          var source_range = source_sheet.getRange("B"+(i)); // récupère la ligne à copier
          var target_range = target_sheet.getRange("B"+(last_row_target +1)); //récupère la ligne où coller
          source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
          // Copie date de création
          source_range = source_sheet.getRange("C"+(i)); // récupère la ligne à copier
          target_range = target_sheet.getRange("C"+(last_row_target +1)); //insère les valeurs dans les cases
          source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
          //Sujet-action à court terme
          source_range = source_sheet.getRange("E"+(i)); // récupère la ligne à copier
          target_range = target_sheet.getRange("D"+(last_row_target +1)); //insère les valeurs dans les cases
          source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
          //Qui
          source_range = source_sheet.getRange("F"+(i)); // récupère la ligne à copier
          target_range = target_sheet.getRange("E"+(last_row_target +1)); //insère les valeurs dans les cases
          source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
          //Commentaire
          source_range = source_sheet.getRange("G"+(i)); // récupère la ligne à copier
          target_range = target_sheet.getRange("F"+(last_row_target +1)); //insère les valeurs dans les cases
          source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
          last_row_target = last_row_target +1;
        }
      }
    }
  }
}
}
Répondre

Rejoignez la discussion 💬

Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres

Inscrivez-vous dès aujourd'hui

Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles

Inscription

Connectez-vous