Déplacer une ligne dans une autre feuille en fonction d'une MFC

Bonjour,

J'ai gratté un peu sur internet, j'ai pu voir qu'il faudrait certainement utiliser le VBA pour cela, cependant je n'y connais rien pour le moment ...

J'ai vu des solutions qui malheureusement ne s'appliquent pas à mon cas ...

Voici mon besoin :

Si ma case "S3" affiche "Terminé" alors je déplace cette ligne dans une autre feuille (que je nommerais "Terminé") par exemple

Est-ce réalisable ou bien est-ce un peu trop demandé à Sheet ? :)

Même si vous n'avez pas la solution clé en main, je serais preneur de piste de recherche :)

Voici le lien vers le fichier test de mon doc :

https://docs.google.com/spreadsheets/d/1zY72trwwxiJ26lQZpiUJBTeSQQWXmAGmBaVYHEmKGwM/edit?usp=sharing

Bonjour,

NON, pas le VBA, c'est "propriétaire" microsoft. Google a un langage différent, proche du javascript.

Pourquoi MFC dans le titre ! ??

ok pour le déplacement ... faut-il donc bien supprimer la ligne de la feuille d'origine ?

je vais regarder mais il me semble avoir déjà traité un cas similaire.

Oups, au temps pour moi, je pensais que c'était le même procédé ....

Il est vrai qu'au final ça ne concerne pas la Mise en Forme Conditionnelle, c'est simplement que j'avais dû mal à exprimer mon besoin, et jusqu'à présent ne connaissant que les prémisses de Sheets, j'utilise la MFC pour faire tout ce que je peux ^^

Oui en effet, le but est de supprimer la ligne de la feuille 1 pour la déplacer dans la feuille 2,

Concernant les sujets similaires, j'ai cherché, j'ai testé des trucs aussi, mais je suis tombé sur des "VBA" que j'ai essayé d'adapter, je comprends mieux pourquoi je fonçais juste dans le mur !!

J'avais trouvé ce post : https://forum.excel-pratique.com/excel/deplacer-automatiquement-une-ligne-sous-condition-t76178.html

Ainsi que celui ci : https://forum.excel-pratique.com/excel/macro-deplacement-sous-condition-d-une-feuille-a-une-autre-t5...

Cependant ce sont des Excel et non des Sheets :/

A adapter

  // archivage
  var col= 19; // colonne S à vérifier
  if (r.getColumn() == 14 && feuille.getName() == 'Biomedical'){ 
    if(r.getValue() == 1){ 
      var destination = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archive");
      destination.insertRowBefore(2);
      var plage = feuille.getRange('A' + r.getRow() + ':N' +  r.getRow()); 
      plage.copyTo(destination.getRange('A2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);  
      Browser.msgBox("Ligne " + r.getRow() + " archivée !");
      feuille.deleteRow(r.getRow());
    }
  } 

soit tu t'en inspires, soit je m'y mets cet pm

Le langage est différente.

Merci encore pour la rapidité !

J'ai essayé de m'y coller et surtout de comprendre, mais visiblement ça n'est pas encore ça ! ^^

Voici mon test :

  var col= 19;
  if (r.getColumn() == col && feuille.getName() == 'TABLEAU_DE_SUIVI_DE_FABRICATION'){ 
    if(r.getValue() == 'Terminé'){ 
      var destination = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TERMINE");
      destination.insertRowBefore(2);
      var plage = feuille.getRange('A' + r.getRow() + ':N' +  r.getRow()); 
      plage.copyTo(destination.getRange('A2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);  
      feuille.deleteRow(r.getRow());
    }
  } 

Bien évidemment, ça ne fonctionne pas, sinon je ne serais pas ici ^^

Si on pouvait juste m'aiguiller sur mes erreurs à droite à gauche pour que je puisse continuer d'y aller à taton ! Je suis preneur !

L'archive se mettra toujours en tête ligne 2 ici !

function onEdit(event){ 
  var feuille = "TABLEAU_DE_SUIVI_DE_FABRICATION";
  var f = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  // horodatage
  var col = 2; // colonne B
  if ((r.getColumn() == col) && (f.getName() == feuille) && (r.getRow() > 2)){ 
    if (r.getValue() == '') {
      r.offset(0,1).clearContent();
    }else{
      r.offset(0,1).setValue(new Date());
    }
  }

  // archivage
  var col= 19; // colonne S
  if (r.getColumn() == col && f.getName() == feuille){ 
    if(r.getValue() == 'Terminé'){ 
      var destination = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TERMINE");
      destination.insertRowBefore(2);
      var plage = f.getRange('A' + r.getRow() + ':V' +  r.getRow()); 
      plage.copyTo(destination.getRange('A2'), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);  
      f.deleteRow(r.getRow());
    }
  } 

}

Encore merci pour ton aide, c'est super !

Au passage, pourquoi j'ai choisi

destination.insertRowBefore(2);

cela te permet de supprimer toutes les lignes à partir de la 3 pour alléger ton fichier ...

Super, merci aussi pour les explications ! En effet ça rends le tout plus agréable !

Je rencontre un (très léger) soucis, mais je ne suis pas sûr que ce dernier puisse être réglé !

En effet, j'avais verrouillé un certains nombre de cellules afin que les Editeurs ne puisse pas intervenir dessus (Les droits était mis sur "Moi uniquement") mais du coup, la copie de la ligne se faisait bien, mais elle ne s'effaçait plus avec leurs comptes puisque pas les droits !

J'ai testé en enlevé les cellules "Moi Uniquement" et en effet tout fonctionne pour tous,

S'il existe une solution, je suis preneur ! Si ce n'est pas le cas, alors pas de soucis, je suis déjà ravi du résultat obtenu grâce à votre aide

Je ne sais pas ... au besoin, ouvre un autre post sur la protection.

Au passage, explique moi comment tu fais ce verrouillage ?

J'ai réussi à trouver quelque chose qui me convient en comptant sur le sérieux de mes collègues ^^

Pour définir un verrouillage, je me rends dans "Données" puis "Feuilles et plages protégées"

Une fois ici, nous avons ce panel :

image

Il suffit alors de cliquer sur "Ajouter une feuille ou une plage" et de rentrer la plage concernant avec le droit que l'on souhaite !

(J'ai d'ailleurs contourné mon problème en mettant un message d'avertissement en cas de modification de la case ! Dans mon cas, si les éditeurs archive la ligne, aucun message n'apparaît, mais s'ils veulent écrire dedans ou le modifier, alors le message apparaît,)

Rechercher des sujets similaires à "deplacer ligne feuille fonction mfc"