Remplissage de cellules très long en temps [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 20-01-2009 à 09:12:18
Il faut affecter tes valeurs d'un coup à toutes tes cellules.
Sélectionne une plage de cellules et utilise la syntaxe :
plage_cellules.value = tableau()
Ce sujet a déjà été discuté sur le forum, tu devrais pouvoir trouver des exemples.
Marsh Posté le 20-01-2009 à 09:17:08
fannypoulain a écrit : Bonjour, |
Tu ne fais que lire ton fichier et remplir excel ou il y a d'autres traitements ?
Parce que c'est assez énorme 10s pour 100 lignes...
Marsh Posté le 20-01-2009 à 09:51:04
Bonjour,
Merci pour votre aide.
C'est l'opération de remplissage des cellules qui prend 10 secondes (environ).
Marsh Posté le 20-01-2009 à 09:54:58
On pourrait voir ton code ?
Je suis pas un pro du vba sous excel mais ça me semble vraiment exagéré comme temps de traitement.
Marsh Posté le 20-01-2009 à 09:55:30
Voici mon code :
For Lig = 1 To Nbrelig
Champs.Cells(Lig, 2) = Tableau(Lig, 2) ' <--- très long
Next Lig
Marsh Posté le 20-01-2009 à 09:56:58
J'ai chronométré, ça met bien 10 sec pour traiter une centaine de lignes !
Marsh Posté le 20-01-2009 à 10:05:11
C'est bon, c'est résolu grâce à la remarque de tegu !
J'ai fait : Champs.Value = Tableau
et c'est immédiat !
Merci beaucoup tegu.
Marsh Posté le 20-01-2009 à 10:07:07
Comment tu as isolé que ça vient de là ?
En faisant ça :
Code :
|
Ca se rempli instantanément chez moi.
Tu n'as pas un pc qui est très lent par hasard ?
Edit : bon ok tant pis.
Marsh Posté le 20-01-2009 à 10:20:25
Bonjour,
A mettre eb début de macro
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
A mettre en fin de macro
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = ne met pas à jour l'écran à chaque changement dans une cellule
Application.Calculation = ne recalcule pas tout à chaque changement dans une cellule
Je pense que ça va réduire le temps
Marsh Posté le 20-01-2009 à 10:53:00
Application.Calculation résoud aussi le problème !
Je vais prendre cette solution là. Comme ça je n'ai pas à modifier le code.
Merci pyrof !
Marsh Posté le 21-01-2009 à 19:44:56
Si tu utilises les Offset c'est beaucoup plus rapide....
Exemple :
sheets("sheet1" ).select
set rng=sheets("sheet1" ).range("A1" )
i=0
j=0
rng.offset(i,j).select ' optionnel c'est juste pour voir ou tu pointe
Var1=rng.offset(i,j).value ' je prend la valeur en A1
Var2=rng.offset(i,j+1).value ' Je prend la valeur en B1
rng.offset(i,J+3)=Var1+Var2 ' Je met le résultat en C1
...etc... et tu te prends moins la tête !
Marsh Posté le 21-01-2009 à 19:46:17
Oups !
la derniere ligne
rng.offset(i,J+3).value=Var1+Var2 ' Je met le résultat en C3
Marsh Posté le 19-01-2009 à 20:05:43
Bonjour,
Dans une Macro Excel, j'ai besoin de remplir une colonne dans une boucle.
Mais l'instruction Range.Cells (i,2).Value = Valeur (i,2) met beaucoup de temps.
(valeur est un tableau interne)
Je mets 10 secondes à traiter les 100 lignes de mon fichier de test, alors que je pourrais en avoir des milliers en Prod.
Comment faire pour que cela soit plus rapide ?