Optimation de temps d'excution d'une Macro

Fermé
Zak-018 Messages postés 2 Date d'inscription lundi 16 octobre 2017 Statut Membre Dernière intervention 18 octobre 2017 - 16 oct. 2017 à 15:45
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 18 oct. 2017 à 15:44
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 1853 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 27 avril 2024 681
17 oct. 2017 à 20:51
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 lundi 16 octobre 2017 Statut Membre Dernière intervention 18 octobre 2017
Modifié le 18 oct. 2017 à 10:34
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 18 oct. 2017 à 15:45
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