Simplification de code vba

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Ken Hutchinson

XLDnaute Occasionnel
Bonjour à tous,

J'ai une très grosse macro avec beaucoup de code... elle met beaucoup de temps à tourner et je voudrais la booster.

Cette macro fait des filtres auto matiques sur différents critère et copie des sous totaux dans un tableau récapitulatif.

Voici le code de base :

Code:
Sub CONTRAI()
'


'
    Selection.AutoFilter Field:=4, Criteria1:="1"
    Selection.AutoFilter Field:=1, Criteria1:="T"
    ActiveWindow.SmallScroll ToRight:=3
    Selection.AutoFilter Field:=54, Criteria1:="1"
    Range("C65524").Select
    Selection.Copy
    Sheets("RECAP").Select
    Range("BW38").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Sheets("Données").Select
    Selection.AutoFilter Field:=54, Criteria1:="0"
    Application.CutCopyMode = False
    Range("C65524").Select
    Selection.Copy
    Sheets("RECAP").Select
    Range("BW39").Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Sheets("Données").Select
    Selection.AutoFilter Field:=54
    Selection.AutoFilter Field:=9
    Selection.AutoFilter Field:=8
    Selection.AutoFilter Field:=7
End Sub

Cette simplification fonctionnera t'elle ?

Code:
Sub CONTRAI()


'
    Selection.AutoFilter Field:=4, Criteria1:="1"
    Selection.AutoFilter Field:=1, Criteria1:="T"
    ActiveWindow.SmallScroll ToRight:=3
    Selection.AutoFilter Field:=54, Criteria1:="1"
    
    Sheets("RECAP").Range("BW38").Value = Sheets("REP11").Range("C65524").Value

    
    Selection.AutoFilter Field:=54, Criteria1:="0"
    
    Sheets("RECAP").Range("BW39").Value = Sheets("REP11").Range("C65524").Value

    Selection.AutoFilter Field:=54
    Selection.AutoFilter Field:=9
    Selection.AutoFilter Field:=8
    Selection.AutoFilter Field:=7
End Sub

Merci de votre aide...
 
Re : Simplification de code vba

Dans les procédures longues je mets habituellement :

Sub ProcedureX()
Dim oldCalculation
oldCalculation = Application.Calculation

On Error GoTo FinProcedure
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With

.....Commandes de la procédures


'Fin de procédure
FinProcedure:
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = oldCalculation
.Calculate
End With
End Sub

Ce qui permet de figer l'écran bloquer les évènements ainsi que le recalcul du classeur pour les rétablir en fin de procédure, ce qui fournit un gain conséquent
 
Re : Simplification de code vba

Merci !! je vais tenter avec ça.

Mais j'avais vu qu'on pouvait retirer des "select"

Code:
    Range("AZ7:AZ9").Select
    Selection.Cut
    Range("BA7").Select
    ActiveSheet.Paste
    Columns("AZ:AZ").Select
    Selection.ClearContents
    Range("BA7:BA9").Select
    Selection.Cut
    Range("AZ7").Select
    ActiveSheet.Paste
    Range("AZ9").Select
    Selection.AutoFill Destination:=Range("AZ9:AZ65000")
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
791
Réponses
18
Affichages
597
Réponses
3
Affichages
443
Réponses
12
Affichages
1 K
Réponses
2
Affichages
399
Retour