Exporter une ligne d'écriture selon un tiers précis

Bonjour à tous, j'ai un tableau avec plusieurs feuilles (ex: crédit Mutuel - Banque populaire) je souhaite si c'est possible avec Sheets de basculer une ligne d'écriture selon un tiers précis avec ex: Crédit Mutuel en débit Banque Populaire en crédit.

https://docs.google.com/spreadsheets/d/1JLa_woBZ_nEXp08-rszprp8FnDC_OsH4mE4twyQ1zl4/edit#gid=0

Merci pour vos réponses.

CDLT

Alex

Hello,

  • Il faut créer un event qui va détecter le tiers, et si celui-ci est égal à un nom défini il ajoutera en fin de tableau une nouvelle ligne sur l'autre onglet.
  • Si tu supprimes ou modifies le tiers, il faudrait détricoter alors le report de cette opération. Là c'est (encore) plus complexe.

Je regarde cela d'ici demain matin, car si je connais le principe je ne l'ai jamais fait, sauf si qqun a déjà la solution prête à l'emploi.

Belles formules matricielles !!

Merci Steelson.

PS: j'ai protégé ma feuille comme tu me l'a conseillé.

Bonne journée

Absolument, je m'en suis fait une copie pour travailler sur la solution !

A priori tu avais déjà une macro événementielle de transformation de . en , c'est cela ?

Oui tout à fait, avec Sébastien.

Alexander a écrit :

Est-ce que ce script va fonctionner sur les autres comptes de la famille ?

Réponse de Seb : "Ta fonction onEdit devrait en principe fonctionner"

par contre le OnEdit ne fonctionnait pas sur les autres comptes, j'ai dû recréer un éditeur de scripts pour chaque compte google (famille)

Un premier jet,

  • si tu veux que ce soit réversible de Banque Pop vers Crédit Mut, recopie le pavé f1 vers f2 en intervertissant f1 et f2
  • si tu veux applique cela aussi au crédit, idem, recopie le pavé concerné ... je ne suis pas sûr que ce soit utile !
  • attention aux modifications de montant ultérieures, modifications de tiers, suppressions de ligne ... si on voulait prendre cela en compte je pense qu'il faudrait donner un identifiant au virement pour le retrouver sur l'autre compte
  • je reviens sur le fonctions matricielles : il ne faut pas mettre la dernière ligne concernée (exemple 30) mais laisser sans ce numéro./ tu peux par contre réduire ta feuille à moins de ligne et l'augmenter de temps en temps

edit : fonction jumelée avec le changement de point en virgule

edit2 : code effacé repris plus loi pour ne pas surcharger le fil

Super ! merci, je vais essayer d'appliquer tout ça !

Dans ce 1er jet :

de Crédit Mut/Banque Pop ok mais si je change le 1er montant (de Crédit Mut) il me recréer une ligne à Banque Pop avec le nouveau montant et si je l'efface de Crédit Mut il le laisse sur Banque Pop.

j'ai appliqué ça

  • "si tu veux que ce soit réversible de Banque Pop vers Crédit Mut, recopie le pavé f1 vers f2 en intervertissant f1 et f2"

et ça me fait pareil de Banque Pop/Crédit Mut

J'ai refait la manip pour contrôler et ça ne fonctionne plus que dans un sens Banque Pop/Crédit Mut

de Crédit Mut/Banque Pop ok mais si je change le 1er montant (de Crédit Mut) il me recréer une ligne à Banque Pop avec le nouveau montant et si je l'efface de Crédit Mut il le laisse sur Banque Pop.

C'est ce que j'avais prédit, et j'avais écrit que c'était un premier jet ... c'est alors toute une cuisine à mettre en place en envisageant tous les cas de figure et en ajoutant un identifiant de transaction pour pouvoir répercuter les modifications faites, cela va être une belle usine à gaz mais je vais regarder ne serait-ce pour voir jusqu'où on peut aller "simplement".

  • attention aux modifications de montant ultérieures, modifications de tiers, suppressions de ligne ... si on voulait prendre cela en compte je pense qu'il faudrait donner un identifiant au virement pour le retrouver sur l'autre compte

.

J'ai refait la manip pour contrôler et ça ne fonctionne plus que dans un sens Banque Pop/Crédit Mut

je n'ai pas compris ta seconde remarque, pourrais-tu donner le code ?

Hello,

Ben je comprend mieux la photo de ton profile en effet j'ai pris ta 1ère ligne, je l'ai modelé dans tous les sens et ce sans lire le reste.

"je n'ai pas compris ta seconde remarque, pourrais-tu donner le code ?"

ça fonctionnait (sans modification de ligne d'écriture) le simple fait de réessayer ça ne fonctionnait plus.

Ce matin j'ai ajouté ce pavé et ça fonctionnait que dans un sens le fait d'inverser les pavés ça fonctionne dans les 2 sens.

var doc = SpreadsheetApp.getActiveSpreadsheet();
var f1 = "Compte Joint";
var f2 = 'Banque Populaire';
var fsource = event.source.getActiveSheet();

var doc = SpreadsheetApp.getActiveSpreadsheet();
var f1 = "Banque Populaire";
var f2 = 'Compte Joint';
var fsource = event.source.getActiveSheet();

là je réessaye et ça ne fonctionne plus, même avec le 1er et 2ème pavé

Voici ton script modifié. est-ce le fait d'avoir ajouté autant de pavés ?

/** @OnlyCurrentDoc */
function onEdit(event){
var doc = SpreadsheetApp.getActiveSpreadsheet();
var f1 = "Banque Populaire";
var f2 = 'Crédit Mutuel';
var fsource = event.source.getActiveSheet();

var doc = SpreadsheetApp.getActiveSpreadsheet();
var f1 = "Crédit Mutuel";
var f2 = 'Banque Populaire';
var fsource = event.source.getActiveSheet();

var doc = SpreadsheetApp.getActiveSpreadsheet();
var f1 = "Compte Joint";
var f2 = 'Banque Populaire';
var fsource = event.source.getActiveSheet();

var doc = SpreadsheetApp.getActiveSpreadsheet();
var f1 = "Banque Populaire";
var f2 = 'Compte Joint';
var fsource = event.source.getActiveSheet();

var doc = SpreadsheetApp.getActiveSpreadsheet();
var f1 = "Crédit Mutuel";
var f2 = 'Compte Joint';
var fsource = event.source.getActiveSheet();

var doc = SpreadsheetApp.getActiveSpreadsheet();
var f1 = "Compte Joint";
var f2 = 'Crédit Mutuel';
var fsource = event.source.getActiveSheet();

var r = event.source.getActiveRange();

if (r.getColumn() == 9 || r.getColumn() == 10){ 
var nombre = event.value;
if (isNaN(nombre)){}else{
var res = nombre.replace(".", ",");
r.setValue(res);
} 
}

if (fsource.getName() == f1){
// si débit
if (r.getColumn() == 9){ 
if (fsource.getRange('D'+r.getRow()).getValue() == f2){
var fdest = doc.getSheetByName(f2);
var values = fdest.getRange('A:A').getValues().join().split(","); 
var derL = values.indexOf("") + 1;
var plage = fsource.getRange('A' + r.getRow() + ':H' + r.getRow());
plage.copyTo(fdest.getRange('A' + derL), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
r.copyTo(fdest.getRange('J' + derL), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
Browser.msgBox('copie ok ligne "' + derL + '" !');
}
}
}

}

Re-

J'étais en train de regarder un autre point (le point 2 ci-dessous) ...

  1. bon, je vais faire les essais de réversibilité d'abord.
  2. pour la suite, ce qui est complexe est
    1. la modification d'une valeur, y compris par exemple le destinataire qui ne sera plus un compte en banque mais un tiers; l'avantage de google sheets est que l'on peut accéder à l'ancienne valeur par event.oldvalue https://stackoverflow.com/questions/13374963/how-do-i-get-value-of-cell-before-it-changes-in-google-... , c'est en effet dans la doc https://developers.google.com/apps-script/guides/triggers/events mais avec Installable Triggers https://developers.google.com/apps-script/guides/triggers/installable#google_apps_triggers, mon premier test n'a rien donné, d'autres proposent carrément d efaire une copie cachée d la feuille pour comparer !
    2. dans tous les cas cela va nécessiter un identifiant pour bien relier les 2 opérations
    3. l'autre grand difficulté est la suppression éventuelle de la ligne, à répercuter aussi ... à moins d'adopter ce font des logiciels (c'est même un impératif en maintenance aéronautique avec la FAA), s'interdire de supprimer une telle ligne, tout au plus autoriser la remise à zéro de la valeur mais n garder une trace

L'originalité ici est que l'on attaque directement la "base de données" information par information, alors que les logiciels le font via une transaction, ce qui serait plus facile à maîtriser car avec un seul panneau et à la fin du remplissage des informations (et non au fur et a mesure) on pourrait mettre à jour les 2 onglets. C'est peut-être à envisager à titre de simplification !

Pour la réversibilité

  • C'est rigolo car si tu tapes en destinataire la feuille sur laquelle tu travailles, cela ajoutera donc sur cette feuille une nouvelle ligne inversée Débit<->Crédit
  • J'ai travaillé sur une copie de ton ancien fichier
  • J'essaye aussi de mettre les banques dans un array en partant d'une nouvelle colonne de BDN

edit : code effacé repris plus loin pour ne pas surcharger le fil

Est-ce que cette fonction est en rapport avec les colonnes 8=Débits et 9=Crédits

if (r.getColumn() == 8 || r.getColumn() == 9){

var nombre = event.value;

if (isNaN(nombre)){}else{

var res = nombre.replace(".", ",");

r.setValue(res);

}

}

Ach, c'était une erreur,

if (r.getColumn() == 9 || r.getColumn() == 10){ 

oui ce sont les colonnes crédit et débit, dont on parle ensuite

        if (r.getColumn() == 9){ 
          r.copyTo(fdest.getRange('J' + derL), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
        }
        if (r.getColumn() == 10){ 
          r.copyTo(fdest.getRange('I' + derL), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
        }

Mets les banques colonne I (sans les retirer de la colonne des destinataires) dans BDN

tu auras une généralisation des banques

edit : code effacé repris plus loin

Après avoir modifié colonne 8 et 9 en 9 et 10 ça fonctionne bien (en débit de l'un, pour crédit de l'autre sans autre manip) mais après quelques secondes il apparaît un doublon sur le compte "Crédit Mutuel"

On peut la voir plus grande en faisant un copier/coller dans Excel.

75098 5fb11ea12755f177579238

et voici la 2ème avec le doublon au bout de quelques secondes

75098 5fb11f0308bc1959575142

et dans Banque Pop c'est les bonnes écritures

75098 5fb11fc01995c693451281

Ok je vais changer ma BDN

ça fonctionne de Banque Pop (Débits) vers Crédit Mut (Crédits mais pas l'inverse.

Ah ben oui ! puisque le transfert de l'un vers l'autre s'accompagne à nouveau d'une détection d'événement et d'un transfert de l'autre vers l'un !!

Il faut mettre un verrou alors ! nouveau problème que je n'avais pas vu car j'avais juste joué d'un compte sur lui-même (mais cela aurait dû le faire quand même). Une solution, indiquer quelque part un numéro de virement sur lequel on s'appuiera pour ne pas créer d'effet boule de neige.

en rajoutant une colonne N° de virement ?

Rechercher des sujets similaires à "exporter ligne ecriture tiers precis"