Optimiser code VBA par boucle

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 !

Jacques25

XLDnaute Occasionnel
Bonjour à tous,

Je souhaite optimiser un code VBA rendu assez long vu mes maigres connaissance sur le sujet. Ce que j'essai de faire c'est de remplacer ce bout de code :

Range('B1:B250').AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
('J1:J2'), CopyToRange:=Range('J4:J52'), Unique:=True
Range('B1:B250').AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
('K1:K2'), CopyToRange:=Range('K4:K52'), Unique:=True
Range('B1:B250').AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
('L1:L2'), CopyToRange:=Range('L4:L52'), Unique:=True

par une boucle, sachant qu'il y a entre 20 et 30 codes quasi identiques à la suite.
Est ce que c'est possible, si oui pouvez vous m'aider ?
Est ce que les boucles ralentissent ou au contraire accélèrent le fonctionnement d'une macro?

Merci à tous de l'aide que vous pourrez m'apporter.

Jacques
 
Bonjour Jacques, le Forum

Assez rapidement sans trop tester, voici une proposition :

Option Explicit

Sub SpecialAdavancedFilterLoop()
Dim PlageSource As Range
Dim PlageCriteria As Range
Dim PlageCible As Range
Dim i As Byte

Set PlageSource = Range('B1:B250')
Set PlageCriteria = Range('I1')
Set PlageCible = Range('I4')


For i = 1 To 30

PlageSource.AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Range(PlageCriteria.Offset(0, i), PlageCriteria.Offset(1, i)), _
            CopyToRange:=Range(PlageCible.Offset(0, i), PlageCriteria.Offset(48, i)), _
            Unique:=True
Next

End Sub


Bon Week End
[ol]@+Thierry[/ol]
 
_Thierry écrit:
Bonjour Jacques, le Forum

Assez rapidement sans trop tester, voici une proposition :

Option Explicit

Sub SpecialAdavancedFilterLoop()
Dim PlageSource As Range
Dim PlageCriteria As Range
Dim PlageCible As Range
Dim i As Byte

Set PlageSource = Range('B1:B250')
Set PlageCriteria = Range('I1')
Set PlageCible = Range('I4')


For i = 1 To 30

PlageSource.AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Range(PlageCriteria.Offset(0, i), PlageCriteria.Offset(1, i)), _
            CopyToRange:=Range(PlageCible.Offset(0, i), PlageCible.Offset(48, i)), _
            Unique:=True
Next

End Sub


Bon Week End
[ol]@+Thierry[/ol]


EDITION !!!

Petite modif dans le code (trop rapide)

Sinon les boucles, si elles sont bien conçues, peuvent optimiser un code et surtout en faciliter la lecture et la maintenance. Les Set d'Objets (pour PlageSource ici par exemple), évitent aussi à VBA d'aller relire la plage à chaque fois...
 
- 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

D
Réponses
4
Affichages
1 K
D
Réponses
21
Affichages
2 K
A
  • Question Question
Réponses
3
Affichages
929
S
Réponses
5
Affichages
871
M
Réponses
2
Affichages
989
M
M
Réponses
4
Affichages
2 K
mathieu42400
M
D
Réponses
4
Affichages
5 K
L
Réponses
21
Affichages
10 K
LilouExcelNovice
L
N
Réponses
4
Affichages
2 K
nomitse
N
Retour