Lenteur transfert VB6=>Excel

rsbill Messages postés 22 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 22 août 2007 - 10 juil. 2007 à 18:36
rsbill Messages postés 22 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 22 août 2007 - 12 juil. 2007 à 18:41
Bnojour à tous.

Je connais actuellement un problème de lenteur lié au transfert de valeurs de VB6 à Excel. Pour un tableau de 4*50000 près de 30min sont nécessaires. J'ai essayé de bloqué le recalcul de la feuille sur modification mais ça n'a pa eu d'effet! Voici un extrait du code:

'Lancement d'excel pour le transfert
Call ouvrirexcel


'Configuration d'excel
Set wbexcel = appexcel.Workbooks.Open(chemin & "RCMTT-worksheet.xls")
Set wsexcel = wbexcel.Worksheets("E-C")


    With Application
        .Calculation = xlManual
        .MaxChange = 0.001
    End With


'Affichage de l'étape
traitement.lbl3.FontBold = False
traitement.lbl4.FontBold = True
traitement.Refresh


'+++ boucle de transfert loi E +++
For i = 2 To u Step 1
wsexcel.Cells(i, 2) = tab1(i, 1)
wsexcel.Cells(i, 3) = tab1(i, 2)
wsexcel.Cells(i, 5) = tab1(i, 3)
wsexcel.Cells(i, 7) = tab1(i, 4)
Next

Voila merci d'avance pour le coup de main

RS Bill

10 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 juil. 2007 à 18:39
Bonsoir,

Essaye d'inhiber l'affichage dans Excell durant tes opérations de transfert (rétablis-le ensuite).
Je crois que sous VBA c'est du henre ScreenUpdating (à définir à False, pour inhiber, ou à True, pour afficher).
0
rsbill Messages postés 22 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 22 août 2007
10 juil. 2007 à 18:41
En fait je n'affiche pas du tout Excel. Je lance mon programme VB et je vais ensuite récupérer le fichier excel enregistré par le programme sur le bureau quand il a finit!

RS Bill
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 juil. 2007 à 18:44
Euh.... j'ai des difficultés à voir comment tu peux transférer sans ouvrir (et donc afficher... à moins que tu n'inhibes l'affichage). Mais je ne connais pas Excel... alors, ma foi...
0
rsbill Messages postés 22 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 22 août 2007
10 juil. 2007 à 18:59
J'utilise cette commande:

Public appexcel As excel.Application
Public wbexcel As excel.Workbook
Public wsexcel As excel.Worksheet
Public fichierexcel As String


Public Sub ouvrirexcel()
Set appexcel = CreateObject("excel.application")
End Sub

Tout se passe en masqué! A aucun moment Excel ne s'affiche. Par contre si tu ouvre une feuille quelconque pendant que le programme est en route tu as la feuille de transfert qui "s'ouvre" en même temps.

RS Bill
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 juil. 2007 à 22:08
salut,

application.ScreenUpdating = False au début du traitement et remet à True à la fin

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
10 juil. 2007 à 22:44
Je ne sais pas sur quelle version d'Excel tu travailles, mais ceci devrait mieux fonctionner.
Je ne vois pas comment VB6 peut comprendre le mot Application (?) ou encore xlManual.
J'utiliserais plutôt le nom de l'application que tu as créé.

Est-ce que tu utilises Option Explicit ?
Est-ce que mets On Error Resume Next ?

Quoiqu'il en soit, voici comment j'écrirais ces lignes
    With appexcel
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
        .MaxChange = 0.001
    End With

Et tu remets les valeurs originales en quittant la procédure.
    xlCalculationAutomatic

MPi
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
10 juil. 2007 à 22:49
Salut MPi,

Je ne vois pas comment VB6 peut comprendre le mot Application (?)

Moi non plus, je me suis pris la tête avec qqun récemment à cause de ça, mais... apparemment ça fonctionne quand même
Va savoir pourquoi.. chez moi non !

Style le membre avait déclaré l'appli et le classeur XL, pis au lieu de faire xlBook.Range("A1"), il faisait directement Range("A1") et c'était pris en compte !!

Encore un mystère de Cro$oft

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
10 juil. 2007 à 23:06
Application.machinchouette quand on est dans Excel
et
nom_appli_ouverte.machinchouette quand on "pilote" depuis VB6


Je crois...
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
11 juil. 2007 à 03:09
Salut Mortalino et JMF,
Effectivement, chez moi, Range("A1") est reconnu sans même devoir spécifier quelqu'objet que ce soit... par contre, le mot Application, je n'aurais pas cru... mais après test, ça fonctionne également... allez donc comprendre... !

C'est comme si VB et Excel ne faisaient qu'un.
Ce n'est pas seulement le mot Application qui fonctionne, mais il y a bien les propriétés et méthodes qui apparaissent après écriture du point... la symbiose quoi 

Par contre, pour le xlManual, je ne sais pas trop... peut-être que ça fonctionne sur une autre version (?)

Bonne nuit

MPi
0
rsbill Messages postés 22 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 22 août 2007
12 juil. 2007 à 18:41
Effectivement en mettant  Application.ScreenUpdating = False au début je vais beaucoup plus vite! 2min par transfert au lieu de 30min.

Merci à tous

PS: Pour info je bosse sur VB5! Je suis bloqué dans une dimension parallèle!

RS Bill
0
Rejoignez-nous