Microsoft 365 KPI Compte de résultat à partir grand livre

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Germaine

XLDnaute Junior
Bonsoir le forum
Je me présente une 1ère fois pour que vous puissiez m'accompagner à la construction d'un compte de résultat à partir d'un grand livre comptable.
Les données sortant de SAGE ne sont pas structurées.
J'ai établi des paramètres en fonction des numéros de compte afin d'affecter les calculs de charges et de produits.
J'ai établi un compte de résultat retraité afin de montrer les coûts variables, les coûts fixes et les charges de personnel.
Pourriez-vous m'aider à compléter les colonnes H;I;J du grand livre et d'effectuer les calculs des Agregats du compte de résultat (avoir la possibilité modifier la période).
Dites moi
Germaine
 

Pièces jointes

Solution
cathodique,
Je supprime total où, je ne comprends pas !
Le fichier fonctionne sur la 2ème Bécane, mais les couts fixes ne sont pas calculés et quand j'exécute la feuille annuel, il y a bug
Dis moi s'il te plait
Germaine

cathodique,
Je supprime total où, je ne comprends pas !
Le fichier fonctionne sur la 2ème Bécane, mais les couts fixes ne sont pas calculés et quand j'exécute la feuille annuel, il y a bug
Dis moi s'il te plait
Germaine
en fait c'est une omission de ma part, j'aurais dû supprimé cette feuille. elle concernait le 1er fichier proposé.
Étant, qu'elle t’intéresse, j'ai corrigé le code et ajouter un truc soufflé par @klin89 en mp.
Il me semble que tu as supprimer des messages, je ne retrouve celui où...
Bonjour cathodique, c'est puissant.
Je vais tester sur d'autres données et reviens vers vous.
Je n'ai pas compris ce que tu m'avais demandé, je vais regarder.
Germaine
Re,

Germaine.gif
Voici une version plus aboutie en démo.
Je sais que PowerQuery est plus puissant. Suite à un gros problème, je n'installe plus de complément sur mon Excel 2010 vieillissant.
 
Re,

Regarde la pièce jointe 1212008Voici une version plus aboutie en démo.
Je sais que PowerQuery est plus puissant. Suite à un gros problème, je n'installe plus de complément sur mon Excel 2010 vieillissant.


Bonjour cathodique, le forum,

Ta version demo semble très opérationnelle et prometteuse et encore une fois correspond à ce que j’avais en réflexion en rejoignant cette communauté.
Merci pour ce joli travail
Si je peux me permettre, l’ajout d’un 3ème FEC en guise de prévision à comparer avec l’année N (l’année en cours) apportera une vraie valeur ajoutée.
Ça me semble déjà vraiment très bien et j’ai hâte de vouloir tester.

Germaine
 
Bonjour cathodique, le forum,

Ta version demo semble très opérationnelle et prometteuse et encore une fois correspond à ce que j’avais en réflexion en rejoignant cette communauté.
Merci pour ce joli travail
Si je peux me permettre, l’ajout d’un 3ème FEC en guise de prévision à comparer avec l’année N (l’année en cours) apportera une vraie valeur ajoutée.
Ça me semble déjà vraiment très bien et j’ai hâte de vouloir tester.

Germaine
Bonsoir,

Un 3ème FEC, non je ne suis pas partant. Ce n'est pas que je ne veux pas mais désolé je ne peux pas.
En Règle Générale, les membres aident à trouver une solution, pas fournir un fichier clé en main.
Si un autre membre veut prendre le relais. Tant mieux pour toi.
Je te joins le fichier. Tel qu'il est, on ne peut sélectionner que 2 fichiers txt.
On peut modifier cela dans le code.
sur ce lien tu trouveras un fichier qui pourrait te rendre service
Bonne soirée.

Ps: tu devrais faire un retour à ceux qui ont eu la gentillesse d'essayer de t'aider.
 

Pièces jointes

Dernière édition:
Bonjour Cathodique,
Bien entendu, complètement alignée avec toi, je tiens à tous vous remercier. On peut vraiment apprendre en parcourant les différents posts et ressources.
Frédéric, merci pour m'avoir donné l'idée d'utiliser les FEC, ça va vraiment beaucoup m'aider
Cousinhub, Power query, il faut que je m'y mettes.
TooFatBoy, merci pour ton commencement, et vous le forum
Evidemment, toi Cathodique, merci pour le partage de ton expertise.
Merci le forum
 
