Bonjour,
Je cherche à optimiser un code afin d'accélérer le traitement de ma macro.
Le but est de rapatrier un tableau (entre 500 et 3000 lignes selon le mois en cours) dans un autre fichier.
Le problème est que le fichier destination peut avoir des lignes supplémentaires insérées (je ne peux donc pas bêtement copier/coller l'ensemble)
Aujourd'hui, je fais :
Ce qui prend du temps c'est la boucle :
Est-il possible de la remplacer par quelque chose du style ?
J'ai testé et cela ne fonctionne pas...
Merci pour votre aide.
Nicolas
Je cherche à optimiser un code afin d'accélérer le traitement de ma macro.
Le but est de rapatrier un tableau (entre 500 et 3000 lignes selon le mois en cours) dans un autre fichier.
Le problème est que le fichier destination peut avoir des lignes supplémentaires insérées (je ne peux donc pas bêtement copier/coller l'ensemble)
Aujourd'hui, je fais :
Code:
Sub importer_base()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
ActiveSheet.DisplayPageBreaks = False
Dim i, j, k, l, ligne, nb_col As Integer
Dim tabS(0 To 10000, 0 To 100)
fichier_metier = ThisWorkbook.Name
lien = Cells(1, 10)
fichier = "Suivi_GO-BID.xlsm"
Application.Workbooks.Open Filename:=lien & fichier, ReadOnly:=True
i = 3
nb_col = 20
k = 0
l = 0
Do While Cells(i, 1) <> ""
For j = 1 To nb_col - 1
tabS(k, j - 1) = Cells(i, j)
Next j
k = k + 1
i = i + 1
Loop
Workbooks(fichier).Close savechanges:=False
Workbooks(fichier_metier).Activate
With Sheets("Suivi_métier")
Set plage = .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))
i = 0
Do While tabS(i, 0) <> ""
ligne = 0
If IsError(Application.Match(tabS(i, 0), plage, 0)) Then
ligne = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
Else
ligne = Application.Match(tabS(i, 0), plage, 0) + 1
End If
For j = 1 To nb_col
.Cells(ligne, j) = tabS(i, j - 1)
Next j
i = i + 1
Loop
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
Application.Calculation = xlCalculationAutomatic
End Sub
Ce qui prend du temps c'est la boucle :
Code:
For j = 1 To nb_col
.Cells(ligne, j) = tabS(i, j - 1)
Next j
Est-il possible de la remplacer par quelque chose du style ?
Code:
Range(Cells(ligne, 1), Cells(ligne, nb_col)) = tabS[i]
Merci pour votre aide.
Nicolas
Dernière édition: