Simplification / Optimisation programme VBA
Bonjour à tous,
J’ai besoin de votre aide concernant une macro. J’ai réussi tant bien que mal à réaliser une macro qui effectue toutes les tâches que je souhaitait en parcourant divers forums et en m’aidant malheureusement trop souvent de l’enregistreur de macro. :oops:
Néanmoins, dès que je lance ma macro sur des fichiers avec un nombre de lignes important, le temps d’exécution est trop long, étant donné que mon code est très loin d’être optimal. A titre d’exemple, mon code tourne pendant 6/7 mins sur 50 000 lignes.
A l’aide de l’exécution pas à pas, j’ai essayé de repérer les parties de mon code qui posaient problèmes.
Voici les principales parties que je souhaiterais optimiser :
Je me suis basé sur l’enregistreur de macro pour réaliser cette partie qui fonctionne comme je le souhaite mais qui prend trop de temps, je ne vois comment pas trop comment l’optimiser.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| 'Modification ordre colonnes
Columns("B:B").Cut
Columns("F:F").Insert Shift:=xlToRight
Columns("H:H").Cut
Columns("F:F").Insert Shift:=xlToRight
Columns("H:H").Cut
Columns("G:G").Insert Shift:=xlToRight
Columns("W:W").Cut
Columns("U:U").Insert Shift:=xlToRight
Columns("X:X").Cut
Columns("W:W").Insert Shift:=xlToRight
Columns("AA:AA").Cut
Columns("Z:Z").Insert Shift:=xlToRight |
J’ai également des difficultés concernant la mise en page. Il me semble que l’éxécution de ces parties de mon code prend du temps.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 'Mise en forme
Range("A1:AB1").Font.ColorIndex = 2
Range("A1:AB1").Interior.ColorIndex = 11
Range("A1:AB1").Font.Bold = True
Range("A1:AB1").RowHeight = 45
With Range("A1:AB1")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 'Centrer le texte + renvoyer à la ligne
With Range("A:AB")
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
With Range("A:AB")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With |
Voila, j’espère que vous pourrez me permettre de modifier ces parties afin d’avoir un code plus propre et surtout plus RAPIDE !
Je suis à votre disposition si vous avez besoin de précisions.
Je vous remercie d’avance,
Clément