Améliorer mon code VBA

Bonjour à tous,

j'ai mis en place un code vba mais vue l'utilisation que je doit en faire, je trouve que l'exécution de la macro prend du temps (une dizaine de secondes). n'étant pas expert en vba, j'ai quand même lu sur le net que la déclaration des variables pouvait également améliorer l'exécution de la macro, mais vu la longueur de ma macro, je suis coincé. quelqu'un peut-il me l'améliorer s'il vous plait ?

Sub Valider_ticket()

Application.ScreenUpdating = False

Application.EnableEvents = False

Application.DisplayAlerts = False

ActiveSheet.Unprotect

Dim ligin As Long, ligai As Long

ligai = 40

Select Case MsgBox("Confirmer la validation du ticket", vbOKCancel, "Valider le ticket")

Case vbOK

Range("AA4:Ak18").Select

Selection.Copy

Range("AA19").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False

Selection.Copy

Sheets("recettes").Visible = True

Sheets("Recettes").Select

Range("A2").Select

Selection.Insert Shift:=xlDown

With Selection.Interior

.Pattern = xlNone

.TintAndShade = 0

.PatternTintAndShade = 0

End With

Columns("l:v").Select

Selection.Copy

Columns("A:k").Select

Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=False

Application.CutCopyMode = False

Columns("A:k").EntireColumn.AutoFit

For ligin = ligai To 1 Step -1

If Worksheets("Recettes").Cells(ligin, 1).Value = "" Then

Rows(ligin).Delete

End If

Next

Range("A1").Select

Sheets("recettes").Visible = False

Sheets("Cdes").Select

Application.CutCopyMode = False

Range("K29:K50,q10:q80,N26").Select

Range("q10").Activate

Selection.ClearContents

Sheets("prix").Visible = True

Sheets("prix").Select

ActiveSheet.PivotTables("Tableau crois? dynamique1").PivotCache.Refresh

Sheets("prix").Visible = False

Sheets("Cdes").Select

Range("k26").Select

Case vbCancel

Range("k26").Select

End Select

Range("AA19:Ak40").Select

Selection.ClearContents

Range("K26").Select

Application.EnableEvents = True

Application.ActiveWorkbook.Save

Application.DisplayAlerts = True

ActiveSheet.Protect

End Sub

Grand merci d'avance !!!

Bonjour,

Pas compliqué ! D'abord il convient de mettre le code sous balises Code, et qu'il soit indenté, ça conditions pour que je lise...

Ensuite pour améliorer : commencer par faire disparaître tout Select, Activate, Selection, etc. dans un premier temps, dans un second temps éliminer les copier-coller au profit d'affectations de valeurs, et dans un troisième temps éliminer les autres commandes inutiles issues de l'enregistreur.

mon cerveau c'est déconnecté dès la première phrase...

ce code je l'ai conçu en y mettant plusieurs codes bout à bout celon ce que je voulais obtenir. donc je ne sais pas faire un tel code en entier. pleaaaaase, c'est possible que tu me le fasses, ainsi je pourrais m'en inspirer la porichaine fois pour d'autres codes que je créerais..

mon cerveau c'est déconnecté dès la première phrase...

ce code je l'ai conçu en y mettant plusieurs codes bout à bout celon ce que je voulais obtenir. donc je ne sais pas faire un tel code en entier. pleaaaaase, c'est possible que tu me le fasses, ainsi je pourrais m'en inspirer la porichaine fois pour d'autres codes que je créerais..

Bonjour,

Le forum dispose de fonctionnalités pour rendre le code lisible lorsque tu le post, pour peu que tu prennes la peine de les utiliser... Il s'agit du bouton : </>

Ensuite, ton code est très certainement issu de l'enregistreur automatique de macro. Cette fonction permet d'apprendre certaines instructions, mais certainement pas de produire un code propre et fiable. En effet, l'enregistreur ne sait pas à l'avance ce que tu veux faire et ne réfléchit donc pas, comme tu devrais le faire, à la structure du code.

Il se contente de reproduire bêtement chacune de tes actions. Or, VBA, à la différence d'un utilisateur, n'a pas besoin de sélectionner les éléments (plages, cellules...) pour travailler dessus, par exemple. Il suffit de préciser les références complètes des objets.

Je t'invite donc a aller faire un tour du côté des cours VBA pour commencer.

Pedro

merci pour la réponse.

mais toujours dans le sujet, je poste le code :

Attribute VB_Name = "Module5"
Sub Valider_ticket()
Attribute Valider_ticket.VB_ProcData.VB_Invoke_Func = " \n14"
'
' Valider_ticket Macro
'
 Application.ScreenUpdating = False
 Application.EnableEvents = False
 Application.DisplayAlerts = False
    ActiveSheet.Unprotect

    Dim ligin As Long, ligai As Long
    ligai = 40

    Select Case MsgBox("Confirmer la validation du ticket", vbOKCancel, "Valider le ticket")
        Case vbOK
    Range("AA4:Ak18").Select
    Selection.Copy
    Range("AA19").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("recettes").Visible = True
    Sheets("Recettes").Select
    Range("A2").Select
    Selection.Insert Shift:=xlDown
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Columns("l:v").Select
    Selection.Copy
    Columns("A:k").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Columns("A:k").EntireColumn.AutoFit
    For ligin = ligai To 1 Step -1
    If Worksheets("Recettes").Cells(ligin, 1).Value = "" Then
    Rows(ligin).Delete
    End If
    Next
    Range("A1").Select
    Sheets("recettes").Visible = False
    Sheets("Cdes").Select
    Application.CutCopyMode = False
    Range("K29:K50,q10:q80,N26").Select
    Range("q10").Activate
    Selection.ClearContents
    Sheets("prix").Visible = True
    Sheets("prix").Select
    ActiveSheet.PivotTables("Tableau crois� dynamique1").PivotCache.Refresh
    Sheets("prix").Visible = False
    Sheets("Cdes").Select
    Range("k26").Select
    Case vbCancel
    Range("k26").Select
    End Select
    Range("AA19:Ak40").Select
    Selection.ClearContents
    Range("K26").Select
    Application.EnableEvents = True
    Application.ActiveWorkbook.Save
    Application.DisplayAlerts = True
    ActiveSheet.Protect
End Sub

Un exemple :

Range("AA19:Ak40").Select
Selection.ClearContents

S'écrit simplement :

Range("AA19:Ak40").ClearContents
Rechercher des sujets similaires à "ameliorer mon code vba"