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 :
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
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
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 SubBonjour,
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.
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 jMais 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 SubCela 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é.
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".