Zylott
Messages postés104Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention28 septembre 2006
-
22 juin 2006 à 14:44
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
25 juin 2006 à 22:08
Bjr,
j'ai une application vb6 qui exporte des données sous Excel.
Mes tableau sont volumineux et l'export prend parfois 20 min car j'affecte cellule par cellule les valeurs.
econs
Messages postés4030Date d'inscriptionmardi 13 mai 2003StatutMembreDernière intervention23 décembre 200824 22 juin 2006 à 14:54
Salut,
L'import dans Excel comme tu le fais prend beaucoup de temps. C'est normal.
Tu dois pouvoir gagner du temps en minimisant ta fenêtre Excel pendant l'opération (si ce n'est pas déjà fait).
Ensuite, il faudrait que l'on sache d'où proviennent tes données initiales. Peut-être ton algo n'est-il pas satisfaisant.
J'ai déjà fait ce genre d'import pour des ListView de plusieurs dizaines de milliers d'éléments dans Excel. J'ai fait pas mal de tests pour grapiller de précieuses minutes...
Par exemple, il ne faut pas sélectionner une cellule d'Excel, puis coller dans la sélection, mais faire Cells(i,j)="toto" comme tu le fais (on divise le temps d'exécution de beaucoup)...
Bref, avec ton code, on y verra sans doute plus clair.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 23 juin 2006 à 00:43
bonsoir,
Dans le même esprit, il me semble qu'il faut également désactiver le recalcul automatique pendant le transfert. Et le rétablir ensuite.
Pour voir si cette option agit (comme il me semble), il suffit de faire un petit test manuellement... c'est à dire aller sous Excel et dans option>options>Calcul> et choisir sur ordre...
Bien sur on peut aussi le programmer... A adapter à ton cas tiré de mon site :
'Désactive la mise à jour des recalculs
Application.Calculation = xlCalculationManual
'code modifiant les cellules
For x = 1 To 4000
ActiveSheet.Cells(x, 1) = x
Next x
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 23 juin 2006 à 22:58
Sans problème !! C'est pareil, je suis à la masse vu l'heure...
c'est juste que je suis utilisateur de VBA excel et voici un extrait de l'aide :
__________________________________________
Cette propriété a la valeur True si la mise à jour de l'écran est activée. Type de données Boolean en lecture-écriture.
Notes
Désactivez la mise à jour de l'écran pour accélérer l'exécution du code de votre macro. Vous ne pourrez suivre le déroulement de la macro mais en revanche celle-ci sera exécutée plus rapidement.
N'oubliez pas d'affecter de nouveau la valeur True à la propriété ScreenUpdating à la fin de la macro.
__________________________________________
Peut-être que depuis VB6 ça le fait pas !
@++
--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
IL suffit de mettre les lignes en REM pour vérifier les influences des options.
Optimisé par les deux options (ScreenUpdating et Calculation) j'ai environ un temps d'exécution de 1,4 s
Sans l'option Calculation (donc juste avec ScreenUpdating) : 2,1 secondes
Juste Calculation (sans ScreenUpdating) : 1,6 seconde
Sans aucune option : 1,9 seconde
On en conclut que ScreenUpdating n'empêche pas le recalcul automatique ! (il faut bien le mettre pour en profiter)
Notons aussi qu'ici ScreenUpdating a peu d'influence. Ceci s'explique facilement par le fait que le test n'emploi pas la propriété ".select" pour écrire dans les cellules...
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 25 juin 2006 à 22:08
Salut US,
Et bien merci pour ces test, et effectivement ça prouve que ton raisonnement est plus que bon. Pour ma part, jer n'utilisais que ScreenUpdating .. et bien maintenant j'emploierai les deux.
Merci pour les détails avec le Timer !
Bonne soirée à toi.
@++
--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !