Optimisation macro

VTLE

XLDnaute Nouveau
Bonjour,

j'ai crée une macro qui teste chaque ligne d'un tableau afin d'en modifier certaine colonne en fonction du résultat de ce test. Ma macro fonctionne mais le problème c'est que mon tableau fait entre 30 000 et 50 000 ligne et ces tests prennent beaucoup de temps.


voici ma macro:

sub decal_col()

Set dbt = Range("F:F").Find("", lookat:=xlWhole)
ligne = dbt.Row 'renvoi la dernière ligne du tableau
colonne = dbt.Column

For i = 2 To ligne

If Range("B" & i).Value = "Direction Etudes" Then
Range("C" & i & ":E" & i).Select
Selection.Copy
Range("B" & i).Select
ActiveSheet.Paste
Else
End If
Next i
end sub

Ma question : Auriez un autre moyen, plus rapide, de faire cette macro ?

Cordialement,

VTLE
 

Pierrot93

XLDnaute Barbatruc
Re : Optimisation macro

Bonjour,

essaye comme ceci, non testé..;
Code:
Sub decal_col()
Application.ScreenUpdating = False
Set dbt = Range("F:F").Find("", lookat:=xlWhole)
ligne = dbt.Row 'renvoi la dernière ligne du tableau
colonne = dbt.Column
For i = 2 To ligne
    If Range("B" & i).Value = "Direction Etudes" Then Range("C" & i & ":E" & i).Copy Range("B" & i)
Next i
Application.ScreenUpdating = True
End Sub

bonne journée
@+
 

VTLE

XLDnaute Nouveau
Re : Optimisation macro

Re bonjour pierrot,

Eh bien je viens juste de tester ta macro et le résultat est excellent !!! Merci beaucoup

Pour info ma macro prenait 2min pour environ 25 0000 lignes à tester, et la tienne prend seulement 30 secondes !

je ne connaissais pas cette instruction pour copier coller, elle est très efficace.

Bonne journée et merci encore
 

tototiti2008

XLDnaute Barbatruc
Re : Optimisation macro

Bonjour VTLE, Bonjour Pierrot,

Pour info, je pense que le plus grand gain de temps est généré par

Code:
Application.ScreenUpdating = False
...
Application.ScreenUpdating = True

ça désactive l'affichage des actions à l'écran et donc ça accélère grandement les traitements
 

Pierrot93

XLDnaute Barbatruc
Re : Optimisation macro

Re, bonjour toto

à noter également que le fait de selectionner des cellules / feuilles prend également beaucoup de ressource.... En vba rarement utile....

bon après midi
@+
 
Dernière édition:

VTLE

XLDnaute Nouveau
Re : Optimisation macro

En effet j'ai testé sans les "Application.ScreenUpdating" et ca prend un peu plus de temps. La combinaison de cette instruction et celle qui évite de selectionner feuille/cellule offre un bon gain de temps!

Merci à tous en tout cas!
 

Statistiques des forums

Discussions
312 839
Messages
2 092 695
Membres
105 511
dernier inscrit
karimdauphins