Macro Lettrage comptable

Bonjour à tous,

Je viens vous trouvez car j'aimerais automatiser une opération de lettrage sur un fichier excel volumineux (autour de 16K lignes à chaque lettrage).

J'ai essayé d'écrire une macro mais mes connaissances en VBA sont assez faibles, et j'aimerais gagner du temps (l'apprentissage risque d'être long ).

Voici un exemple simplifié de ce à quoi cela ressemble :

maccro vba

L'idée est la suivante :

Si la somme du débit et du credit est égale à 0, alors je veux un numéro de lettrage (dans la colonne lettrage) unique à chacune des entreprises.

La procédure :

1) si le numéro de convention ainsi que le nom de l'entreprise est le même sur les lignes A2; C2 à A...; C...

2) si la somme des montants sur les lignes où la condition 1 est vérifié est égale à 0,

3) alors je voudrais mettre un numéro de lettrage dans la colonne correspondante (différent pour chacune des entreprises)

Je ne sais pas si cela est faisable. De mon coté j'arrive à marquer un numéro de lettrage pour la première occurrence, mais je n'arrive pas l'automatiser à l'ensemble du fichier. De plus, je ne vois pas comment faire pour mettre un numéro de lettrage différent pour chacune des entreprises.

Je mets mon fichier Test en PJ.

N'hésitez pas à me demander pour plus de détails.

Merci d'avance,

Cordialement,

Massdit

324vba-tset.xlsm (17.50 Ko)

Bonjour,

une proposition de solution avec une formule.

je ne suis pas sûr d'avoir tout compris concernant le lettrage comptable.

à voir si cela te convient

588vba-tset.xlsm (15.84 Ko)

Bonjour,

Merci pour cette réponse si rapide !

Je ne pensais pas que cela soit possible avec une formule. Je vais essayer de comprendre comment tu as fait. C'est tout de même assez complexe .

Sur mon document test, cela à l'air de fonctionner comme prévu. Je vais le tester sur le "vrai" document demain et vous tiens au courant !!

Si cela fonctionne je passerais mon topic en résolu !

il existe un outil dans excel pour suivre pas à pas l'exécution d'une formule, je trouve ceci particulièrement utile pur comprendre une formule un temps soit peu complexe.

menu formules > evaluer formule

Bonjour,

