Aide à l'optimisation de son code VBA
Bonjour à tous !
J'aimerais optimiser mon code en enlevant les .Select, .activate et en ne copiant que les cellules que j'ai et non toutes les lignes.
Mon code est le suivant :
Sub Calcul()
Dim numero As Integer
Dim ligVide As Integer
Dim ligne As Integer
Dim Formule As String
ligVide = 1
numero = 4
Sheets("Bilan").Activate
Cells.Select
Selection.Delete Shift:=xlUp
Sheets("Base de données cogé").Activate
For ligne = 4 To 22
Sheets("Base de données cogé").Activate
Cells(2, 1) = Cells(numero, 1)
Sheets("Temps de retour").Activate
Range("A59:A62,A67,A79:A83").EntireRow.Copy
Sheets("Bilan").Activate
Cells(ligVide, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues
Selection.PasteSpecial Paste:=xlPasteFormats
numero = numero + 1
ligVide = ligVide + 11
Next
Sheets("Base de données cogé").Activate
Formule = "='Temps de retour'!D57"
Range("A2").Formula = Formule
End SubAvez vous des idées ? J'ai essayé de faire des range("..").copy destination:= ... Mais il me jette à chaque fois car je pense qu'il aime pas la sélection multiple.. J'avoue être un peu coincé et mon code n'est pas très rapide alors si vous avez idée s'il vous plait
Rebonjour,
Je rectifie mon code mis précédemment que je viens de changer :
Sub Calcul()
Dim numero As Integer
Dim ligVide As Integer
Application.EnableEvents = False
ligVide = 1
numero = 4
Sheets("BILAN").Cells.Delete Shift:=xlUp
Do While Sheets("Base de données cogé").Cells(numero, 1) <> ""
Sheets("Base de données cogé").Cells(2, 1) = Sheets("Base de données cogé").Cells(numero, 1)
Sheets("Temps de retour").Range("A59:A62,A67,A79:A83").EntireRow.Copy
With Sheets("Bilan")
Cells(ligVide, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues
Selection.PasteSpecial Paste:=xlPasteFormats
End With
numero = numero + 1
ligVide = ligVide + 11
Loop
Application.CutCopyMode = False
Sheets("Base de données cogé").Range("A2").Formula = "='Temps de retour'!D57"
Application.EnableEvents = True
End SubJ'ai toujours la même question? Il fonctionne mais est qu'il y a plus jolie et plus rapide ?
Merci d'avance de votre aide
Bonjour,
A tester
Sub Calcul()
Dim numero As Integer
Dim ligVide As Integer
Dim ligne As Integer
Dim Formule As String
ligVide = 1
numero = 4
Sheets("Bilan").Cells.Delete Shift:=xlUp
Sheets("Base de données cogé").Activate
For ligne = 4 To 22
Cells(2, 1) = Cells(numero, 1)
Sheets("Temps de retour").Range("A59:A62,A67,A79:A83").EntireRow.Copy
Sheets("Bilan").Cells(ligVide, 1).PasteSpecial Paste:=xlPasteValues
Sheets("Bilan").Cells(ligVide, 1).PasteSpecial Paste:=xlPasteFormats
numero = numero + 1
ligVide = ligVide + 11
Next
Formule = "='Temps de retour'!D57"
Sheets("Base de données cogé").Range("A2").Formula = Formule
End SubDéjà, sans les select et les activate, ça devrai être plus rapide. Maintenant, sans fichier, difficile de voir l'amélioration...
Cordialement
Bonjour,
Ceci marche et c'est plus rapide qu'avant !
Cela rentre dans mes clou donc je ne pense pas aller plus loin pour le coup.
Je laisse le sujet ouvert jusqu'a ce soir, au cas où quelqu'un aurait une autre idée mais celle ci fonctionne !
Encore merci de ton aide !
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour toutes et tous
coucou besoin_d_aide
facultatif 1er post:
Dim numero%, ligVide%
https://www.excel-pratique.com/fr/vba/variables.php
2ème post
Dim numero%, ligVide% ,ligne%
Dim Formule$
facultatif:
Application.EnableEvents = True (tu peux supprimer)
j'aurais mis aussi en cas d'erreur
on Error Goto 0 (pas certain à voir)
attend l'avis d'un expert
crdlt,
André
Bonjour,
A l'aveugle, sans fichier !...
Option Explicit
Sub Calcul()
Dim ws As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim numero As Long, ligVide As Long, ligne As Long
Set ws = Worksheets("Bilan")
Set ws2 = Worksheets("Base de donn?es cog?")
Set ws3 = worksSheets("Temps de retour")
ws.Cells.Clear
ligVide = 1: numero = 4
For ligne = 4 To 22
ws2.Cells(2, 1) = ws2.Cells(numero, 1)
ws3.Range("A59:A62,A67,A79:A83").EntireRow.Copy
With ws.Cells(ligVide, 1)
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
numero = numero + 1
ligVide = ligVide + 11
Next
ws2.Range("A2").Value = ws3.Cells(57, 4).Value
End SubRe,
Salut Andre13, coucou Jean-Eric
Et le second code
Sub Calcul()
Dim numero As Integer
Dim ligVide As Integer
ligVide = 1
numero = 4
Sheets("BILAN").Cells.Delete Shift:=xlUp
Do While Sheets("Base de données cogé").Cells(numero, 1) <> ""
Sheets("Base de données cogé").Cells(2, 1) = Sheets("Base de données cogé").Cells(numero, 1)
Sheets("Temps de retour").Range("A59:A62,A67,A79:A83").EntireRow.Copy
Sheets("Bilan").Cells(ligVide, 1).PasteSpecial
numero = numero + 1
ligVide = ligVide + 11
Loop
Application.CutCopyMode = False
Sheets("Base de données cogé").Range("A2").Formula = "='Temps de retour'!D57"
End SubA toi de choisir lequel est le mieux pour toi
Cordialement
Merci à vous tous pour votre aide !
J'ai de quoi choisir et avec des premiers tests ils sont tous à première vu autant rapide !
Encore merci !