Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1172 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°2381607
djinto
Posté le 12-04-2021 à 21:27:53  profilanswer
 
Voir ce message dans le sujet non filtré
 

valerypetit a écrit :

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


 
pour la vitesse, je sais pas si tu va aller sur un gain astronomique ( c''est en VBa Macro ),
dans la refactorisation de ton code, tu a plusieurs façons, sur des grands ensembles...
quand tu fais une boucle : tu FETCH sur un intervalle de données ( i++  jusqu'à dernier element )
donc tu FETCH :
avec ta boucle ... ( Méthode 1 de parcours d'ensemble )
avec .Range ( c'est un ensemble parcouru: fonction et macro pour un intervalle aussi )
avec .Cells( un autre ensemble PARAMètrable aussi, quelques approfondissements sur les paramètres de Cells( ... ) à utiliser)
 
tu vois qu'à l'utilisation de Vba, tu écrit ton code dans un style redondant ( je ferai pas mieux )
tu a oublié que tu peux copier ton Worksheet, et supprimer les colonnes excédentaires.
 
et c'est différent d'appliquer des styles, des couleurs, et de formatter des lignes et colonnes.
 
en 2 étapes :
* pas de modifications sur la base de travail / faire une copie de 'source' ...
isoles tes données nécessaires ( dans un autre document, ... c'est une copie ... )
formates selon les besoins ce nouveau fichier, worksheet, cette nouvelle colonne , lignes etc...)
 
la fonction que tu a fourni, fait beaucoup trop de choses finalement.
éclates les lignes en 4 ou 5 autres fonctions supplémentaires...
 
SYNTAXE for Vba :
 
for i = 0 to Maxelemnt step 1
 
 
next i
 
 
step : c'est le pas ( la valeur d'incrément )  ... 1 == i++
step 2.5 ... ça fait 0 // 2.5 // 5 // 7.5 ... ect ....
par défaut step = 1 // quand tu ne le mentionnes pas.
 
next // il conduit à l'itération suivante ..
tu a next for // next i // next
 
next i // il ajoute ton "step" à ton 'indexer' i ...
avec next i // tu a pas besoin de faire i++ ou i+ 1
 
tu utilise bien i+1 pour parcourir les cells() ,   tu peux imbriquer 2 boucles... pour une lecture simplifiée
car i parcours verticalement et horizontalement tes enregistrements.. ( c'est booléen ASTUCIEUX !!  mais dur à suivre)
 
for i = 0 to Max step 1
  for j= ''cellulle....'' to ''cellule...der'' step 1
    // ou tout autre chose...
 
     
 
  next j
next i
 
 
 


Message édité par djinto le 12-04-2021 à 21:49:24
mood
Publicité
Posté le 12-04-2021 à 21:27:53  profilanswer
 


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-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR