Macro trop lourde, comment faire pour eviter les BOUCLES
Résolu
Ljonnier
Messages postés
33
Statut
Membre
-
Gyrus Messages postés 3360 Statut Membre -
Gyrus Messages postés 3360 Statut Membre -
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
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:
- Macro trop lourde, comment faire pour eviter les BOUCLES
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Éviter pub youtube - Accueil - Streaming
- Marques smartphone à éviter - Accueil - Guide téléphones
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
1 réponse
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+
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+