Lenteur Excel 2010

masena Messages postés 18 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 23 décembre 2010 - 5 nov. 2010 à 14:08
soleusterm Messages postés 3 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 8 novembre 2010 - 8 nov. 2010 à 10:38
Bonjour,

j'ai réaliser un programme sous Visual basic 2008 express utilisant excel. A la base ce logiciel fonctionnait avec Excel 2003, il permet de copier certaines données dans le fichier excel. Pour ce faire, j'utilise une boucle For qui me remplit chaque cellule. J'ai au total 2000 lignes et 9 colonnes à remplir.

Sous Excel 2003 cette opération était relativement rapide (moins d'une minute). Lors de mon passage sur Excel 2010 cette opération prend un temps monstrueux (environ 10 minutes).

Quelqu'un a t-il déjà rencontré ce problème ? Dois je reprendre la façon d'écrire mon code ? Y a t-il un réglage spécifique dans excel 2010 ?

5 réponses

soleusterm Messages postés 3 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 8 novembre 2010
6 nov. 2010 à 17:42
Il est possible que ton code exaime toutes les lignes ... d'ou la lenteur due au nombre de lignes d'excel plus important.
Révises ton code. Dans un cas similaire, j'ai procédé ainsi:
J'ai listé la dernier ligne et à partir de celle ci je suis remonté.
Ma macro s'éxécute en moins de 25 secondes alors qu'avant elle mettait 5mn pour environ 2500 entrées.

Soleusterm
0
masena Messages postés 18 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 23 décembre 2010
7 nov. 2010 à 18:31
C'est exactement ca mon code examine toutes les cellules de chaque lignes.

je copie en effet mes donnes de la facon suivante :


For k = 0 To nblignesresult - 1
ExcelFeuillea1.Cells.Item(k + 2, 15) = Val(C1(k, 1))
ExcelFeuillea1.Cells.Item(k + 2, 16) = Val(C1(k, 2))
ExcelFeuillea1.Cells.Item(k + 2, 17) = Val(C1(k, 3))
ExcelFeuillea1.Cells.Item(k + 2, 18) = Val(C1(k, 4))
ExcelFeuillea1.Cells.Item(k + 2, 19) = Val(C1(k, 5))
ExcelFeuillea1.Cells.Item(k + 2, 20) = Val(C1(k, 6))
ExcelFeuillea1.Cells.Item(k + 2, 21) = Val(C1(k, 7))
ExcelFeuillea1.Cells.Item(k + 2, 22) = Val(C1(k, 8))
ExcelFeuillea1.Cells.Item(k + 2, 23) = Val(C1(k, 9))
ExcelFeuillea1.Cells.Item(k + 2, 24) = Val(C1(k, 10))
Next

Comment fait tu pour accélérer ce code ?
Merci
0
soleusterm Messages postés 3 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 8 novembre 2010
8 nov. 2010 à 09:06
En premier liue, tu vas devoir introduite une commande range du genre:

Range("A1").End(xlDown).Offset(1, 0).Select

Celle ci va te permettre d'identifier la première cellule vide en bas de ta liste.
Ensuite tu vas réécrire tes codes mais en partant de cette ligne et en remontant jusqu'au haut de page.

Il existe surement d'autres méthodes (que je ne connais pas,mais je suis aussi preneur) mais je pense que celle-ci suffit à accélérer l'éxécution de ta macro.

En revanche je me pose une question.
As tu programmé Excel pour qu'il utilise lors de ses calculs tous les processeurs de ton Pc?
Ceci peut aussi améliorer le temps de réponse de facon non négligeable.

DAns le cas contraire, vas dans Fichier / Options / Options avancées/ descends jusqu'a formules et coche:
Permet ds calculs multithread
ensuite coche la case: Utiliser tous les processeurs de cet ordinateur.
Soleusterm.
0
masena Messages postés 18 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 23 décembre 2010
8 nov. 2010 à 10:27
J'ai une autre méthode soufflée par Nhenry qui fonctionne vraiment bien pour mon souci :
[i]
[i]ExcelFeuillea1.Range("A1:Z26")=MonTableau

Avec :
Dim Monableau() as Variant

Redim MonTableau(0 to 25,0 To 25)

Et après avoir remplis ton tableau comme désiré. /i
/i

Ca marche nikel avec ca.
0

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

Posez votre question
soleusterm Messages postés 3 Date d'inscription mercredi 15 juillet 2009 Statut Membre Dernière intervention 8 novembre 2010
8 nov. 2010 à 10:38
Oups! je croyais que les lignes de codes étaint toutes présentes dans ton message.
Mais oui, bravo, sur le coup bravo à Nhenry.
Cette solution est super.
0
Rejoignez-nous