Intégration d'opérations financières récurentes dans un journal de compte

C'est super bien présenté : débit en rouge, crédit en bleu !

Je pense qu'à terme tu devrais pouvoir simplifier en supprimant les colonnes N et O

A quoi sert la colonne D ?

Pour la synthèse :

image

en B3

="select A,C,F,G,H,I where A<>'' AND C>=DATE'"&TEXT(B1;"yyyy-MM-dd")&"' AND C<=DATE'"&TEXT(B2;"yyyy-MM-dd")&"' "

en A6

={query({
iferror(query('Crédit Agricole Pac'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('Crédit Agricole Lolo'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('Compte sur Livret'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('Compte Joint'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('Hello Bank Lolo'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('LDD Pac'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('LDD Lolo'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('Société Générale'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('Hello Bank Pac'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('Livret A Pac'!A4:N;B3);{""\B1\""\""\""\""});
iferror(query('Compte sur Livret Lolo'!A4:N;B3);{""\B1\""\""\""\""})};
"select * where Col1<>'' ")
}

je reprendrais ce soir les "Prochaines échéances" et "Virements" ... sauf si tu as d'ici là fait toi-même la modification !

Je m'y remets
La colonne D sert à ce que l'opération serve pour le budget du mois d'après. Ex: je suis payé en fin de mois mais c'est avec cette somme que je vais devoir vivre le mois suivant

La synthèse fonctionne. Merci !!

Je vais voir pour l'obtenir en Poste 2 (sous catégorie) et également par mois de bugdet (colonne N et M)

Je vais voir pour l'obtenir en Poste 2 (sous catégorie) et également par mois de bugdet (colonne N et M)

si tu ajoutes des colonnes, ajoute-s-en ici aussi

"" \ B1 \ "" \ "" \ "" \ ""

\ est le séparateur qui permet de "rester" sur la même ligne t ajouter une colonne en cas d'erreur

Merci, j'ai réussi à avoir avec la sous-catégorie "Poste 2".

Je n'arrive toujours pas avec mois et année de budget (colonne N et O) où je demande le mois choisi en K1 et l'année en K2.

En K3, je mets

="select A,M,N,O,F,G,H,I where A<>'' AND N=' " & K1 & " ' AND O= '" & K2 & " ' "

capture

et la formule suivante que je mets en J6

capture2

je reprendrais ce soir les "Prochaines échéances" et "Virements" ... sauf si tu as d'ici là fait toi-même la modification !
(Comment fait-on pour citer une partie d'un post ???)

Concernant les prochaines échéances : Je coince un peu car maintenant, il faut lui dire que les montants (E) sont à mettre en H si débit ou en colonne I si crédit
Concernant les virements : plus besoin de mettre un "-" mais idem, il faut lui dire de mettre en débit sur le compte qui émet et en crédit sur celui qui reçoit...

essaie sans les apostrophes

="select A,M,N,O,F,G,H,I where A<>'' AND N=" & K1 & "  AND O=" & K2 & " "
je reprendrais ce soir les "Prochaines échéances" et "Virements" ... sauf si tu as d'ici là fait toi-même la modification !
(Comment fait-on pour citer une partie d'un post ???)

tu cliques sur les guillemets en haut à droite au-dessus du message

ok, je vais voir cela, tu verras il suffit d'être très rigoureux dans les instructions car on a vite fait de se faire "jeter"

J'ai essayé aussi mais sans résultat. Je m'étais gouré dans l'ordre des query, j'ai remplacé par {""\""\K1\K2\""\""\""\""} mais ça ne marche pas non plus

Pour les citations, les seuls guillemets que je vois ouvrent une fenêtre où je dois "entrer ma sélection" et quand je surligne une partie de ton post, ça ne fait rien...

script

remplace tout car la macro de tri était en double

function onOpen(e) {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('**MENU**')
  .addItem('Trier par date !', 'trierDate')
  .addToUi();
}

function onEdit(event) {
  var f1 = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if (f1.getName() == 'Prochaines échéances' && r.getColumn() == 9){
    // si la cse est cochée et si la date de prochaine échéance est renseignée
    if (r.getValue()==true && r.offset(0,-2).getValue()!=""){
      var compte = f1.getRange('A'+r.getRow()).getValue()
      var f2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(compte);
      var derL = getLastDataRow(f2) + 1;
      if (f1.getRange('B' + r.getRow()).getValue()=='Dépense'){
        f2.getRange('F' + derL).setValue(f1.getRange('C' + r.getRow()).getValue());
        f2.getRange('G' + derL).setValue(f1.getRange('D' + r.getRow()).getValue());
        f2.getRange('E' + derL).setValue(f1.getRange('B' + r.getRow()).getValue());
        f2.getRange('H' + derL).setValue(f1.getRange('E' + r.getRow()).getValue());
        f2.getRange('C' + derL).setValue(f1.getRange('G' + r.getRow()).getValue());
        Browser.msgBox('Transaction enregistrée dans ' + compte + ' ligne ' + derL)
      }
      if (f1.getRange('B' + r.getRow()).getValue()=='Revenu'){
        f2.getRange('F' + derL).setValue(f1.getRange('C' + r.getRow()).getValue());
        f2.getRange('G' + derL).setValue(f1.getRange('D' + r.getRow()).getValue());
        f2.getRange('E' + derL).setValue(f1.getRange('B' + r.getRow()).getValue());
        f2.getRange('I' + derL).setValue(f1.getRange('E' + r.getRow()).getValue());
        f2.getRange('C' + derL).setValue(f1.getRange('G' + r.getRow()).getValue());
        Browser.msgBox('Transaction enregistrée dans ' + compte + ' ligne ' + derL)
      }
      if (f1.getRange('B' + r.getRow()).getValue()=='Virement'){
        f2.getRange('F' + derL).setValue(f1.getRange('C' + r.getRow()).getValue());
        f2.getRange('G' + derL).setValue(f1.getRange('D' + r.getRow()).getValue());
        f2.getRange('E' + derL).setValue('Virement vers');
        f2.getRange('H' + derL).setValue(f1.getRange('E' + r.getRow()).getValue());
        f2.getRange('C' + derL).setValue(f1.getRange('G' + r.getRow()).getValue());
        var f3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(f1.getRange('D' + r.getRow()).getValue());
        var derL = getLastDataRow(f3) + 1;
        f3.getRange('F' + derL).setValue(f1.getRange('C' + r.getRow()).getValue());
        f3.getRange('G' + derL).setValue(f1.getRange('A' + r.getRow()).getValue());
        f3.getRange('E' + derL).setValue('Virement de');
        f3.getRange('I' + derL).setValue(f1.getRange('E' + r.getRow()).getValue());
        f3.getRange('C' + derL).setValue(f1.getRange('G' + r.getRow()).getValue());
        Browser.msgBox('Virement enregistré !') 
      }
      // on met la date de l'échéance suivante dans celle de la prochaine échéance
      f1.getRange('G'+r.getRow()).setValue(f1.getRange('H'+r.getRow()).getValue())
      // on décoche
      r.setValue(false)
      // on trie
      trier(f1,8,2)
    }
  }
}

function getLastDataRow(sheet) {
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange("C" + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }              
}

function trierDate(){
  var feuille = SpreadsheetApp.getActiveSheet();
  if (feuille.getRange("C1").getValue()=='Date'){
    trier (feuille,3,2)
  }
}

function trier(feuille,colonne,depuisLigne){
  var derL = getLastDataRow(feuille)
  var range = feuille.getRange(depuisLigne, 1, derL - (depuisLigne-1), feuille.getLastColumn());
  range.sort({column: colonne, ascending: true});
}

j'ai remplacé par {""\""\K1\K2\""\""\""\""} mais ça ne marche pas non plus

Et pourtant !

image
="select A,M,N,O,F,G,H,I where A<>'' AND N=" & K1 & "  AND O=" & K2 & " "
={query({
iferror(query('Crédit Agricole Pac'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('Crédit Agricole Lolo'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('Compte sur Livret'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('Compte Joint'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('Hello Bank Lolo'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('LDD Pac'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('LDD Lolo'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('Société Générale'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('Hello Bank Pac'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('Livret A Pac'!A4:O;K3);{""\""\K1\K2\""\""\""\""});
iferror(query('Compte sur Livret Lolo'!A4:O;K3);{""\""\K1\K2\""\""\""\""})};
"select * where Col1<>'' ")
}

Pour les citations

capture d ecran 542 capture d ecran 543
capture

je ne l'ai pas moi

Je regarde tes scripts dans la foulée

Tout semble fonctionner à merveille cette fois !!

Grand merci. Je vais étudier tes scripts en détail.

Non ! il reste une chose ... les menus déroulants à peaufiner, en conditionnel (si recette > X,Y,Z; si revenu > A,B,C)

Tiens, d'ailleurs j'avais commencé par ça ! Je voulais que quand je choisi "revenu" en type, il n'affiche que catégories de revenus dans le menu déroulant "poste". Cela fonctionne pour la 1ère ligne mais pas pour les suivantes...

Sinon, il me reste à améliorer l'onglet budget. Le plus gros est fait mais pas encore comme je le souhaite. J'ai fait un TCD mais c'est un peu rigide dans présentation. Idéalement, je voudrais que cet onglet se remplisse automatiquement en fonction des dates choisies. Après, depuis ce tableau, je pourrai comparer mon ménage à la moyenne des ménages français (% qui apparaissent sur l'onglet "accueil") et aussi calculer la somme idéale à épargner, mon revenu disponible et mon niveau de vie. Toutes ces informations figureront sur l'onglet "accueil" ainsi que les soldes de chaque compte.

Et puis faudra mettre un peu de couleurs et peut-être un peu d'images ou d'emoji en fonction des performances atteintes.

En tous cas, je te remercie du super travail que tu as fourni et du temps que tu m'as accordé.

https://docs.google.com/spreadsheets/d/1U6MN8mHSvbu7A0b9bKLkrFKUAFxcLq_-WpgQZx2NFBQ/edit?usp=sharing

Je crois que je suis prêt du bout, reste plus qu'une petite "bidouille".

Sur l'onglet 10, je cherche à obtenir directement la somme par catégorie (Poste 2) sur une période donnée. Je ne souhaite que 3 colonnes 'code , poste, montant"

Je compte le faire sur la colonne débit et dans un autre tableau sur la colonne crédit.

capture

Je me suis inspiré de ta formule et d'une autre trouvée sur google (select sum pivot). J'ai essayé plusieurs façons mais ça bloque à chaque coup... Une idée ??

La réponse doit être ici

https://www.sheets-pratique.com/fr/query/group-by

et ici

https://www.sheets-pratique.com/fr/query/pivot

Essaie d'abord sur un seul compte


Mais je doute fort que tu puisses le faire sur plusieurs comptes si les données lignes et/ou colonnes ne sont pas les mêmes, quoique https://infoinspired.com/google-docs/spreadsheet/query-function-similar-to-pivot-table/ ...

Pourquoi ne pas faire directement un TCD sur l'extraction ?

image

Enfin réussi à faire ce que je souhaitais. Je passe par un TCD, tu avais raison.

Merci encore pour ton aide précieuse

Rechercher des sujets similaires à "integration operations financieres recurentes journal compte"