VincentH.DR
XLDnaute Nouveau
Bonjour à tous,
J'aurai besoin des lumières de la communauté.
J'ai créé un fichier pour de la comptabilité et de l'audit et n'étant pas très bon en VBA, je bloque souvent lors de l'écriture des macros.
Pour ceux à qui cela parle, pour les variations des immobilisations et des amortissements, un tableau doit être compléter et joins à l'annexe.
Dans ce tableau nous avons deux parties :
- la valeur brute (N-1) des biens auxquelles on va ajouter les acquisitions et soustraire les cessions et ainsi obtenir la valeur brute (N).
- le cumul des amortissements de N-1 auquel on ajoute les dotations de l'année et l'on soustrait les reprises pour obtenir le cumul N
La valeur brute moins le cumul des amortissements donne alors la valeur nette comptable.
Dans la balance comptable, chaque bien ou catégorie de bien est identifiée par un compte spécifique.
La macro que j'ai est la suivante, je ne l'ai pas créée, je me suis inspiré que ce qui se faisait sur les forums et l'ai adaptée à mes besoins (la partie qui ne convient pas est en rouge) :
Dim ws, wsSource As Worksheet
Dim rgRecherche As Range
Dim cell, res As Range
Set ws = ActiveSheet
Set res = ws.Range("B9") 'Le résultat sera présenté à partir de la cellule A1 de la feuille actuelle
Set wsSource = Sheets("Balances") 'Source de données dans la feuille CONVERT
Set rgRecherche = wsSource.Range("A7:B10000") 'Critère de recherche : colonne A de CONVERT
ws.Range("B9:C50").ClearContents ' Suppression des résultats précédents
For Each cell In rgRecherche ' Recherche dans chaque cellule de la colonne A
If Left(cell, 2) = "20" Or Left(cell, 2) = "21" Or Left(cell, 2) = "23" Or Left(cell, 3) = "274" Or Left(cell, 3) = "275" Or Left(cell, 3) = "276" Then
res.Value = cell.Value ' Reporte le N° compte
res.Offset(0, 1).Value = cell.Offset(0, 1).Value ' Reporte le libellé de compte
res.Offset(0, 1).Value = cell.Offset(0, 1).Value ' Reporte le libellé de compte
Set res = res.Offset(1, 0) ' Retour à la ligne suivante pour la prochaine écriture à extraire
End If
If IsEmpty(cell) Then Exit For ' Fin de la recherche dès la première cellule vide (DANGER : il faut que l'import ne présente aucune ligne intermédiaire vide)
Next
Set ws = ActiveSheet
Set res = ws.Range("H9") 'Le résultat sera présenté à partir de la cellule A1 de la feuille actuelle
Set wsSource = Sheets("Balances") 'Source de données dans la feuille CONVERT
Set rgRecherche = wsSource.Range("G7:H10000") 'Critère de recherche : colonne A de CONVERT
ws.Range("H9:J50").ClearContents ' Suppression des résultats précédents
For Each cell In rgRecherche ' Recherche dans chaque cellule de la colonne A
If Left(cell, 2) = "28" Then
res.Value = cell.Value ' Reporte le N° compte
res.Offset(0, 1).Value = cell.Offset(0, 1).Value ' Reporte le libellé de compte
res.Offset(0, 2).Value = cell.Offset(0, 2).Value ' Reporte le libellé de compte
Set res = res.Offset(1, 0) ' Retour à la ligne suivante pour la prochaine écriture à extraire
End If
If IsEmpty(cell) Then Exit For ' Fin de la recherche dès la première cellule vide (DANGER : il faut que l'import ne présente aucune ligne intermédiaire vide)
Next
Dim cel As Range
For Each cel In Range("B9:B50")
If cel = 0 Then cel.EntireRow.Hidden = True
Next cel
Lorsque je lance la macro, le tableau suivant est alors complété :
Ce qui ne convient pas c'est que les comptes des catégories de biens ne sont pas en alignement avec les comptes d'amortissements.
Il faudrait que le tableau qui ressort une fois la macro lancée donne :
Comme vous pouvez le constater, dans la colonne des valeurs d'ouverture et de clôture, les montants ne sont plus les mêmes.
Second problème, c'est que certains comptes comme le 207000, ne sont pas amortissables, il n'y a alors pas de compte d'amortissement qui peut aller en face c'est pour cela qu'il y a un blanc dans les amortissements.
J'avais pensé à insérer le chiffre 8 en seconde position (qui comptablement signifie l'amortissement) mais il fallait ensuite que je fasse une condition qui aurait masqué la ligne si c'était un compte qui n'était pas amortissable.
Merci et ceux/celles qui prendront le temps pour me répondre.
En vous souhaitant un bon weekend,
Vincent.
J'aurai besoin des lumières de la communauté.
J'ai créé un fichier pour de la comptabilité et de l'audit et n'étant pas très bon en VBA, je bloque souvent lors de l'écriture des macros.
Pour ceux à qui cela parle, pour les variations des immobilisations et des amortissements, un tableau doit être compléter et joins à l'annexe.
Dans ce tableau nous avons deux parties :
- la valeur brute (N-1) des biens auxquelles on va ajouter les acquisitions et soustraire les cessions et ainsi obtenir la valeur brute (N).
- le cumul des amortissements de N-1 auquel on ajoute les dotations de l'année et l'on soustrait les reprises pour obtenir le cumul N
La valeur brute moins le cumul des amortissements donne alors la valeur nette comptable.
Dans la balance comptable, chaque bien ou catégorie de bien est identifiée par un compte spécifique.
La macro que j'ai est la suivante, je ne l'ai pas créée, je me suis inspiré que ce qui se faisait sur les forums et l'ai adaptée à mes besoins (la partie qui ne convient pas est en rouge) :
Dim ws, wsSource As Worksheet
Dim rgRecherche As Range
Dim cell, res As Range
Set ws = ActiveSheet
Set res = ws.Range("B9") 'Le résultat sera présenté à partir de la cellule A1 de la feuille actuelle
Set wsSource = Sheets("Balances") 'Source de données dans la feuille CONVERT
Set rgRecherche = wsSource.Range("A7:B10000") 'Critère de recherche : colonne A de CONVERT
ws.Range("B9:C50").ClearContents ' Suppression des résultats précédents
For Each cell In rgRecherche ' Recherche dans chaque cellule de la colonne A
If Left(cell, 2) = "20" Or Left(cell, 2) = "21" Or Left(cell, 2) = "23" Or Left(cell, 3) = "274" Or Left(cell, 3) = "275" Or Left(cell, 3) = "276" Then
res.Value = cell.Value ' Reporte le N° compte
res.Offset(0, 1).Value = cell.Offset(0, 1).Value ' Reporte le libellé de compte
res.Offset(0, 1).Value = cell.Offset(0, 1).Value ' Reporte le libellé de compte
Set res = res.Offset(1, 0) ' Retour à la ligne suivante pour la prochaine écriture à extraire
End If
If IsEmpty(cell) Then Exit For ' Fin de la recherche dès la première cellule vide (DANGER : il faut que l'import ne présente aucune ligne intermédiaire vide)
Next
Set ws = ActiveSheet
Set res = ws.Range("H9") 'Le résultat sera présenté à partir de la cellule A1 de la feuille actuelle
Set wsSource = Sheets("Balances") 'Source de données dans la feuille CONVERT
Set rgRecherche = wsSource.Range("G7:H10000") 'Critère de recherche : colonne A de CONVERT
ws.Range("H9:J50").ClearContents ' Suppression des résultats précédents
For Each cell In rgRecherche ' Recherche dans chaque cellule de la colonne A
If Left(cell, 2) = "28" Then
res.Value = cell.Value ' Reporte le N° compte
res.Offset(0, 1).Value = cell.Offset(0, 1).Value ' Reporte le libellé de compte
res.Offset(0, 2).Value = cell.Offset(0, 2).Value ' Reporte le libellé de compte
Set res = res.Offset(1, 0) ' Retour à la ligne suivante pour la prochaine écriture à extraire
End If
If IsEmpty(cell) Then Exit For ' Fin de la recherche dès la première cellule vide (DANGER : il faut que l'import ne présente aucune ligne intermédiaire vide)
Next
Dim cel As Range
For Each cel In Range("B9:B50")
If cel = 0 Then cel.EntireRow.Hidden = True
Next cel
Lorsque je lance la macro, le tableau suivant est alors complété :
Ce qui ne convient pas c'est que les comptes des catégories de biens ne sont pas en alignement avec les comptes d'amortissements.
Il faudrait que le tableau qui ressort une fois la macro lancée donne :
Comme vous pouvez le constater, dans la colonne des valeurs d'ouverture et de clôture, les montants ne sont plus les mêmes.
Second problème, c'est que certains comptes comme le 207000, ne sont pas amortissables, il n'y a alors pas de compte d'amortissement qui peut aller en face c'est pour cela qu'il y a un blanc dans les amortissements.
J'avais pensé à insérer le chiffre 8 en seconde position (qui comptablement signifie l'amortissement) mais il fallait ensuite que je fasse une condition qui aurait masqué la ligne si c'était un compte qui n'était pas amortissable.
Merci et ceux/celles qui prendront le temps pour me répondre.
En vous souhaitant un bon weekend,
Vincent.