Bonjour Cathodique,
Bien entendu, complètement alignée avec toi, je tiens à tous vous remercier. On peut vraiment apprendre en parcourant les différents posts et ressources.
Frédéric, merci pour m'avoir donné l'idée d'utiliser les FEC, ça va vraiment beaucoup m'aider
Cousinhub, Power query, il faut que je m'y mettes.
TooFatBoy, merci pour ton commencement, et vous le forum
Evidemment, toi Cathodique, merci pour le partage de ton expertise.
Merci le forum
Bonjour,

@Germaine : Est-ce que le dernier fichier répond bien à tes attentes. Comme tu as dû le constaté, on importe des fichiers Txt uniquement les données nécessaires. Si tu as besoin d'aide pour adapter à ton fichier de travail, le forum est là.
Ne te fait pas d'illusion sur mes compétences. Si tu parcours le forum, moi aussi je demande de l'aide.
Bonne journée.
 
Bonjour,

@Germaine : Est-ce que le dernier fichier répond bien à tes attentes. Comme tu as dû le constaté, on importe des fichiers Txt uniquement les données nécessaires. Si tu as besoin d'aide pour adapter à ton fichier de travail, le forum est là.
Ne te fait pas d'illusion sur mes compétences. Si tu parcours le forum, moi aussi je demande de l'aide.
Bonne journée.

Bonjour Cathodique, le forum

Je commence à tester en important les
fichiers txt, il y'a cependant un bug.
Pourriez-vous me faire un retour s'il vous plait ?
Germaine
Je te joins les images
1738408970508.png
 

Pièces jointes

  • Capture d’écran 2025-02-01 121534.png
    Capture d’écran 2025-02-01 121534.png
    32.3 KB · Affichages: 7
Bonjour à tous, 🙂

J'ai repris la question initiale et traiter la feuille "Grand-livre des comptes" du fichier post #3 via cette macro.
Résultat en feuille "Retraitement" créée pour la circonstance.
De là, tu dois pouvoir compléter le compte de résultat à l'aide de formules en t'appuyant sur les colonnes C (Année) et I (Outils analytiques) de la feuille "Retraitement" si j'ai bien compris.

VB:
Option Explicit
Sub Retraitement()
    Dim a, b, CorresParam, i As Long, ii As Long, iii As Long, n As Long, nCompte, EnTete
    a = Sheets("Grand-livre des comptes").Range("A1").CurrentRegion.Value
    CorresParam = Sheets("Paramètres_comptes").Range("A1").CurrentRegion.Value
    EnTete = [{"Compte","Date","Année","Mois","Libellé","Débit","Crédit","Solde","Outils analytiques","Agregat","Agregat final"}]
    ReDim b(1 To UBound(a, 1), 1 To 11)
    For i = 2 To UBound(a, 1)
        ii = 0
        Do While Year(a(i + ii, 2)) = 2024 Or Year(a(i + ii, 2)) = 2023
            If ii = 0 Then nCompte = a(i - 1 + ii, 1)
            b(n + 1, 1) = nCompte ' Compte
            If IsDate(a(i + ii, 1)) Then
                b(n + 1, 2) = a(i + ii, 1) ' Date
            End If
            b(n + 1, 3) = Year(a(i + ii, 2)) ' Annee
            b(n + 1, 4) = MonthName(Month(a(i + ii, 3))) ' Mois
            b(n + 1, 5) = a(i + ii, 4) ' Libellé Ecritures
            b(n + 1, 6) = a(i + ii, 5) ' Débit
            b(n + 1, 7) = a(i + ii, 6) ' Crédit
            b(n + 1, 8) = b(n + 1, 6) - b(n + 1, 7) 'Solde
            For iii = 2 To UBound(CorresParam, 1)
                If CorresParam(iii, 1) = nCompte Then
                    b(n + 1, 9) = CorresParam(iii, 2) ' Outils Analytiques
                    b(n + 1, 10) = CorresParam(iii, 3) ' Agregat
                    b(n + 1, 11) = CorresParam(iii, 4) ' Agregat Final
                    Exit For
                End If
            Next
            ii = ii + 1: n = n + 1
            ' Sort de la boucle si fin de colonne
            If i + ii > UBound(a, 1) Then Exit Do
        Loop
        If ii > 0 Then
            i = i + ii - 1
        End If
    Next
    ' Restitution
    Application.ScreenUpdating = False
    If Not Evaluate("isref('Retraitement'!a1)") Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Retraitement"
    With Sheets("Retraitement")
        With .Cells(1)
            .CurrentRegion.Clear
            If n > 0 Then
                .Resize(, UBound(b, 2)).Value = EnTete
                .Offset(1).Resize(n, UBound(b, 2)).Value = b
                With .CurrentRegion
                    .Font.Name = "calibri"
                    .Font.Size = 10
                    .VerticalAlignment = xlCenter
                    .Borders(xlInsideVertical).Weight = xlThin
                    .BorderAround Weight:=xlThin
                    With .Rows(1)
                        .HorizontalAlignment = xlCenter
                        .Font.Size = 11
                        .BorderAround Weight:=xlThin
                        .Interior.ColorIndex = 44
                    End With
                    .Columns.AutoFit
                End With
            End If
        End With
    End With
    Application.ScreenUpdating = True
