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
é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