Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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").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").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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…