End Sub

klin89
 

Pièces jointes

Dernière édition:
Re,🙂

Une petite modification, j'ai rajouté une colonne pour identifier le libellé du compte, c'est plus clair pour les non-initiés à la comptabilité 😏
VB:
Option Explicit
Sub Retraitement2()
    Dim a, b, CorresParam, i As Long, ii As Long, iii As Long, n As Long, nCompte, libelCompte, EnTete
    a = Sheets("Grand-livre des comptes").Range("A1").CurrentRegion.Value
    CorresParam = Sheets("Paramètres_comptes").Range("A1").CurrentRegion.Value
    EnTete = [{"N° du Compte","Libellé du Compte","Date","Année","Mois","Libellé","Débit","Crédit","Solde","Outils analytiques","Agregat","Agregat final"}]
    ReDim b(1 To UBound(a, 1), 1 To 12)
    For i = 2 To UBound(a, 1)
        ii = 0
        Do While Year(a(i + ii, 2)) = 2024 Or Year(a(i + ii, 2)) = 2023
            If ii = 0 Then
                nCompte = a(i - 1 + ii, 1)
                libelCompte = a(i - 1 + ii, 4)
            End If
            b(n + 1, 1) = nCompte    ' n°Compte
            b(n + 1, 2) = libelCompte ' Libellé du Compte
            If IsDate(a(i + ii, 1)) Then
                b(n + 1, 3) = a(i + ii, 1)    ' Date
            End If
            b(n + 1, 4) = Year(a(i + ii, 2))    ' Annee
            b(n + 1, 5) = MonthName(Month(a(i + ii, 3)))    ' Mois
            b(n + 1, 6) = a(i + ii, 4)    ' Libellé Ecritures
            b(n + 1, 7) = a(i + ii, 5)    ' Débit
            b(n + 1, 8) = a(i + ii, 6)    ' Crédit
            b(n + 1, 9) = b(n + 1, 7) - b(n + 1, 8)    'Solde
            For iii = 2 To UBound(CorresParam, 1)
                If CorresParam(iii, 1) = nCompte Then
                    b(n + 1, 10) = CorresParam(iii, 2)    ' Outils Analytiques
                    b(n + 1, 11) = CorresParam(iii, 3)    ' Agregat
                    b(n + 1, 12) = CorresParam(iii, 4)    ' Agregat Final
                    Exit For
                End If
            Next
            ii = ii + 1: n = n + 1
            ' Sort de la boucle si fin de colonne
            If i + ii > UBound(a, 1) Then Exit Do
        Loop
        If ii > 0 Then
            i = i + ii - 1
        End If
    Next
    ' Restitution
    Application.ScreenUpdating = False
    If Not Evaluate("isref('Retraitement1'!a1)") Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Retraitement1"
    With Sheets("Retraitement1")
        With .Cells(1)
            .CurrentRegion.Clear
            If n > 0 Then
                .Resize(, UBound(b, 2)).Value = EnTete
                .Offset(1).Resize(n, UBound(b, 2)).Value = b
                With .CurrentRegion
                    .Font.Name = "calibri"
                    .Font.Size = 10
                    .VerticalAlignment = xlCenter
                    .Borders(xlInsideVertical).Weight = xlThin
                    .BorderAround Weight:=xlThin
                    With .Rows(1)
                        .HorizontalAlignment = xlCenter
                        .Font.Size = 11
                        .BorderAround Weight:=xlThin
                        .Interior.ColorIndex = 44
                    End With
                    .Columns.AutoFit
                End With
            End If
        End With
    End With
    Application.ScreenUpdating = True
End Sub

A exécuter sur le fichier du post #54
Je pense que tu as une table exploitable pour compléter ton compte de résultat.
klin89
 
