Optimisation code vba

rudymagny

XLDnaute Occasionnel
Bonjour le forum,
Voilà j'ai un code en VBA qui me permet de réattribuer mes formules automatiquement si quelqu'u tripotte mon fichier:

Sub Attribuer_formule_colonnes(mois)
Dim test As Integer

Sheets(mois).Activate
Columns("C:C").Select
ActiveWorkbook.Names.Add Name:="ColGet" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C3,,,COUNTA(" & mois & "!C3)-1)"
Columns("D:D").Select
ActiveWorkbook.Names.Add Name:="ColCE" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C4,,,COUNTA(" & mois & "!C4)-1)"
Columns("E:E").Select
ActiveWorkbook.Names.Add Name:="ColGdP" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C5,,,COUNTA(" & mois & "!C5)-1)"
Columns("F:F").Select
ActiveWorkbook.Names.Add Name:="ColAcc" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C6,,,COUNTA(" & mois & "!C6)-1)"
Columns("H:H").Select
ActiveWorkbook.Names.Add Name:="ColU" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C8,,,COUNTA(" & mois & "!C8)-1)"
Columns("N:N").Select
ActiveWorkbook.Names.Add Name:="ColCreation" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C14,,,COUNTA(" & mois & "!C14)-1)"
Columns("O:O").Select
ActiveWorkbook.Names.Add Name:="ColRefonte" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C15,,,COUNTA(" & mois & "!C15)-1)"
Columns("P:p").Select
ActiveWorkbook.Names.Add Name:="ColModifBDE1E4" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C16,,,COUNTA(" & mois & "!C16)-1)"
Columns("Q:Q").Select
ActiveWorkbook.Names.Add Name:="ColModifBDE4" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C17,,,COUNTA(" & mois & "!C17)-1)"
Columns("R:R").Select
ActiveWorkbook.Names.Add Name:="ColElectre" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C18,,,COUNTA(" & mois & "!C18)-1)"
Columns("S:S").Select
ActiveWorkbook.Names.Add Name:="ColPanne" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C19,,,COUNTA(" & mois & "!C19)-1)"
Columns("U:U").Select
ActiveWorkbook.Names.Add Name:="ColE1" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C21,,,COUNTA(" & mois & "!C21)-1)"
Columns("V:V").Select
ActiveWorkbook.Names.Add Name:="ColE2" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C22,,,COUNTA(" & mois & "!C22)-1)"
Columns("W:W").Select
ActiveWorkbook.Names.Add Name:="ColE3" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C23,,,COUNTA(" & mois & "!C23)-1)"
Columns("X:X").Select
ActiveWorkbook.Names.Add Name:="ColE4" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C24,,,COUNTA(" & mois & "!C24)-1)"
Columns("Y:Y").Select
ActiveWorkbook.Names.Add Name:="ColE5" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C27,,,COUNTA(" & mois & "!C27)-1)"
Columns("AE:AE").Select
ActiveWorkbook.Names.Add Name:="ColE6" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C31,,,COUNTA(" & mois & "!C31)-1)"
Range("A1").Select

test = MsgBox("Réattribution des formules terminée! Retour au menu?", vbYesNo)
If test = vbYes Then
Accueil.Show
ElseIf test = vbNo Then
Exit Sub
End If
End Sub


Voilà je voudrais savoir si il est possible de l'optimiser ou bien non?

Merci d'avance
 

Dan

XLDnaute Barbatruc
Re : Optimisation code vba

Bonjour,

Ce que tu pourrais faire c'est placer ces formules directement sans passer par macro.

En vitesse essaie ceci :
Code:
Sub Attribuer_formule_colonnes(mois)
Dim test As Integer
Application.ScreenUpdating = False
Sheets(mois).Activate
With ActiveWorkbook.Names
.Add Name:="ColGet" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C3,,,COUNTA(" & mois & "!C3)-1)"
.Add Name:="ColCE" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C4,,,COUNTA(" & mois & "!C4)-1)"
.Add Name:="ColGdP" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C5,,,COUNTA(" & mois & "!C5)-1)"
.Add Name:="ColAcc" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C6,,,COUNTA(" & mois & "!C6)-1)"
.Add Name:="ColU" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C8,,,COUNTA(" & mois & "!C8)-1)"
.Add Name:="ColCreation" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C14,,,COUNTA(" & mois & "!C14)-1)"
.Add Name:="ColRefonte" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C15,,,COUNTA(" & mois & "!C15)-1)"
.Add Name:="ColModifBDE1E4" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C16,,,COUNTA(" & mois & "!C16)-1)"
.Add Name:="ColModifBDE4" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C17,,,COUNTA(" & mois & "!C17)-1)"
.Add Name:="ColElectre" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C18,,,COUNTA(" & mois & "!C18)-1)"
.Add Name:="ColPanne" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C19,,,COUNTA(" & mois & "!C19)-1)"
.Add Name:="ColE1" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C21,,,COUNTA(" & mois & "!C21)-1)"
.Add Name:="ColE2" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C22,,,COUNTA(" & mois & "!C22)-1)"
.Add Name:="ColE3" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C23,,,COUNTA(" & mois & "!C23)-1)"
.Add Name:="ColE4" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C24,,,COUNTA(" & mois & "!C24)-1)"
.Add Name:="ColE5" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C27,,,COUNTA(" & mois & "!C27)-1)"
.Add Name:="ColE6" & mois, RefersToR1C1:="=OFFSET(" & mois & "!R4C31,,,COUNTA(" & mois & "!C31)-1)"
End With
test = MsgBox("Réattribution des formules terminée! Retour au menu?", vbYesNo)
If test = vbYes Then
Accueil.Show
ElseIf test = vbNo Then
Exit Sub
End If
Application.ScreenUpdating = False
End Sub
Il y a surement encore moyen de réduire cela.

Bon travail
 

Statistiques des forums

Discussions
312 216
Messages
2 086 342
Membres
103 192
dernier inscrit
Corpdacier