Programme 15x plus lent en Excel 2013 comparé à 2010

Bonjour,

Actuellement j'ai toutes mes exportations de fichier .xls, initialement générer en Excel 2010, on vu leur temps démultiplier sous Excel 2013.

A savoir que mon langage de programmation est Progress (ABL) mais que j'ai pu reproduire mon problème en VB.

En générale les programmes concerné récupère les données de la bdd les stock dans une table temporaire, puis cette dernière est parcouru dans sont intégralité puis j'ajoute la valeur voulu dans la bonne cellules en utilisant soit la méthode .cells ou .range

Du coup voici un exemple le plus épuré possible où le ralentissement s'effectue sur l'instruction ws.Cells(i, j) = 5646.

Imports Microsoft.Office.Interop

Module Module1

    Sub Main()
        'Déclaration des variables
        Dim xls As Excel.Application 'Application Excel
        Dim wb As Excel.Workbook 'Classeur Excel
        Dim ws As Excel.Worksheet 'Feuille Excel
        Dim i As Integer
        Dim j As Integer

        i = 1

        xls = CreateObject("Excel.Application")
        wb = xls.Workbooks.Open("C:\gpi\test_vb.xlsx")
        ws = wb.Worksheets(1)

        Do While i < 100
            j = 1
            Do While j < 12
                ws.Cells(i, j) = 5646
                j = j + 1
            Loop
            i = i + 1
        Loop

        xls.Visible = True
    End Sub
End Module

Alors certes c'est une insertion cellule par cellule (d'où la boucle) et il y a surement mieux à faire, cependant cela n'explique pas pourquoi si j’exécute ce programme avec Excel 2010 il se termine en 10 secondes contre plus d'une minutes en Excel 2013.

Egalement j'ai testé cette boucle en VBA macro sous Excel 2013, le traitement est instantané.

Comme si par défaut il y aurait un paramétrage pour "limité quelque chose", je dis ça parce qu'en bouclant 150 000x (au lieu des 100) le script se lance et génère une erreur "dépassement de capacité" et arrête l'inscription à la ligne 32 767.

Parce que même s'il n'y a pas l'ouverture de document à faire, le traitement aurait du être de environ de même durée entre la macro et le programme extérieur.

En espérant que quelqu’un aurait une explication et solution

cordialement

Bonjour Rec

Rec a écrit :

une erreur "dépassement de capacité" et arrête l'inscription à la ligne 32 767.

Je pense que c'est parce que tu utilises des INTEGER.... essaies avec des LONG pour tes variables I et J !

Rechercher des sujets similaires à "programme 15x lent 2013 compare 2010"