1 pièce(s) jointe(s)
VBA - Msg de pbs de mémoire
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:
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 |