rsbill
Messages postés22Date d'inscriptionlundi 13 février 2006StatutMembreDernière intervention22 août 2007
-
10 juil. 2007 à 18:36
rsbill
Messages postés22Date d'inscriptionlundi 13 février 2006StatutMembreDernière intervention22 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
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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).
rsbill
Messages postés22Date d'inscriptionlundi 13 février 2006StatutMembreDernière intervention22 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!
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 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...
rsbill
Messages postés22Date d'inscriptionlundi 13 février 2006StatutMembreDernière intervention22 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 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 !!
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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 (?)