Optimiser son Code VBA
Bonjour à la communauté Exceller-Practicien,
Depuis quelques semaines, j'ai commencé à travaillé sur Excel et notamment la création des macros.
Mais je me confronte à un problème qui est d'optimiser mon code pour qu'il soit un peu plus court.
Code s’exécute bien et réaliser la tache que je lui demande mais le code me semble long et non optimal. Et cela génère des problèmes de lenteur.
Serait-ce possible de m'apporter un coup de main? Je suis assez novice sous Excel et les macro.
Comment pourrais faire pour joindre mon code?
Merci à vous pour vos réponse
Sub AjouterFeuille()
' Delete Sheets
Sheets(Array("Output Summary", "Exports Summary", "GVA Summary", "Employment Summary")).Select
ActiveWindow.SelectedSheets.Delete
' ///////////////////////////////////////ADDING SHEETS\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Static I As Long ' Une variable statique garde sa valeur à chaque appel
Dim Sheet As Worksheet ' Une référence à la feuille nouvellement créée
Sheets.Add.Move After:=Sheets(Sheets.Count) ' La référence est posée
Worksheets(Sheets.Count).Name = "Output Summary" ' Le nom d'onglet de la nouvelle feuille est posé."
Static II As Long
Dim SheetII As Worksheet
Sheets.Add.Move After:=Sheets(Sheets.Count)
Worksheets(Sheets.Count).Name = "Exports Summary"
'-----------------------------------------------------------------------------------------------------------------
' ///////////////////////////////////////OUTPUT SHEET\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
' Copyformat from outputsheet
Sheets("OUTPUT").Select
Range("C1:D308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ActiveSheet.Paste
' modifier la taille et le format des cellules
Sheets("Output Summary").Select
Application.CutCopyMode = False
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Sheets("Output Summary").Select
Range("A1:B7").Select
Range("A7").Activate
With Selection.Font
.ColorIndex = xlAutomatic
.TintAndShade = 0
End With
Sheets("Output Summary").Select
Range("A8:B8").Select
ActiveWindow.SmallScroll Down:=279
Range("A8:B308").Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Sheets("Output Summary").Select
Rows("36:36").RowHeight = 19.5
Rows("43:43").RowHeight = 19.5
Rows("50:50").RowHeight = 21.75
Rows("57:57").RowHeight = 22.5
Rows("64:64").RowHeight = 18.75
Rows("71:71").RowHeight = 21
Rows("71:71").RowHeight = 26.25
Rows("78:78").RowHeight = 22.5
Rows("78:78").RowHeight = 28.5
Rows("85:85").RowHeight = 26.25
Rows("92:92").RowHeight = 26.25
Rows("99:99").RowHeight = 23.25
Rows("106:106").RowHeight = 27.75
Rows("113:113").RowHeight = 26.25
Rows("120:120").RowHeight = 27.75
Rows("127:127").RowHeight = 24
Rows("134:134").RowHeight = 24
Rows("141:141").RowHeight = 25.5
Rows("155:155").RowHeight = 25.5
Rows("162:162").RowHeight = 24.75
Rows("190:190").RowHeight = 22.5
Rows("218:218").RowHeight = 24.75
Rows("225:225").RowHeight = 27.75
Rows("232:232").RowHeight = 22.5
Rows("239:239").RowHeight = 23.25
Rows("246:246").RowHeight = 27.75
Rows("253:253").RowHeight = 21.75
Rows("260:260").RowHeight = 21.75
Rows("274:274").RowHeight = 24
Rows("295:295").RowHeight = 27
Rows("302:302").RowHeight = 26
' Ecrire les differentes colonnes avec les titres
Sheets("Output Summary").Select
Range("C5").Select
ActiveCell.FormulaR1C1 = "CEPA1 - 9"
Range("D5").Select
ActiveCell.FormulaR1C1 = "TOT_CEPA"
Range("E5").Select
ActiveCell.FormulaR1C1 = "CEPA1-9<=TOT_CEPA"
Range("F5").Select
ActiveCell.FormulaR1C1 = "CEPA112_122"
Range("G5").Select
ActiveCell.FormulaR1C1 = "CEPA1"
Range("H5").Select
ActiveCell.FormulaR1C1 = "CEPA112_122<=CEPA1"
Range("I5").Select
ActiveCell.FormulaR1C1 = "CEPA7+...9"
Range("J5").Select
ActiveCell.FormulaR1C1 = "CEPA7-9"
Range("K5").Select
ActiveCell.FormulaR1C1 = "CEPA7+...9<=CEPA7-9"
Range("L5").Select
ActiveCell.FormulaR1C1 = "CEPA812"
Range("M5").Select
ActiveCell.FormulaR1C1 = "CEPA8"
Range("N5").Select
ActiveCell.FormulaR1C1 = "CEPA812<=CEPA8"
Range("O5").Select
ActiveCell.FormulaR1C1 = "CReMA10+...16"
Range("P5").Select
ActiveCell.FormulaR1C1 = "TOT_CReMA"
Range("Q5").Select
ActiveCell.FormulaR1C1 = "CReMA10+...16<=TOT_CReMA"
Range("R5").Select
ActiveCell.FormulaR1C1 = "CReMA11A+11B"
Range("S5").Select
ActiveCell.FormulaR1C1 = "CReMA11"
Range("T5").Select
ActiveCell.FormulaR1C1 = "CReMA11A+11B<=CReMA11"
Range("U5").Select
ActiveCell.FormulaR1C1 = "CReMA13A+13B+13C"
Range("V5").Select
ActiveCell.FormulaR1C1 = "CReMA13"
Range("W5").Select
ActiveCell.FormulaR1C1 = "CReMA13A+13B+13C<=CReMA13"
Range("X5").Select
ActiveCell.FormulaR1C1 = "CReMA12+15+16"
Range("Y5").Select
ActiveCell.FormulaR1C1 = "CREMA12_15_16"
Range("Z5").Select
ActiveCell.FormulaR1C1 = "CReMA12+15+16<=CREMA12_15_16"
Range("AA5").Select
ActiveCell.FormulaR1C1 = "CReMA15A"
Range("AB5").Select
ActiveCell.FormulaR1C1 = "CReMA15"
Range("AC5").Select
ActiveCell.FormulaR1C1 = "CReMA15A<=CReMA15"
Range("AD5").Select
ActiveCell.FormulaR1C1 = "TOT_CEPA+TOT_CReMA"
Range("AE5").Select
ActiveCell.FormulaR1C1 = "TOTAL"
Range("AF5").Select
ActiveCell.FormulaR1C1 = "TOT_CEPA+TOT_CReMA<=TOTAL"
' la police
Sheets("Output Summary").Select
Columns("C:C").Select
Columns("C:AF").Select
Selection.Font.Size = 9
Selection.Font.Size = 8
Range("C5").Select
Range("C5:AF5").Select
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Selection.Font.Bold = True
' Auto Fit Column and Rows OUTPUT
Sheets("Output Summary").Select
Columns("AF:AF").EntireColumn.AutoFit
Columns("AE:AE").EntireColumn.AutoFit
Columns("AD:AD").EntireColumn.AutoFit
Columns("AC:AC").EntireColumn.AutoFit
Columns("AB:AB").EntireColumn.AutoFit
Columns("AA:AA").EntireColumn.AutoFit
Columns("Z:Z").EntireColumn.AutoFit
Columns("Y:Y").EntireColumn.AutoFit
Columns("X:X").EntireColumn.AutoFit
Columns("W:W").EntireColumn.AutoFit
Columns("V:V").EntireColumn.AutoFit
Columns("U:U").EntireColumn.AutoFit
Columns("T:T").EntireColumn.AutoFit
Columns("S:S").EntireColumn.AutoFit
Columns("R:R").EntireColumn.AutoFit
Columns("Q:Q").EntireColumn.AutoFit
Columns("P:P").EntireColumn.AutoFit
Columns("O:O").EntireColumn.AutoFit
Columns("N:N").EntireColumn.AutoFit
Columns("M:M").EntireColumn.AutoFit
Columns("L:L").EntireColumn.AutoFit
Columns("K:K").EntireColumn.AutoFit
Columns("J:J").EntireColumn.AutoFit
Columns("I:I").EntireColumn.AutoFit
Columns("H:H").EntireColumn.AutoFit
Columns("G:G").EntireColumn.AutoFit
Columns("F:F").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
' copy of CEPA & CReMA From OUTPUT
Sheets("OUTPUT").Select
Range("AC8:AC308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("D8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("G8:G308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("F8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("E8:E308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("G8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("S8:S308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("J8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("Y8:Y308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("L8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("W8:W308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("M8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("BG8:BG308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("P8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("AG8:AG308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("S8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("AM8:AM308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("V8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("AW8:AW308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("Y8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("BC8:BC308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("AA8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("BA8:BA308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("AB8").Select
ActiveSheet.Paste Link:=True
Sheets("OUTPUT").Select
Range("BI8:BI308").Select
Selection.Copy
Sheets("Output Summary").Select
Range("AE8").Select
ActiveSheet.Paste Link:=True
'addition values
'CEPA1-9
Sheets("Output Summary").Select
Range("C8").Select
ActiveCell.Formula = "=SUM(OUTPUT!E8:Q8,OUTPUT!U8,OUTPUT!W8,OUTPUT!AA8)"
Sheets("Output Summary").Select
Range("C8").Select
Selection.AutoFill Destination:=Range("C8:C308"), Type:=xlFillDefault
Range("C8:C308").Select
'CEPA7+8+9
Sheets("Output Summary").Select
Range("I8").Select
ActiveCell.Formula = "=SUM(OUTPUT!U8,OUTPUT!W8,OUTPUT!AA8)"
Sheets("Output Summary").Select
Range("I8").Select
Selection.AutoFill Destination:=Range("I8:I308"), Type:=xlFillDefault
Range("I8:I308").Select
'CReMA10+..16
Sheets("Output Summary").Select
Range("O8").Select
ActiveCell.Formula = "=SUM(OUTPUT!AE8,OUTPUT!AG8,OUTPUT!AY8,OUTPUT!AM8,OUTPUT!AU8,OUTPUT!BA8,OUTPUT!BE8)"
Sheets("Output Summary").Select
Range("O8").Select
Selection.AutoFill Destination:=Range("O8:O308"), Type:=xlFillDefault
Range("O8:O308").Select
'CReMA11A+11B
Sheets("Output Summary").Select
Range("R8").Select
ActiveCell.Formula = "=SUM(OUTPUT!AI8,OUTPUT!AK8)"
Sheets("Output Summary").Select
Range("R8").Select
Selection.AutoFill Destination:=Range("R8:R308"), Type:=xlFillDefault
Range("R8:R308").Select
'CReMA13A+13B+13C
Sheets("Output Summary").Select
Range("U8").Select
ActiveCell.Formula = "=SUM(OUTPUT!AO8,OUTPUT!AQ8,OUTPUT!AS8)"
Sheets("Output Summary").Select
Range("U8").Select
Selection.AutoFill Destination:=Range("U8:U308"), Type:=xlFillDefault
Range("U8:U308").Select
'CReMA12+15+16
Sheets("Output Summary").Select
Range("X8").Select
ActiveCell.Formula = "=SUM(OUTPUT!AY8,OUTPUT!BA8,OUTPUT!BE8)"
Sheets("Output Summary").Select
Range("X8").Select
Selection.AutoFill Destination:=Range("X8:X308"), Type:=xlFillDefault
Range("X8:X308").Select
'TOT_CEPA+TOT_CReMA
Sheets("Output Summary").Select
Range("AD8").Select
ActiveCell.Formula = "=SUM(OUTPUT!AC8,OUTPUT!BG8)"
Sheets("Output Summary").Select
Range("AD8").Select
Selection.AutoFill Destination:=Range("AD8:AD308"), Type:=xlFillDefault
Range("AD8:AD308").Select
' Comparating Values
'CEPA1-9<=TOT_CEPA
Sheets("Output Summary").Select
Range("E8").Select
ActiveCell.Formula = "=IF(C8<=D8,""OK"",""WARNING"")"
Range("E8").Select
Selection.AutoFill Destination:=Range("E8:E308"), Type:=xlFillDefault
Range("E8:E308").Select
'CEPA112_122<=CEPA1
Sheets("Output Summary").Select
Range("H8").Select
ActiveCell.Formula = "=IF(F8<=G8,""OK"",""WARNING"")"
Range("H8").Select
Selection.AutoFill Destination:=Range("H8:H308"), Type:=xlFillDefault
Range("H8:H308").Select
'CEPA7+...0<=CEPA7-9
Sheets("Output Summary").Select
Range("K8").Select
ActiveCell.Formula = "=IF(I8<=J8,""OK"",""WARNING"")"
Range("K8").Select
Selection.AutoFill Destination:=Range("K8:K308"), Type:=xlFillDefault
Range("K8:K308").Select
'CEPA812<=CEPA8
Sheets("Output Summary").Select
Range("N8").Select
ActiveCell.Formula = "=IF(L8<=M8,""OK"",""WARNING"")"
Range("N8").Select
Selection.AutoFill Destination:=Range("N8:N308"), Type:=xlFillDefault
Range("N8:N308").Select
'CReMA10+..16<=TOT_CReMA
Sheets("Output Summary").Select
Range("Q8").Select
ActiveCell.Formula = "=IF(O8<=P8,""OK"",""WARNING"")"
Range("Q8").Select
Selection.AutoFill Destination:=Range("Q8:Q308"), Type:=xlFillDefault
Range("Q8:Q308").Select
'CReMA11A+11B<=CReMA11
Sheets("Output Summary").Select
Range("T8").Select
ActiveCell.Formula = "=IF(R8<=S8,""OK"",""WARNING"")"
Range("T8").Select
Selection.AutoFill Destination:=Range("T8:T308"), Type:=xlFillDefault
Range("T8:T308").Select
'CReMA13A+13B+13C<=CReMA13
Sheets("Output Summary").Select
Range("W8").Select
ActiveCell.Formula = "=IF(U8<=V8,""OK"",""WARNING"")"
Range("W8").Select
Selection.AutoFill Destination:=Range("W8:W308"), Type:=xlFillDefault
Range("W8:W308").Select
'CReMA12+15+16<=CReMA12_15_16
Sheets("Output Summary").Select
Range("Z8").Select
ActiveCell.Formula = "=IF(X8<=Y8,""OK"",""WARNING"")"
Range("Z8").Select
Selection.AutoFill Destination:=Range("Z8:Z308"), Type:=xlFillDefault
Range("Z8:Z308").Select
'CReMA15A<=CReMA15
Sheets("Output Summary").Select
Range("AC8").Select
ActiveCell.Formula = "=IF(AA8<=AB8,""OK"",""WARNING"")"
Range("AC8").Select
Selection.AutoFill Destination:=Range("AC8:AC308"), Type:=xlFillDefault
Range("AC8:AC308").Select
'TOT_CEPA+TOT_CReMA<=TOTAL
Sheets("Output Summary").Select
Range("AF8").Select
ActiveCell.Formula = "=IF(AD8<=AE8,""OK"",""WARNING"")"
Range("AF8").Select
Selection.AutoFill Destination:=Range("AF8:AF308"), Type:=xlFillDefault
Range("AF8:AF308").Select
' regrouping columns
Sheets("Output Summary").Select
Columns("C:D").Select
Selection.Columns.Group
Columns("F:G").Select
Selection.Columns.Group
Columns("I:J").Select
Selection.Columns.Group
Columns("L:M").Select
Selection.Columns.Group
Columns("O:P").Select
Selection.Columns.Group
Columns("R:S").Select
Selection.Columns.Group
Columns("U:V").Select
Selection.Columns.Group
Columns("X:Y").Select
Selection.Columns.Group
Bonjour Abakisi, bonjour le forum,
J'ai à peine entrevu ton code mais je peux déjà te conseiller sur quelques points :
• Évite autant que tu le peux les Select inutiles qui ne font que ralentir l'exécution du code.
Si tu crées des variables pour tes onglets tu gagnes par la suite un temps fou. Par exemple ce bout de code :
Sheets("Output Summary").Select
Range("A8:B8").Select
ActiveWindow.SmallScroll Down:=279
Range("A8:B308").Select
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
devient :
Dim OS As Worksheet
Set OS = Worksheets("Output Summary")
with OD.Range(A8:B308").Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
C'est toi évidemment qui choisi le nom de tes variables...
• Supprime tous les Scroll qui sont l'enregistrement des mouvements de la roulette de ta souris mais n'apportent rien à l'exécution du code.
Range("J5").Select
ActiveCell.FormulaR1C1 = "CEPA7-9"
devient (toujours avec la variable onglet OS) :
OS.Range("J5").Value = "CEPA7-9"
• une seule ligne pour Autofit :
OS.columns("AA:AF").Autofit
• Pour un copier/coller utilise la syntaxe : Source.Copy Destination. Soit Onglet_source/Plage_source.Copy onglet_destination/Cellule_destination. Sans Select !
Dim O As Worksheet
Dim OS as Worksheet
Set O = Worksheets("Output")
Set OS = Worksheets("Output Summary")
O.Range("AC8:AC308").Copy OS.Range("F8")
Bonjour ThauThème,
J'y vois déjà beaucoup plus claire, tu viens de me donner un sacré coup de main. Un grand merci à toi.
Je revois tout mon code et je te tiens au courant si cela est fonctionnel.
Très instructif ton post.
Merci encore.
A plus,
Abakisi.