Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1338 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Remplissage de cellules très long en temps

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Remplissage de cellules très long en temps

n°1840191
fannypoula​in
Posté le 19-01-2009 à 20:05:43  profilanswer
 

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 ?

mood
Publicité
Posté le 19-01-2009 à 20:05:43  profilanswer
 

n°1840245
fannypoula​in
Posté le 19-01-2009 à 22:45:23  profilanswer
 

Pas d'aide ?

n°1840291
tegu
Posté le 20-01-2009 à 09:12:18  profilanswer
 

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.

n°1840293
LePhasme
Les Belges domineront le monde
Posté le 20-01-2009 à 09:17:08  profilanswer
 

fannypoulain a écrit :

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 ?


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...


---------------
Instagram - Mon PVT en Australie.
n°1840309
fannypoula​in
Posté le 20-01-2009 à 09:51:04  profilanswer
 

Bonjour,
 
Merci pour votre aide.
C'est l'opération de remplissage des cellules qui prend 10 secondes (environ).

n°1840312
LePhasme
Les Belges domineront le monde
Posté le 20-01-2009 à 09:54:58  profilanswer
 

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.


---------------
Instagram - Mon PVT en Australie.
n°1840314
fannypoula​in
Posté le 20-01-2009 à 09:55:30  profilanswer
 

Voici mon code :
 
For Lig = 1 To Nbrelig      
 
    Champs.Cells(Lig, 2) = Tableau(Lig, 2)         ' <--- très long
           
Next Lig

n°1840316
fannypoula​in
Posté le 20-01-2009 à 09:56:58  profilanswer
 

J'ai chronométré, ça met bien 10 sec pour traiter une centaine de lignes !

n°1840319
fannypoula​in
Posté le 20-01-2009 à 10:05:11  profilanswer
 

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. :)

n°1840320
LePhasme
Les Belges domineront le monde
Posté le 20-01-2009 à 10:07:07  profilanswer
 

Comment tu as isolé que ça vient de là ?
En faisant ça :

Code :
  1. Sub test()
  2. Dim VarTab(1 To 100, 1 To 3) As Integer
  3. Dim nb As Integer
  4. Dim i As Integer
  5. nb = 100
  6. For i = 1 To nb
  7.    VarTab(i, 2) = i
  8. Next i
  9.  
  10.  
  11. For i = 1 To nb
  12.    ActiveSheet.Cells(i, 2) = CInt(VarTab(i, 2))
  13. Next i
  14. End Sub


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.


Message édité par LePhasme le 20-01-2009 à 11:02:40

---------------
Instagram - Mon PVT en Australie.
mood
Publicité
Posté le 20-01-2009 à 10:07:07  profilanswer
 

n°1840321
pyrof
Posté le 20-01-2009 à 10:20:25  profilanswer
 

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

n°1840334
fannypoula​in
Posté le 20-01-2009 à 10:53:00  profilanswer
 

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 !


Message édité par fannypoulain le 20-01-2009 à 11:22:16
n°1841283
Fred_l
Posté le 21-01-2009 à 19:44:56  profilanswer
 

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 !
 

n°1841284
Fred_l
Posté le 21-01-2009 à 19:46:17  profilanswer
 

Oups !
 
la derniere ligne
 
rng.offset(i,J+3).value=Var1+Var2  ' Je met le résultat en C3
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Remplissage de cellules très long en temps

 

Sujets relatifs
programmer des dates sur VBA[ACCESS] Erreur de compilation requete VBA
Lister les différents champs d'un parametre d'une fonction. Possible ?Gestion de saut de page ACCESS/VBA
[VBA]Mettre à jour les liens autmatiquement lors de l'ouvertureCopier des cellules sous condition avec boucle
recaler Date selon conditions [VBA]idées de projet pour collégiens très jeunes [résolu]
[VBA] Mise à jour macro dans plusieurs fichiers...Récupérer texte Textbox dynamique en VBA
Plus de sujets relatifs à : [VBA] Remplissage de cellules très long en temps


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR