Optimation de temps d'excution d'une Macro

Zak-018 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Je rencontre un souci avec une macro. Je travaille sur des grosses BDD (10000-80000 lignes) et j'aimerai optimiser le temps d'exécution d'une de mes macros. Sur certains fichiers ma macro prend environ 10 minutes d'exécution. J'aimerai votre avis sur la rédaction de ma macro :

Sub maj_relations_opera_yc_mois_tous_TCT2()

‘déclaration variables
Dim t As Single
Dim v_derligne As Long
Dim vTrain As String
Dim vTCT As String
Dim vDate As String
Dim a_wbook As String
Dim Wbsource1 As String
Dim A_sheet As String
'traitement 4 à 5 secondes

Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual


vTrain = InputBox("Cellule du 1er n° de train ?")

If vTrain = "" Then
MsgBox "annulé"
Exit Sub
Else

vTCT = InputBox("Cellule du 1er code TCT ?")

If vTCT = "" Then
MsgBox "annulé"
Exit Sub
Else

vDate = InputBox("Mois en cours ?")

If vDate = "" Then
MsgBox "annulé"
Exit Sub
Else

t = Timer

'nom du classeur actif
a_wbook = ActiveWorkbook.Name

'ouvrir le fichier d'arborescence
Workbooks.Open Filename:="C:\Users\9407465F\Documents\Cumul Opéra 2017", UpdateLinks:=False
Wbsource1 = ActiveWorkbook


Windows(a_wbook).Activate

'Recherche de la dernière ligne du tableur
v_derligne = Range("A" & Rows.Count).End(xlUp).Row

'Relation VERSION avec MVA
With Range(ActiveCell.Address & ":" & Split(ActiveCell.Address, "$")(1) & v_derligne)
'recherchev
.Formula = "=IF(" & vTCT & " = ""LDA"",""422"",VLOOKUP(" & vDate & "&""@""&" & vTrain & _
",'C:\Users\9407465F\Documents\[Cumul Opéra 2017.xlsx]Arbo cumulée 2017'!A:E,5,FALSE))"
.Value = .Value

End With

'fermer le fichier source
Windows(Wbsource1).Close

End If
End If
End If

Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

t = Timer - t


MsgBox ("Mise à jour des relations terminée en " & t & "secondes")


End Sub

Merci d'avance!!!


A voir également:

2 réponses

thev Messages postés 1985 Date d'inscription   Statut Membre Dernière intervention   713
 
Bonsoir,

il serait intéressant de connaître le temps d'exécution avant recalcul de tes formules car il est possible que ce soit ce recalcul qui soit long au vu du nombre de lignes concernées.
0
Zak-018 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,


Le temps d'exécution varie entre 60-120 secondes pour une base de données de 18000 lignes. J'en voudrai maximum 20 mais je n'arrive pas à trouver la bonne méthode alors que j'ai essayé mille et une formules.

Merci de ta réponse Thev.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

Ta grande base semble ^tre "cumul_opera_2017 " ?

dans ton classeur cible a_wbook, ton rechercheV parait mystérieux à comprendre

donc, envoie un extrait de ta base "opera" avec environ 1000 ou 2000 lignes et a_book pour tenter d'^tre efficace...


Mettre le classeur sans données confidentielles en pièce jointe sur « mon-partage.fr »
et faire un clic coller le raccourci dans votre message



 Michel
0