Je n'arrive pas à appliquer la formule à l'ensemble de mon document (problème de #N/A), mais cela doit venir du fait que je ne comprends pas encore totalement la formule et que mon document n'est pas exant de problèmes.

Mais en tripatoullant un peu je me suis rendu compte que la formule créer un numéro de lettrage pour deux entreprises différentes ayant le même numéro de convention. Cela peu arriver et j'ai oublié l'indiquer dans mon premier post.

Du coup, pour le moment, ça ne marche pas vraiment.

Merci d'avance !

Edit plus d'informations :

La formule pourrait marcher pour l'ensemble du document je pense.

Le problème vient du fait que si un numéro de convention est commun à plusieurs entreprises, la formule va faire la somme de tous les montants de la convention indépendement du nom des entreprises.

Si la somme n'est pas égale à 0, les lignes ne seront pas lettrées, même si j'ai des montants qui, pour certaines entreprises, sont égal à 0.

En gros, la formule se base sur le numéro de convention sans vraiment tenir compte du nom de l'entreprise pour assigner un numéro de lettrage.

Bonjour,

une solution avec une macro.

Sub flettrage()

'le but est de pouvoir lettrer automatiquement les écritures en binomes'
'les critères de selections sont : la convention, le nom de l'entreprise'
'si les deux critères sont vérifiés, il s'agira d'additionner le montant de la ligne 1 avec la suivante'
'si le résultat est égale à 0, il faudra inscrire le numéro de lettrage dans la colone lettrage'
'ind tableau avec toutes les lignes correspondant aux critères en cours
    Dim ind(1000)

    With Worksheets("feuil1") ' ontravaille avec l'onglet "feuil1"
        ' dl dernière ligne utile de la feuille
        dl = .Range("a" & Rows.Count).End(xlUp).Row

        ' on parcourt toutes les lignes
        For i = 2 To dl
            s = .Cells(i, 2)    ' s= somme pour le critère en cours
            k = 0    ' nombre de lignes répondant aux critères en cours
            ind(k) = i    ' la première ligne avec le critère en cours en la ligne en cours
            For j = i + 1 To dl    ' on examine toutes les lignes qui suivent la ligne en cours
                If .Cells(i, 1) = .Cells(j, 1) And .Cells(i, 3) = .Cells(j, 3) Then    ' si même convention et même compagnie
                    s = s + .Cells(j, 2):    ' on ajoute le montant à la somme
                    k = k + 1   ' ajoute 1 au nombre de lignes
                    ind(k) = j    ' on ajoute la ligne aux lignes répondants aux critères en cours
                End If
            Next j
            If s = 0 Then    ' si la somme est 0
                lettrage = lettrage + 1    'on incrémente le numéro de lettrage
                For j = 0 To k    ' on inscrit le lettrage dans toutes les lignes répondant aux critères.
                    .Cells(ind(j), 4) = lettrage
                Next j
            End If
        Next i

    End With

End Sub

Bonjour,

Merci pour l'aide que tu m'apportes.

La macro me semble très bien. J'ai juste un dernier soucis.

Lorsque que l'entreprise est la même (donc le même nom), le numéro de lettrage doit être identique.

Ici, à chaque fois que la somme fait 0, la formule met un numero de chiffrage différent.

exemple2

Comme ici avec Carrefour par exemple.

Je me doute qu'il faut modifier quelques chose dans la fin du code :

If s = 0 Then    ' si la somme est 0
               lettrage = lettrage + 1    'on incrémente le numéro de lettrage
               For j = 0 To k    ' on inscrit le lettrage dans toutes les lignes répondant aux critères.
                   .Cells(ind(j), 4) = lettrage
                Next j

Mais je n'arrive pas à trouver la solution. Je manque clairement d'intuitution....

En tout cas je voulais te remercier pour avoir mis les explications à coté du code. Je comprends ce que tu as fait, même si je n'aurais jamais eu l'idée de faire ainsi. C'est comme ça qu'on apprends j'imagine.

Bonjour,

Lorsque que l'entreprise est la même (donc le même nom), le numéro de lettrage doit être identique.

Ici, à chaque fois que la somme fait 0, la formule met un numero de chiffrage différent.

J'avais pensé à ce cas en commençant le code, puis j'ai oublié de l'inclure.

voici une version corrigée.

Sub flettrage()

'le but est de pouvoir lettrer automatiquement les écritures en binômes'
'les critères de sélection sont : la convention, le nom de l'entreprise'
'si les deux critères sont vérifiés, il s'agira d'additionner le montant de la ligne 1 avec la suivante'
'si le résultat est égale à 0, il faudra inscrire le numéro de lettrage dans la colonne lettrage'
'ind tableau avec toutes les lignes correspondant aux critères en cours
   Dim ind(1000)

    With Worksheets("feuil1") ' ontravaille avec l'onglet "feuil1"
       ' dl dernière ligne utile de la feuille
       dl = .Range("a" & Rows.Count).End(xlUp).Row
       .range("D2:D" & dl).clearcontents ' on efface les lettrages présents en colonne D.
        ' on parcourt toutes les lignes
       For i = 2 To dl
            s = .Cells(i, 2)    ' s= somme pour le critère en cours
           k = 0    ' nombre de lignes répondant au critère en cours
           ind(k) = i    ' la première ligne avec le critère en cours 
           For j = i + 1 To dl    ' on examine toutes les lignes qui suivent la ligne en cours
               If .Cells(i, 4) = "" Then ' on vérifie que la ligne n'a pas déjà un lettrage
               If .Cells(i, 1) = .Cells(j, 1) And .Cells(i, 3) = .Cells(j, 3) Then    ' si même convention et même compagnie
                   s = s + .Cells(j, 2):    ' on ajoute le montant à la somme
                   k = k + 1   ' ajoute 1 au nombre de lignes
                   ind(k) = j    ' on ajoute la ligne aux lignes répondant au critère en cours
               End If
               End If
            Next j
            If s = 0 Then    ' si la somme est 0
               lettrage = lettrage + 1    'on incrémente le numéro de lettrage
               For j = 0 To k    ' on inscrit le lettrage dans toutes les lignes répondant au critère.
                   .Cells(ind(j), 4) = lettrage
                Next j
            End If
        Next i

    End With

End Sub

Cela marche parfaitement.

Merci beaucoup !!

bonjour j'ai vraiment besoin d'aide j'ai un grands probléme de lettrage

exemple

j'ai un tableau

colonne A : N°de facture

colonne B : montants

colonne C : réglements

je veux un programme vb sur excel qui me revois les numéro de facture ainsi les montants qui ne sont pas réglé sachant que le numéro de la facture peut étre réglé en deux ou trois ou n fois

c'est à dire là ou il y a le méme numéro de facture(dans la colonne réglements) il fait la somme et il cherche le montant dans la colonne B comme étant un montant réglé.

le tableau final doit etre dans une nouvelle feuille excel pas la meme la ou j'ai le tableau initial

merci.

bonjour,

merci d'ouvrir un nouveau fil avec ta demande.

mets-y un fichier exemple.

Numéro de facture Montant Reglements

1 8464

2 60

2 66

2 6

5 889

5 889

7 56

8 474

9 444

9 444

11 99

12 77


Numéro de facture Montant Reglements

1 8464

2 60

2 66

2 6

5 889

5 889

7 56

8 474

9 444

9 444

11 99

12 77

re bonjour,

ouvre un nouveau fil (message) et mets-y un fichier exemple stp. ce fil-ci est cloturé.

j'ai pas su joindre le fichier


90exemple.xlsx (8.40 Ko)

ouvre un nouveau sujet s'il-te-plait. ce sujet-ci est clôturé.

Cliquer sur "retour vers excel-VBA" et cliquer sur le bouton "nouveau".

Rechercher des sujets similaires à "macro lettrage comptable"