Macro trop lourde, comment faire pour eviter les BOUCLES

Résolu/Fermé
Ljonnier Messages postés 31 Date d'inscription lundi 15 août 2016 Statut Membre Dernière intervention 23 novembre 2016 - 17 août 2016 à 15:02
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 - 17 août 2016 à 16:59
Bonjour,

j'ai une nouvelle question pour vous !

Donc j'ai un fichier qui retrace l'historique des performances d'un portefeuille, ce dernier va puiser dans d'autres fichier que je recois tous les jours, j'ai actuellement beaucoup trop de boucles dans mes macros, j'aimerais racourcir tout ca pour que ce soit plus rapide.

Exemple, a la base j'ai un code comme celui ci :

Sub performanceEUROINVESTMENT()
Dim rngA As Range
Dim c As Range
Application.ScreenUpdating = False

Sheets("EUROINV").Select

Range("j1").Select
Set rngA = Range("j1:j1000")
For Each c In rngA
If c.Text = "O" Then

Selection.Copy


Sheets("PERFORMANCE EURO").Select
Range("A7").Select


row = Cells(Rows.Count, 1).End(xlUp).row + 1
Cells(row, 1).Select
Selection.PasteSpecial Paste:=xlValues
Sheets("EUROINV").Select
End If
Next c


Sheets("PERFORMANCE EURO").Select
'Range("G1").Select
Range("Y8:ELM3000").Select
' Range(Selection, Selection.End(xlToRight)).Select
' Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("AF8").Select
ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
IconFileName:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub



j'ai tente de remplacer la partie en gras, qui est la boucle, par ca :



Sub performanceEUROINVESTMENT()
Dim rngA As Range
Dim c As Range
Application.ScreenUpdating = False
Sheets("EUROINV").Select
Selection.AUTOFILTER

ActiveSheet.Range("J1:J1000").AUTOFILTER Field:=5, Criteria1:="0"
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select

Selection.Copy

Sheets("PERFORMANCE EURO").Select
Range("A7").Select


row = Cells(Rows.Count, 1).End(xlUp).row + 1
Cells(row, 1).Select
Selection.PasteSpecial Paste:=xlValues
Sheets("EUROINV").Select
End If
Next c


Sheets("PERFORMANCE EURO").Select
'Range("G1").Select
Range("Y8:ELM3000").Select
' Range(Selection, Selection.End(xlToRight)).Select
' Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("AF8").Select
ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
IconFileName:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub


Mais ca ne marche pas, auriez une idee pour reduire considerablement ce code ? Je ne connais encore que les bases donc c'est tres difficille de reduire.
Je pense avoir un paquet d'autres boucles a reduire ensuite

D'avance merci

A voir également:

1 réponse

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
17 août 2016 à 16:59
Bonjour,

Plutôt que montrer des codes qui ne fonctionnent pas, tu devrais joindre un fichier exemple et indiquer quel est le traitement que tu souhaites réaliser.

Pour cela, tu peux utiliser https://www.cjoint.com/

A+
0