Dernière édition:
Re,🙂

Une petite modification, j'ai rajouté une colonne pour identifier le libellé du compte, c'est plus clair pour les non-initiés à la comptabilité 😏
VB:
Option Explicit
Sub Retraitement2()
    Dim a, b, CorresParam, i As Long, ii As Long, iii As Long, n As Long, nCompte, libelCompte, EnTete
    a = Sheets("Grand-livre des comptes").Range("A1").CurrentRegion.Value
    CorresParam = Sheets("Paramètres_comptes").Range("A1").CurrentRegion.Value
    EnTete = [{"N° du Compte","Libellé du Compte","Date","Année","Mois","Libellé","Débit","Crédit","Solde","Outils analytiques","Agregat","Agregat final"}]
    ReDim b(1 To UBound(a, 1), 1 To 12)
    For i = 2 To UBound(a, 1)
        ii = 0
        Do While Year(a(i + ii, 2)) = 2024 Or Year(a(i + ii, 2)) = 2023
            If ii = 0 Then
                nCompte = a(i - 1 + ii, 1)
                libelCompte = a(i - 1 + ii, 4)
            End If
            b(n + 1, 1) = nCompte    ' n°Compte
            b(n + 1, 2) = libelCompte ' Libellé du Compte
            If IsDate(a(i + ii, 1)) Then
                b(n + 1, 3) = a(i + ii, 1)    ' Date
            End If
            b(n + 1, 4) = Year(a(i + ii, 2))    ' Annee
            b(n + 1, 5) = Month(a(i + ii, 3))    ' Mois
            b(n + 1, 6) = a(i + ii, 4)    ' Libellé
            b(n + 1, 7) = a(i + ii, 5)    ' Débit
            b(n + 1, 8) = a(i + ii, 6)    ' Crédit
            b(n + 1, 9) = b(n + 1, 7) - b(n + 1, 8)    'Solde
            For iii = 2 To UBound(CorresParam, 1)
                If CorresParam(iii, 1) = nCompte Then
                    b(n + 1, 10) = CorresParam(iii, 2)    ' Outils Analytiques
                    b(n + 1, 11) = CorresParam(iii, 3)    ' Agregat
                    b(n + 1, 12) = CorresParam(iii, 4)    ' Agregat Final
                    Exit For
                End If
            Next
            ii = ii + 1: n = n + 1
            ' Sort de la boucle si fin de ligne
            If i + ii > UBound(a, 1) Then Exit Do
        Loop
        If ii > 0 Then
            i = i + ii - 1
        End If
    Next
    ' Restitution
    Application.ScreenUpdating = False
    If Not Evaluate("isref('Retraitement1'!a1)") Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Retraitement1"
    With Sheets("Retraitement1")
        With .Cells(1)
            .CurrentRegion.Clear
            If n > 0 Then
                .Resize(, UBound(b, 2)).Value = EnTete
                .Offset(1).Resize(n, UBound(b, 2)).Value = b
                With .CurrentRegion
                    .Font.Name = "calibri"
                    .Font.Size = 10
                    .VerticalAlignment = xlCenter
                    .Borders(xlInsideVertical).Weight = xlThin
                    .BorderAround Weight:=xlThin
                    With .Rows(1)
                        .HorizontalAlignment = xlCenter
                        .Font.Size = 11
                        .BorderAround Weight:=xlThin
                        .Interior.ColorIndex = 44
                    End With
                    .Columns.AutoFit
                End With
            End If
        End With
    End With
    Application.ScreenUpdating = True
End Sub

Je pense que tu as une table exploitable pour compléter ton compte de résultat.
klin89
Re,🙂

