IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Calcul de solde cumul et de numéro d'écriture (compta) [Débutant]


Sujet :

VB.NET

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Collaborateur comtpable
    Inscrit en
    Août 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Collaborateur comtpable

    Informations forums :
    Inscription : Août 2017
    Messages : 16
    Par défaut Calcul de solde cumul et de numéro d'écriture (compta)
    Bonjour,

    J'ai une base .mdb dans laquelle se trouve la table Ecr correspondant aux écritures comptables dont les champs sont les suivants :
    DosQua, CodeJournal, Folio, PeriodeEcriture, JourEcriture, LigneFolio, Lib, Montant, NumUniq

    Afin de pouvoir calculer un solde cumulé et un numéro d'écriture, j'exporte NumUniq et Montant dans un fichier Excel par requete, le travail sous Access se révélant difficile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT NumUniq, Montant INTO [Excel 8.0;Database=FichierExcelSurBureau].[NumEcr] FROM Mvm ORDER BY DosQua, CodeJournal, Folio, PeriodeEcriture, JourEcriture, LigneFolio, Lib
    J'obtiens ainsi ce tableau (extrait de 15 lignes) pouvant contenir 95'000 lignes en fin d'exercice :
    NumUniq Montant
    20384 2392178,69
    20386 -2392178,69
    20388 9770,89
    20390 765,98
    20392 1188,2
    20394 -11725,07
    20396 8922,17
    20398 765,98
    20400 1018,45
    20402 -10706,6
    20404 8922,17
    20406 765,98
    20408 1018,45
    20410 -10706,6

    Je calcul ensuite le cumul et le numéro d'écriture, la première ligne portant le numéro 1, les lignes suivantes porteront ce numéro tant que le cumul de la ligne précédente est différent de 0.
    Lorsque la ligne précédente est égale à 0, la ligne actuelle correspond à une nouvelle écriture, le numéro est alors incrémenté. Nous obtenons ce résultat :
    NumUniq Montant Cumul Ecr
    20384 2392178,69 2392178,69 1
    20386 -2392178,69 0 1
    20388 9770,89 9770,89 2
    20390 765,98 10536,87 2
    20392 1188,2 11725,07 2
    20394 -11725,07 0 2
    20396 8922,17 8922,17 3
    20398 765,98 9688,15 3
    20400 1018,45 10706,6 3
    20402 -10706,6 0 3
    20404 8922,17 8922,17 4
    20406 765,98 9688,15 4
    20408 1018,45 10706,6 4
    20410 -10706,6 0 4

    Le problème est que la durée d'exécution est énorme, j'ai comparé la durée en lançant le traitement par VB.NET et par VBA et je suis choqué:
    Pour 27'626 lignes : VB.NET=3 min 36 / VBA= 1 sec
    Pour 58'220 lignes : VB.NET=9 min 20 / VBA= 5 sec

    Le code est le même :

    VB.NET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    xlApp = New Excel.Application
    xlApp.DisplayAlerts = False
     
    OdbCnn.Close()
    wrbSrc = xlApp.Workbooks.Open(Filename:=strDsk & "\crn." & LCase(strDos) & "." & LCase(strAAA) & ".cpt.mvm.xls", UpdateLinks:=False)
    wrs = wrbSrc.Worksheets("NumEcr")
    wrs.Cells(1, 3).Value = "Cumul"
    wrs.Cells(1, 4).Value = "Ecr"
    ecr = 1
    For i = 2 To wrs.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row
        If i = 2 Then
            wrs.Cells(i, 3).Value = Math.Round(wrs.Cells(i, 2).Value, 2)
        Else
            wrs.Cells(i, 3).Value = Math.Round(wrs.Cells(i, 2).Value + wrs.Cells(i - 1, 3).Value, 2)
        End If
        If i > 2 Then
            If wrs.Cells(i - 1, 3).Value = 0 Then
                ecr = ecr + 1
            End If
        End If
        wrs.Cells(i, 4).Value = ecr
    Next
    wrbSrc.Close(SaveChanges:=True)
    xlApp.DisplayAlerts = True

    VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Set wrsVba = Worksheets("VBA")
    Set wrsCpr = Worksheets("Compar")
    datDeb = Time
    wrsVba.Cells(1, 3) = "Cumul"
    wrsVba.Cells(1, 4) = "NumEcr"
    ecr = 1
    For i = 2 To wrsVba.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row
        If i = 2 Then
            wrsVba.Cells(i, 3) = Round(wrsVba.Cells(i, 2), 2)
        Else
            wrsVba.Cells(i, 3) = Round(wrsVba.Cells(i, 2) + wrsVba.Cells(i - 1, 3), 2)
    End If
    If i > 2 And wrsVba.Cells(i - 1, 3) = 0 Then
        ecr = ecr + 1
    End If
    wrsVba.Cells(i, 4) = ecr
    Next i
    datFin = Time
    i = wrsCpr.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row + 1
    wrsCpr.Cells(i, 1) = "VBA"
    wrsCpr.Cells(i, 2) = Format(Now, "MM/dd/yyyy")
    wrsCpr.Cells(i, 3) = Format(datDeb, "HH:mm:ss")
    wrsCpr.Cells(i, 4) = Format(datFin, "HH:mm:ss")
    wrsCpr.Cells(i, 5) = Format(datFin - datDeb, "HH:mm:ss")
    Avez-vous une solution pour que la durée d'exécution sous VB.NET se rapproche sensiblement de celle sous VBA ?

    Je joins un fichier contenant les deux exemples avec le module VBA au cas où.

    Vous remerciant pour votre aide.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [v9][crystal] Calcul Du Total Cumule Avec La Variable Shared
    Par BOMBARDIER dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 31/07/2007, 19h47
  2. Calcul du solde de tout compte après la démission.
    Par Elvina dans le forum Démission
    Réponses: 2
    Dernier message: 05/06/2007, 19h41
  3. [8.5] formule solde cumul progressif
    Par speed0013 dans le forum Formules
    Réponses: 2
    Dernier message: 24/05/2007, 10h41
  4. Calcul de soldes provenant de données d'un bdd access
    Par ShortcutZ dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/08/2006, 19h23
  5. Requete SQl, calcul du solde d'un compte
    Par nerick dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 02/02/2006, 22h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo