Créer un grand livre automatisé à partir d'un journal

Bonjour à la communauté ,
Je voudrais créer un grand livre à partir des données que j'ai intégré dans le journal. J'aimerais donc que les comptes soient triés dans l'ordre croissant (512, 53, 6, 7) comme dans la photo ci-jointe.
J'aimerais aussi 2 lignes d'espace entre les différents numéros de comptes.

1

Je pense qu'il faut créer un code VBA pour cela.
Voici le lien du fichier: https://docs.google.com/spreadsheets/d/1z6QgardBjcohXEQCcfb7cq7MTQdjLvkpTRjArb8pRLY/edit?usp=sharing

Merci pour votre aide.

Bonjour,

non, pas de code VBA (c'est microsoft), un script aussi appelé gas google app script

mais ton fichier n'est pas accessible, partage le comme suit https://www.sheets-pratique.com/fr/cours/partage

Ah merci pour le rectificatif à la fois pour App Script et le mode de partage.
https://docs.google.com/spreadsheets/d/1z6QgardBjcohXEQCcfb7cq7MTQdjLvkpTRjArb8pRLY/edit?usp=sharing

function monGrandLivre() {
  var journal = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('journal')
  var data = journal.getDataRange().getDisplayValues().filter(r => (!isNaN(Date.parse(r[0]))))
  data = data.sort(function (a, b) {
    return b[1] - a[1];
  });
  var result = []
  result.push(['', '', '', 'Débit', 'Crédit'])
  data.forEach(function (donnees, ligne) {
    result.push([donnees[0], donnees[1], '', donnees[3], donnees[4]])
    if (ligne != (data.length - 1)) {
      if (data[ligne + 1][1] != data[ligne][1]) {
        result.push(['', '', '', '', ''])
        result.push(['', '', '', '', ''])
      }
    }
  })
  var grandLivre = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('grand livre')
  grandLivre.clearContents()
  grandLivre.getRange(1, 1, result.length, result[0].length).setValues(result)
  grandLivre.getRange(result.length + 1, 3).setValue('à reporter')
  grandLivre.getRange(result.length + 1, 4).setFormula('=sum(D2:D' + result.length + ')')
  grandLivre.getRange(result.length + 1, 5).setFormula('=sum(E2:E' + result.length + ')')
}

Merci Steelson pour ce code.

J'ai voulu créer le fichier "Test" avec l'onglet "journal" pour voir si cela fonctionnait. Mais quand j'exécute la macro "monGrandLivre", rien ne se passe.

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

Ta fonction

function monGrandLivre() {

était doublée !

image

Il faut ensuite créer un onglet grand livre

image

et lancer le script (après en avoir donné les autorisations)

image

C'est un point de départ ... si tu veux mettre le grand livre sous le journal c'est possible !

Merveilleux! Ça marche parfaitement maintenant, grandiose.
J'ai encore une petite question.
Pourquoi ma ligne 9 avec le compte 7 ne situe pas après les comptes 6?

capture

N'hésite pas à répondre sur le post de forum excel pratique Steelson. J'apprends de tout le monde et sur Stackoverflow, je viens d'apprendre qu'il était préférable pour moi de présenter les données brutes sous forme de tableau plutôt que via les photos. Je vais effectuer des changements sur le post de Stackoverflow mais je laisse ouvert les 2 posts pour comparer les solutions.

tu pourras comparer avec les autres réponses !!

  data = data.sort(function (a, b) {
    return ('' + a[1]).localeCompare(b[1]);
  })

sur les 2 forums !

Merci beaucoup, ta solution est la meilleure.

function monGrandLivre() {
  var journal = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('journal')
  var data = journal.getDataRange().getDisplayValues().filter(r => (!isNaN(Date.parse(r[0]))))
  data = data.sort(function (a, b) {
    return "" + a[1].localeCompare(b[1]);
  });
  var result = []
  result.push(['','','','Débit','Crédit'])
  data.forEach(function(donnees,ligne){
    result.push([donnees[0],donnees[1],'',donnees[3],donnees[4]])
    if (ligne != (data.length -1)){
      if (data[ligne+1][1] != data[ligne][1]){
        result.push(['','','','',''])
        result.push(['','','','',''])
      }
    }
  })
  var grandLivre = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('grand livre')
  grandLivre.clearContents()
  grandLivre.getRange(1,1,result.length,result[0].length).setValues(result)
  grandLivre.getRange(result.length+1,3).setValue('à reporter')
  grandLivre.getRange(result.length+1,4).setFormula('=sum(D2:D'+result.length+')')
  grandLivre.getRange(result.length+1,5).setFormula('=sum(E2:E'+result.length+')')
}
Rechercher des sujets similaires à "creer grand livre automatise partir journal"