Modification VBA (details)
Bonjour a tous
je reviens vers vous pour que vous m'aidiez pour un détails,
je vous explique
je dois créer une Macro qui va générer des écritures comptables pour pouvoir les intégrer plus facilement dans un logiciels de compta, ce que j'ai réussi a créer avec l'aide d'un collègues du FORUM que je remercie énormément, le HIC c'est que j'ai adapter la macro qu'il a crée et je n'arrive pas a afficher la totalité de ma colonne Compte( ca les affiche sur les 3 premières lignes mais pas la suite ) avec les différentes valeurs ca prend en compte ma fonctions mais ca n'affiche que le même numéro de compte. Voir ex
pour mieux comprendre j'ai mis un fichier exemple avec ma feuille BASE qui est ma feuille ou je dois filtrer mes données, une feuille "ResultatMacro" qui est le résultat quand j'active ma macro et j'ai la feuille RésultatVoulu qui dois être mon résultat final pour pouvoir l'intégrer dans mon logiciel de comptabilité.
et voici mon code VBA
si quelqu'un pourrait m'aider a trouver mon erreur ? S'il vous plait
je pense que mon erreur se situe ou il y a :
For I = 2 To UBound(tbl)
ReDim Preserve arr(6, k + 1 + 1)
arr(0, k) = tbl(I, 1)
arr(1, k) = "CA"
arr(2, k) = "5300000"
arr(2, 1) = "7070000"
arr(2, 2) = "4457100"
Option Explicit
Public Sub TransformData()
Dim wb As Workbook, ws As Worksheet, ws2 As Worksheet
Dim tbl As Variant, arr() As Variant
Dim I As Long, k As Long
Dim n As Double
Set wb = ActiveWorkbook
n = wb.Worksheets.Count
Set ws = wb.Worksheets("Base")
tbl = ws.Cells(1).CurrentRegion.Value2
Set ws2 = Worksheets.Add(after:=Worksheets(Worksheets.Count))
ws2.Name = "FiltreReglement" & n
For I = 2 To UBound(tbl)
ReDim Preserve arr(6, k + 1 + 1)
arr(0, k) = tbl(I, 1)
arr(1, k) = "CA"
arr(2, k) = "5300000"
arr(2, 1) = "7070000"
arr(2, 2) = "4457100"
If tbl(I, 5) = "D" Then
arr(3, k) = tbl(I, 6)
Else
arr(4, k) = tbl(I, 6)
End If
arr(5, k) = tbl(I, 7)
k = k + 1
Next I
With ws2
.Cells(2, 1).Resize(, 6).Value = Array("date rgt", "code journal", "compte", "débit", "crédit", "Libellé")
.Cells(3, 1).Resize(k, 6).Value = Application.Transpose(arr)
End With
End SubBonjour,
Si j'ai bien compris, remplacez ces 3 lignes
arr(2, k) = "5300000"
arr(2, 1) = "7070000"
arr(2, 2) = "4457100"par celle-ci, uniquement
arr(2, k) = Left(tbl(I, 3) * 1000, 7)Cdlt
bonjour Arturo83, DragZ, le fil,
on peut utiliser TBL le reste de la macro, sans transposer et les 6 premières colonnes
Public Sub TransformData()
Dim Tbl, i As Long
Tbl = Sheets("Base").Range("A1").CurrentRegion.Offset(1).Resize(, 7).Value2 'vos données à partir de la 2eme ligne >>> tblay
For i = 1 To UBound(Tbl) - 1 'boucle les données
Tbl(i, 3) = "'" & Left(Tbl(i, 3) & "000000", 6) 'code journalier
Tbl(i, 6) = CDbl(Trim(Replace(Tbl(i, 6), ".", ","))) 'convertir
Select Case UCase(Tbl(i, 5)) 'majuscule
Case "D": Tbl(i, 4) = Tbl(i, 6): Tbl(i, 5) = ""
Case "C": Tbl(i, 4) = "": Tbl(i, 5) = Tbl(i, 6)
Case Else: Tbl(i, 4) = "???" & Tbl(i, 6): Tbl(i, 5) = Tbl(i, 4)
End Select
Tbl(i, 6) = Tbl(i, 7)
Next
With Worksheets.Add(after:=Worksheets(Worksheets.Count)) 'ajouter feuille
.Name = "FiltreReglement" & ThisWorkbook.Worksheets.Count 'nom de la feuille
.Columns(1).NumberFormat = "dd/mm/yy" '1er colonne est date
.Range("D:E").NumberFormat = "#,##0.00 €" '4 et 5 sont currency
.Cells(2, 1).Resize(, 6).Value = Array("date rgt", "code journal", "compte", "débit", "crédit", "Libellé") '1er ligne
.Cells(3, 1).Resize(UBound(Tbl), 6).Value = Tbl 'seulement les 6 premieres colonnes
End With
End SubMerci bien a vous tous
vos deux solution fonctionne très bien :) et vous m'avez fais comprendre mon erreur je vous en remercie mille fois