Bonsoir à tous,
Je viens de créer une matrice pour automatiser un traitement, mais au lancement du code VBA, j'ai un message "Mémoire insuffisante". Je pense qu'il doit y avoir un loupé avec ma boucle mais je ne vois pas lequel.
J'aurais besoin de votre aide pour y voir plus clair.
J'explique le fonctionnement de la boucle :
Il s'agit de vérifié si une ligne (Onglet S) se retrouve de manière identique dans l'onglet S-1 (il faut que la macro regarde si la plage A1:F1, si elle existe quelque part dans l'onglet S-1)
Merci par avance de votre aide et bonne soirée
Mon code ci-dessous (étant débutant en VBA, il est très basique)
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 Sub Compilation() Dim ODATA As Worksheet 'Onglet Data Dim OS As Worksheet 'Onglet S Dim OS1 As Worksheet 'Onglet S-1 Dim Plage1 As Range Dim nb As Integer Dim Plage2 As Range Dim nb2 As Integer Dim i As Integer 'Cas1 copie Dim j As Integer 'Cas2 copie Dim k As Integer 'Cas3 copie Dim l As Integer Dim m As Integer 'calcul nb de ligne dans l'onglet S Set OS = Worksheets("S") Set Plage1 = OS.Range("A1").CurrentRegion nb = Plage1.Rows.Count 'calcul nb de ligne dans l'onglet S-1 Set OS1 = Worksheets("S-1") Set Plage2 = OS1.Range("A1").CurrentRegion nb2 = Plage2.Rows.Count 'compteur initiaux pour copie i = 5 j = 5 k = 5 Set ODATA = Worksheets("Data") For l = 1 To nb For m = 1 To nb2 If OS.Range("Al:Fl") = OS1.Range("Am:Fm") Then If Range("El") = "Type2" And Date - Range("Cl") > 21 Then Set copy1 = ODATA.Range("Hj") OS.Range("Al").Copy copy1 Set copy2 = ODATA.Range("Ij") OS.Range("El").Copy copy2 j = j + 1 Else If Range("El") = "Type3" And Date < Range("Fl") Or Range("Fl") = "" Then Set copy1 = ODATA.Range("Mk") OS.Range("Al").Copy copy1 Set copy2 = ODATA.Range("Nk") OS.Range("El").Copy copy2 k = k + 1 Else Set copy1 = ODATA.Range("Ci") OS.Range("Al").Copy copy1 Set copy2 = ODATA.Range("Di") OS.Range("El").Copy copy2 i = i + 1 End If End If End If Next m Next l End Sub
Partager