Une petite modification, j'ai rajouté une colonne pour identifier le libellé du compte, c'est plus clair pour les non-initiés à la comptabilité 😏
VB:
Option Explicit
Sub Retraitement2()
    Dim a, b, CorresParam, i As Long, ii As Long, iii As Long, n As Long, nCompte, libelCompte, EnTete
    a = Sheets("Grand-livre des comptes").Range("A1").CurrentRegion.Value
    CorresParam = Sheets("Paramètres_comptes").Range("A1").CurrentRegion.Value
    EnTete = [{"N° du Compte","Libellé du Compte","Date","Année","Mois","Libellé","Débit","Crédit","Solde","Outils analytiques","Agregat","Agregat final"}]
    ReDim b(1 To UBound(a, 1), 1 To 12)
    For i = 2 To UBound(a, 1)
        ii = 0
        Do While Year(a(i + ii, 2)) = 2024 Or Year(a(i + ii, 2)) = 2023
            If ii = 0 Then
                nCompte = a(i - 1 + ii, 1)
                libelCompte = a(i - 1 + ii, 4)
            End If
            b(n + 1, 1) = nCompte    ' n°Compte
            b(n + 1, 2) = libelCompte ' Libellé du Compte
            If IsDate(a(i + ii, 1)) Then
                b(n + 1, 3) = a(i + ii, 1)    ' Date
            End If
            b(n + 1, 4) = Year(a(i + ii, 2))    ' Annee
            b(n + 1, 5) = Month(a(i + ii, 3))    ' Mois
            b(n + 1, 6) = a(i + ii, 4)    ' Libellé
            b(n + 1, 7) = a(i + ii, 5)    ' Débit
            b(n + 1, 8) = a(i + ii, 6)    ' Crédit
            b(n + 1, 9) = b(n + 1, 7) - b(n + 1, 8)    'Solde
            For iii = 2 To UBound(CorresParam, 1)
                If CorresParam(iii, 1) = nCompte Then
                    b(n + 1, 10) = CorresParam(iii, 2)    ' Outils Analytiques
                    b(n + 1, 11) = CorresParam(iii, 3)    ' Agregat
                    b(n + 1, 12) = CorresParam(iii, 4)    ' Agregat Final
                    Exit For
                End If
            Next
            ii = ii + 1: n = n + 1
            ' Sort de la boucle si fin de ligne
            If i + ii > UBound(a, 1) Then Exit Do
        Loop
        If ii > 0 Then
            i = i + ii - 1
        End If
    Next
    ' Restitution
    Application.ScreenUpdating = False
    If Not Evaluate("isref('Retraitement1'!a1)") Then Sheets.Add(, Sheets(Sheets.Count)).Name = "Retraitement1"
    With Sheets("Retraitement1")
        With .Cells(1)
            .CurrentRegion.Clear
            If n > 0 Then
                .Resize(, UBound(b, 2)).Value = EnTete
                .Offset(1).Resize(n, UBound(b, 2)).Value = b
                With .CurrentRegion
                    .Font.Name = "calibri"
                    .Font.Size = 10
                    .VerticalAlignment = xlCenter
                    .Borders(xlInsideVertical).Weight = xlThin
                    .BorderAround Weight:=xlThin
                    With .Rows(1)
                        .HorizontalAlignment = xlCenter
                        .Font.Size = 11
                        .BorderAround Weight:=xlThin
                        .Interior.ColorIndex = 44
                    End With
                    .Columns.AutoFit
                End With
            End If
        End With
    End With
    Application.ScreenUpdating = True
End Sub

A exécuter sur le fichier du post #54
Je pense que tu as une table exploitable pour compléter ton compte de résultat.
klin89
klin89,
Je te remercie
Cependant, j'ai compris le grand intérêt d'utiliser les FEC par rapport au grand livre pour construire le compte de résultat
Pourriez-vous m'éclairer sur la version avec les FEC de cathodique ?
Germaine
 
Bonjour Cathodique, le forum

Je commence à tester en important les
fichiers txt, il y'a cependant un bug.
Pourriez-vous me faire un retour s'il vous plait ?
Germaine
Je te joins les images Regarde la pièce jointe 1212110
Bonjour,

@Germaine: Je ne peux rien te dire. Le message est explicite. Je n'ai pas eu de plantage.

edit: je viens de refaire des tests. Pas de plantage. Merci de joindre les fichiers que tu as voulu importer.

@klin89 😉: Bonjour. Bon week-end
 
Dernière édition:
Re Germaine 🙂

Vous avez un modèle de compte de résultat où figurent 2 colonnes avec en en-têtes les années, et sur les lignes le libellé des différents comptes ... et tout ça m'a l'air figé.
A l'aide de simples formules, vous pouvez désormais renvoyer vos données issues des FEC ou Grand livre de comptes dans le compte de résultat, puisque que l'on peut y établir une correspondance, non !

Sur ce point, je ne peux pas vous aider, les formules c'est pas mon truc 😔
Sinon effectivement, on pourrait à l'aide d'un dictionnaire parent (Année) et enfant (n° compte) ventiler dans le compte résultat les données issues des FEC ou Grand livre de compte.
Je trouve ça un peu lourd et en plus j'ai la flemme 😛

Edit : salut cathodique
klin89
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour