J'ai une macro qui permet à l'utilisateur de charger plusieurs données sur différentes feuilles excel afin d'effectuer des recherches sur les différents fichiers chargés.
cependant ces fichiers excel comportent souvent des centaines de millier de lignes et rendent la macro lente et même très très lente.
j'aimerais savoir s'il est possible de rendre ma macro plus rapide, et si oui comment.
Merci de bien vouloir me venir en aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 Private Sub Workbook_open() 'Chargement du récapitulatif ChargeRecap ("C:\Users\UA-Vie\Desktop\DOC PROD\Recap KAMAGATE\BICICI.xlsx") ChargeRecap ("C:\Users\UA-Vie\Desktop\DOC PROD\Recap KAMAGATE\ALIOS BIA acceptés.xlsx") ChargeRecap ("C:\Users\UA-Vie\Desktop\DOC PROD\Recap KAMAGATE\Adhésion globale (PA et PU).xlsx") 'bordure de cellules Range("A1").CurrentRegion.Cells.Borders.Weight = xlThin End Sub Sub ChargeRecap(ByVal chemin As String) Dim ClassSource As Object Dim DerLine As Long Dim DerLineRecap As Long Dim DerColumn As Integer Dim i As Long Dim j As Integer Dim table() As Variant 'Application.ScreenUpdating = False 'choisir classeur source Set ClassSource = GetObject(chemin) 'N° de la dernière ligne non vide de la colonne A ClassSource1 DerLine = ClassSource.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row - 1 'N° de la dernière colonne non vide de la ligne 1 ClassSource1 DerColumn = ClassSource.Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column 'Redimenssionner le tableau ReDim table(1 To DerLine, 1 To DerColumn) 'Ranger les informations du premier classeur dans le tableau For i = 1 To DerLine For j = 1 To DerColumn table(i, j) = ClassSource.Sheets(1).Cells(i + 1, j) Next j Next i 'Copier le tableau dans le classeur recap For i = 1 To DerLine DerLineRecap = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row + 1 For j = 1 To DerColumn Sheets(1).Cells(DerLineRecap, j) = table(i, j) Next j Next i Set ClassSource = Nothing End Sub Sub Total() Dim Ligne As Long Dim i As Long Dim tot As Double Ligne = ThisWorkbook.Sheets(1).Range("B" & Rows.Count).End(xlUp).Row tot = 0 For i = 2 To Ligne tot = tot + Range("B" & i).Value Next i Range("A" & Ligne + 1).Value = "TOTAL" Range("B" & Ligne + 1).Value = tot End Sub
Partager