XL 2010 Optimisation code + questions

safranien

XLDnaute Occasionnel
Bonjour à tous,

étant mauvais en VBA, je m'efforce de chercher des solutions à mes besoins en parcourant les forums. J'ai réussi à composer le code ci-dessous qui répond à mes attentes mais je me dis qu'il doit être possible de l'optimiser. Par exemple pour les parties où il y a Set MyRange que je répète plusieurs fois pour actualiser plusieurs cellules, je pensais pouvoir écrire qqch comme

Sheets("DJ PI").Select

Set MyRange = Range("H7","K7","R7","U7")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

pour ne pas avoir à écrire cette partie autant de fois qu'il y a de cellules à recalculer mais ça ne fonctionne pas et je n'arrive pas à trouver comment faire.

Mon fichier étant lourd et en calcul manuel, je viens d'abord actualiser le calcul de certaines cellules pour ne pas avoir à calculer tout le fichier (temps de calcul >1mn) et qui va conditionner la manière de faire tous les calculs par la suite. Désolé pour les pros, mon code va sûrement vous piquer les yeux....

J'ai également une autre question :

_ comme je disais précédemment, mon fichier étant assez lourd, il est en calcul manuel et j'ai désactivé le recalcul avant enregistrement. Le problème est que si j'ouvre mon fichier en ayant un autre d'ouvert qui lui est par défaut en option de calcul manuel et recalcul avant enregistrement, mon fichier va se caler sur cet autre fichier. J'aimerais réussir à forcer par VBA que ce fichier reste en tout cas en calcul manuel et sans recalcul avant enregistrement. J'ai sûrement mal cherché mais je n'ai pas trouvé de réponse.

Mon code :

Sub Actu2()


Dim addIn As COMAddIn
Dim automationObject As Object


Set addIn = Application.COMAddIns("PI DataLink")
Set automationObject = addIn.Object


Application.ScreenUpdating = False


Sheets("Fiche Site").Calculate

Sheets("TOP 10 PI").Select
Range("W5").Value = Range("T5").Value
Range("X5").Value = Range("U5").Value
Range("S2").Calculate
Range("U2").Calculate
Range("T5").Calculate
Range("T9").Calculate
Range("U9").Calculate

Sheets("DJ PI").Select
Range("C1").Calculate
Range("C2").Calculate
Range("C3").Calculate
Range("R4").Calculate
Range("R5").Calculate
Range("U4").Calculate
Range("U5").Calculate



Dim MyRange As Range


Sheets("TOP 10 PI").Select

Set MyRange = Range("U4")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("TOP 10 PI").Select
Range("U5").Calculate


If Range("W5").Value = Range("T5").Value And Range("X5").Value = Range("U5").Value Then

Sheets("DJ PI").Select

Set MyRange = Range("H7")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("DJ PI").Select

Set MyRange = Range("K7")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("DJ PI").Select

Set MyRange = Range("R7")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("DJ PI").Select

Set MyRange = Range("U7")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("Graph Consos").Select

Calculate

ActiveWorkbook.RefreshAll
Sheets("Graph Hebdo").Calculate
Sheets("Nuage - Annuel").Calculate
Sheets("Nuage - Hebdo").Calculate
Sheets("Nuage - Quotidien").Calculate
Sheets("Nuage - Dérivées (MA)").Calculate
Sheets("Puissances").Calculate
Sheets("PASTEL").Select
Range("K40").Select
ActiveCell.FormulaR1C1 = ""
Sheets("Graph Consos").Select


Else


Sheets("TOP 10 PI").Select

Set MyRange = Range("A12")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange


Sheets("TOP 10 PI").Select

Set MyRange = Range("J12")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange


Sheets("DJ PI").Select

Set MyRange = Range("H7")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("DJ PI").Select

Set MyRange = Range("K7")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("DJ PI").Select

Set MyRange = Range("R7")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("DJ PI").Select

Set MyRange = Range("U7")

MyRange.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("Graph Consos").Select

Calculate

ActiveWorkbook.RefreshAll
Sheets("Graph Hebdo").Calculate
Sheets("Nuage - Annuel").Calculate
Sheets("Nuage - Hebdo").Calculate
Sheets("Nuage - Quotidien").Calculate
Sheets("Nuage - Dérivées (MA)").Calculate
Sheets("Puissances").Calculate
Sheets("PASTEL").Select
Range("K40").Select
ActiveCell.FormulaR1C1 = ""
Sheets("Graph Consos").Select


End If

End Sub
 

safranien

XLDnaute Occasionnel
re

j'avance doucement et j'ai un peu réussi à optimiser mon code. Je pense qu'il y a encore de quoi faire et certainement de grosses erreurs d'architecture donc n'hésitez pas à me corriger et me donner vos avis

Merci

Sub Actu()


Dim addIn As COMAddIn
Dim automationObject As Object


Set addIn = Application.COMAddIns("PI DataLink")
Set automationObject = addIn.Object


Application.ScreenUpdating = False


Sheets("Fiche Site").Calculate

Sheets("TOP 10 PI").Select
Range("W5").Value = Range("T5").Value
Range("X5").Value = Range("U5").Value
Range("S2,U2,T5,T9,U9").Calculate



Dim MyRange1 As Range


Sheets("TOP 10 PI").Select

Set MyRange1 = Range("U4")

MyRange1.Select

automationObject.SelectRange
automationObject.ResizeRange

Sheets("TOP 10 PI").Select
Range("U5").Calculate

Sheets("DJ PI").Select
Range("C1:C3", "H4:V5").Calculate



Dim MyRange4 As Range
Dim MyRange5 As Range
Dim MyRange6 As Range
Dim MyRange7 As Range


Sheets("DJ PI").Select

Set MyRange4 = Range("H7")
Set MyRange5 = Range("K7")
Set MyRange6 = Range("R7")
Set MyRange7 = Range("U7")

MyRange4.Select
automationObject.SelectRange
automationObject.ResizeRange
MyRange5.Select
automationObject.SelectRange
automationObject.ResizeRange
MyRange6.Select
automationObject.SelectRange
automationObject.ResizeRange
MyRange7.Select
automationObject.SelectRange
automationObject.ResizeRange

Sheets("TOP 10 PI").Select
If Range("W5").Value = Range("T5").Value And Range("X5").Value = Range("U5").Value Then


Sheets("Graph Consos").Select

Calculate


Else

Dim MyRange2 As Range
Dim MyRange3 As Range

Sheets("TOP 10 PI").Select

Set MyRange2 = Range("A12")
Set MyRange3 = Range("J12")

MyRange2.Select

automationObject.SelectRange
automationObject.ResizeRange

MyRange3.Select

automationObject.SelectRange
automationObject.ResizeRange


Sheets("Graph Consos").Select

Calculate

End If


ActiveWorkbook.RefreshAll
Sheets("Graph Hebdo").Calculate
Sheets("Nuage - Annuel").Calculate
Sheets("Nuage - Hebdo").Calculate
Sheets("Nuage - Quotidien").Calculate
Sheets("Nuage - Dérivées (MA)").Calculate
Sheets("Puissances").Calculate
Sheets("PASTEL").Select
Range("K40").Select
ActiveCell.FormulaR1C1 = ""
Sheets("Graph Consos").Select

End Sub
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
311 725
Messages
2 081 948
Membres
101 850
dernier inscrit
Danigra