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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Accélerer l'exécution de mon programme en VBA

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Accélerer l'exécution de mon programme en VBA

n°2368227
valerypeti​t
mode initiative
Posté le 17-11-2020 à 16:48:25  profilanswer
 

Bonjour,
 
Je pensais avoir optimisé mon programme en l'écrivant comme ci-dessous, mais j'ai quelques longueur dans l’exécution (24 lignes traités lors de mon essai).
on est pourtant sur quelque chose de relativement Basic...
 
Je tiens à préciser que je voudrais conserver cette séparation dans le traitement des colonnes qui me permettra de faire évoluer plus facilement ma macro par la suite.
 

Code :
  1. 'Option Explicit
  2. Sub Remplir_Tableau()
  3. Dim sH As Worksheet
  4. Dim Derligne As Long, i As Long
  5. Dim tmp
  6.     Application.ScreenUpdating = False
  7.     Set sH = ActiveSheet
  8.     With sH
  9.         Derligne = .Range("K" & Rows.Count).End(xlUp).Row
  10.         For i = 6 To Derligne
  11.        
  12. .Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'Catégorie
  13. .Cells(6, "B" ).Copy .Cells(i + 1, "B" ) 'Priorité
  14. .Cells(6, "C" ).Copy .Cells(i + 1, "C" ) 'Type Adresse
  15. .Cells(6, "D" ).Copy .Cells(i + 1, "D" ) 'Nom_API
  16. '.Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'Type_Variable
  17. '.Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'Index (Lecture)
  18. '.Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'Format donnée (Lecture)
  19. .Cells(6, "I" ).Copy .Cells(i + 1, "I" ) 'Condition
  20. '.Cells(6, "A" ).Copy .Cells(i + 1, "A" ) 'N°Def
  21. .Cells(6, "O" ).Copy .Cells(i + 1, "O" ) 'Police
  22. .Cells(6, "P" ).Copy .Cells(i + 1, "P" ) 'Couleur
  23.   Next
  24. End With
  25. End Sub


 
Je ne vois pas trop quoi faire d'autre....
Merci à vous pour vos conseil ;-)
 
Valery


---------------
Il y a deux choses d'infini au monde : l'univers et la bêtise humaine... mais pour l'univers j'en suis pas très sûr
mood
Publicité
Posté le 17-11-2020 à 16:48:25  profilanswer
 

n°2368272
MaybeEijOr​Not
but someone at least
Posté le 17-11-2020 à 21:15:44  profilanswer
 

Bonjour,

 

Pas expert en VBA et ça fait longtemps que je n'en ai pas fait mais ton écriture de .Cells avec les lettres de colonnes me choque, alors certainement que ça fonctionne mais normalement les colonnes sont numérotées et commencent à l'indice 0.
Sinon Pourquoi ne pas copier par colonne plutôt que par ligne ? Cela devrait être plus rapide.

 
Code :
  1. finColonne = .range(Cells(5,i)).End(xlDown).row
  2. colonneSource = .range(Cells(5,i), Cells(finColonne,i))
  3. colonneDest = .range(Cells(6,i), Cells(finColonne + 1,i))
 

Tu incrémentes tes colonnes ou tu les écries en dur, tu copies la colonne source dans la colonne de destination.


Message édité par MaybeEijOrNot le 17-11-2020 à 21:16:52

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2368359
valerypeti​t
mode initiative
Posté le 18-11-2020 à 13:51:45  profilanswer
 

Bonjour MaybeEijOrNot
 
En fait dans les évolution futures de ma macro, je devrais manipuler et modifier des valeurs, du coup copier par ligne est pour moi plus simple je pense.


---------------
Il y a deux choses d'infini au monde : l'univers et la bêtise humaine... mais pour l'univers j'en suis pas très sûr
n°2368360
vylkor
Posté le 18-11-2020 à 14:08:20  profilanswer
 

Je suis novice également, mais utiliser par exemple :

Code :
  1. .Cells(i + 1, "A" ).Value = .Cells(6, "A" ).Value  'Catégorie


 
Ne serait pas plus leger niveau ressources?

n°2368393
MaybeEijOr​Not
but someone at least
Posté le 18-11-2020 à 18:20:49  profilanswer
 

valerypetit a écrit :

Bonjour MaybeEijOrNot
 
En fait dans les évolution futures de ma macro, je devrais manipuler et modifier des valeurs, du coup copier par ligne est pour moi plus simple je pense.


Peut-être que gérer le problème par ligne sera plus simple, mais la raison n'est pas celle de manipuler et modifier des valeurs, il n'y a aucun lien, tu peux tout autant manipuler et modifier des valeurs par colonne...
 
Cela serait plus simple si tu nous disais ce que tu veux faire. ;)  
 
Comme dit, si seules les valeurs t'intéressent et que tu veux les faire évoluer alors passe par .value.
Le copier/coller est plus efficace sur des plages, mais sur des cellules individuelles il va récupérer toutes les propriétés alors que tu n'en as pas forcément besoin.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2368688
patrice337​40
Avec la réponse, c'est facile.
Posté le 20-11-2020 à 00:40:46  profilanswer
 

Bonjour,
 
Pas besoin de boucle, copier formats et valeurs  :

Code :
  1. Option Explicit
  2. Sub Remplir_Tableau()
  3. Dim dL As Long
  4.   Application.ScreenUpdating = False
  5.   With ActiveSheet
  6.     dL = .Range("K" & Rows.Count).End(xlUp).Row
  7.     .Range("A6:D6" ).Copy .Range("A7:D" & dL)
  8.     .Range("I6" ).Copy .Range("I6:I" & dL)
  9.     .Range("O6:P6" ).Copy .Range("O7:P" & dL)
  10.   End With
  11. End Sub


 
Et uniquement les valeurs (beaucoup plus rapide) :

Code :
  1. Option Explicit
  2. Sub Remplir_Tableau()
  3. Dim dL As Long
  4.   Application.ScreenUpdating = False
  5.   With ActiveSheet
  6.     dL = .Range("K" & Rows.Count).End(xlUp).Row
  7.     .Range("A7:D" & dL).Value = .Range("A6:D6" ).Value
  8.     .Range("I7:I" & dL).Value = .Range("I6" ).Value
  9.     .Range("O7:P" & dL).Value = .Range("O6:P6" ).Value
  10.   End With
  11. End Sub



Message édité par patrice33740 le 20-11-2020 à 00:52:40

---------------
Cordialement, Patrice

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

  Accélerer l'exécution de mon programme en VBA

 

Sujets relatifs
Programme tri à bulle C++Perte des données copiées lors du lancement d'une macro VBA/Excel
insertion colonne et codage VBAAutomatiser programme fenêtré (Tcl)
VBA Word signetsVBA PPT - Sélectionner plusieurs Shape pour appliquer une animation
Anomalie d'un programme réseauquel langage pour un programme ?
VBA TCD supprimer une annéeExécution OK sous Eclipse, mais impossible en ligne de commande
Plus de sujets relatifs à : Accélerer l'exécution de mon programme en VBA


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR