Accélération code vba
Résolu
simon7339
Messages postés
68
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour à tous,
Ci-joint un fichier sur lequel j'ai travaillé avec l'aide d'un membre du forum.
http://www.cjoint.com/c/EFspZVpxePv
Le code ci-dessous (en module 5) est très lent (j'ai plus de 6000 lignes à traiter)
Si certains d'entre vous ont une idée pour accélérer ce code je suis preneur.
J'ai lu sur un autre forum :
"le truc, c'est de passer par un tableau. Tu définis toute la zone sur laquelle tu va travailler et tu la mets dans un Range. Tu définis ensuite un Variant et tu mets le Range dedans. Tu travailles sur le Variant, il n'y a plus d'accès à la feuille et ça va 10 fois plus vite. A la fin tu remets le Variant dans le Range d'un seul coup."
Exemple
Vous pensez que je peux utiliser cette méthode dans mon code? Je ne la comprends pas trop.
Mon code que j'essaie d'améliorer :
Merci d'avance pour vos conseils.
Ci-joint un fichier sur lequel j'ai travaillé avec l'aide d'un membre du forum.
http://www.cjoint.com/c/EFspZVpxePv
Le code ci-dessous (en module 5) est très lent (j'ai plus de 6000 lignes à traiter)
Si certains d'entre vous ont une idée pour accélérer ce code je suis preneur.
J'ai lu sur un autre forum :
"le truc, c'est de passer par un tableau. Tu définis toute la zone sur laquelle tu va travailler et tu la mets dans un Range. Tu définis ensuite un Variant et tu mets le Range dedans. Tu travailles sur le Variant, il n'y a plus d'accès à la feuille et ça va 10 fois plus vite. A la fin tu remets le Variant dans le Range d'un seul coup."
Exemple
Dim rg As Range Dim v as Variant Set rg = Worksheets("MaFeuille").Range("A1:G10000") v = rg 'On travaille sur v ... rg = v
Vous pensez que je peux utiliser cette méthode dans mon code? Je ne la comprends pas trop.
Mon code que j'essaie d'améliorer :
Merci d'avance pour vos conseils.
Sub Actu() Dim DLig As Long Dim i As Long Dim f As Long Dim ID As Long Dim Trouve As Object, PlageDeRecherche As Range Dim sngChrono As Single sngChrono = Timer Application.ScreenUpdating = False Application.DisplayAlerts = False Set PlageDeRecherche = Sheets("Feuil1").Columns(1) For f = 2 To Worksheets.Count With Sheets(f) DLig = .Range("A" & Rows.Count).End(xlUp).Row DCol = .Cells(10, Columns.Count).End(xlToLeft).Column For i = 11 To DLig ID = .Range("A" & i).Value Set Trouve = PlageDeRecherche.Find(what:=ID, LookAt:=xlWhole) If Not Trouve Is Nothing Then therow = Trouve.Row .Range(.Cells(i, 17), .Cells(i, DCol)).Copy Destination:=Sheets("Feuil1").Range("Q" & therow) Else MsgBox ID & " ID Number Not found" End If Next i End With Next f Application.ScreenUpdating = True sngChrono = Timer - sngChrono MsgBox "Temps d'execution du code en sec : " & CStr(sngChrono) End Sub
A voir également:
- Accélération code vba
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
3 réponses
J'essaie de voir pour faire avec un array? Serait-ce une bonne méthode pour accélérer le code? Je ne l'ai jamais utilisé, j'essaie de comprendre avec des forum
Bonjour
1. Passer par un tableau, je ne pense pas que ça accélère grand chose puisque les lignes des feuilles de détail à copier ne sont pas forcément consécutives dans la freuille1, donc ne forment pas une plage
2. Quand tu dis que ça met beaucoup de temps, ça fait combien de secondes ?
Chez moi, 20 s (sur une vieille machine qui tourne à 2 Ghz) c'est assez raisonnable
3. Est ce indispensable de copier toutes les feuilles de détail en un coup.
Si tu fais des modifications dans une ligne d'une de ces feuilles, il suffirait de mettre à jour la feuille 1 au fur et à mesure avec un clic-clic sur l'id à mette à jour par exemple
4. Que fait on des id des feuilles de détails qui ne figurent pas dans la feuille 1
Tu as prévu un message d'alerte, je suppose que c'est temporaire
Cdlmnt
1. Passer par un tableau, je ne pense pas que ça accélère grand chose puisque les lignes des feuilles de détail à copier ne sont pas forcément consécutives dans la freuille1, donc ne forment pas une plage
2. Quand tu dis que ça met beaucoup de temps, ça fait combien de secondes ?
Chez moi, 20 s (sur une vieille machine qui tourne à 2 Ghz) c'est assez raisonnable
3. Est ce indispensable de copier toutes les feuilles de détail en un coup.
Si tu fais des modifications dans une ligne d'une de ces feuilles, il suffirait de mettre à jour la feuille 1 au fur et à mesure avec un clic-clic sur l'id à mette à jour par exemple
4. Que fait on des id des feuilles de détails qui ne figurent pas dans la feuille 1
Tu as prévu un message d'alerte, je suppose que c'est temporaire
Cdlmnt
Bonjour,
ccm81 mes salutations au passage,
Je suis d'accord avec les recommandations de ccm81. Les tableaux ne seront pas ici d'une grande utilité.
Néanmoins, si et seulement si, ta colonne A de la feuille Sheets("Feuil1") ne contient aucun doublon, tu as peut être la possibilité de gagner du temps d'exécution.
Réponds déjà aux questions de ccm81 et à la mienne, on verra la suite.
ccm81 mes salutations au passage,
Je suis d'accord avec les recommandations de ccm81. Les tableaux ne seront pas ici d'une grande utilité.
Néanmoins, si et seulement si, ta colonne A de la feuille Sheets("Feuil1") ne contient aucun doublon, tu as peut être la possibilité de gagner du temps d'exécution.
Réponds déjà aux questions de ccm81 et à la mienne, on verra la suite.