Erreur Exécution 7 : mémoire insuffisante : code moins lourd?

Résolu/Fermé
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 19 août 2017 à 19:58
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 - 19 août 2017 à 23:35
Bonjour à tous

merci à l'avance de prendre le temps de me lire et de m'aider.
Je n'ai pas joint de fichier pour le moment mais si vous en avez besoin, dites-moi.

mon fichier à une feuille nommée : Grand livre à date
Ensuite il y a plusieurs feuilles nommées entre autre.. 33533, 11502, ...
Les noms de feuilles, correspondent aux données qu'on retrouve dans la feuilles grand livre colonne G.

Donc ce code, je regarde toutes les lignes de la feuille Grand livre à date et si la colonne G, correspond à un nom de feuille je vais porter l'info dans cette feuille.
Ensuite je vais dans chaque feuille et je mets une formule dans la colonne E
Et finalement je vais dans chaque feuille et j'ajoute le mois dans la colonne G selon l'info de la colonne B.

ça fonctionnais quand j'avais moins de données dans la feuille Grand livre à date.. et moins de feuilles..maintenant ça ne fonctionne plus. J'ai aussi ajouter moi même les deux dernières formules...

Je ne suis pas très douée en VBA, ce code m'avait été fait par Michel_m, ici même sur ce forum en 2013!

Serait-il possible de changer quelque chose dans ce code pour le rendre moins lourd? Peut-être mes ajouts au code de Michel_m sont-ils problématiques..

merci à l'avance
Mélanie




Sub repartir_grandlivre()
Dim Nbre_onglets As Byte, Cptr_cl As Byte
Dim T_comptes(), Compte As String, Nbre As Integer, Cptr_t As Byte
Dim Derlig As Integer, T_grandlivre()
Dim T_dummy(), Cptr_d As Integer, Cptr As Integer, Lig As Integer, Col As Byte
Dim Ligvide As Long
'Dim essai

Application.ScreenUpdating = False

With Sheets("Grand livre à date")
'------Création d'une variable-tableau 2D nbre occurences compte,nom compte
Nbre_onglets = ThisWorkbook.Sheets.Count
ReDim T_comptes(2, 1)
For Cptr_cl = 1 To Nbre_onglets
If Sheets(Cptr_cl).Name <> "Grand livre à date" <> "DÉTAIL" <> "FRAIS EXPLOITATION" _
<> "Stocks " <> "Immos" <> "Frais courus-FPA et autres" <> "DAS" _
<> "Salaire- employés(avance-vac" <> "Taxes" <> "Cout alimentation" <> "entretien animaux" <> "FRAIS ADMIN" <> "Frais machineries" <> "Frais bancaires" Then
Compte = Sheets(Cptr_cl).Name
Nbre = Application.CountIf(Sheets("Grand livre à date").Columns("H"), Compte)
If Nbre > 0 Then
Cptr_t = Cptr_t + 1
ReDim Preserve T_comptes(2, Cptr_t)
T_comptes(1, Cptr_t) = Nbre
T_comptes(2, Cptr_t) = Compte
End If
End If
Next
'-------------mémorise la feuille "grandlivre" en mémoire RAM
Derlig = .Range("A" & .Rows.Count).End(xlUp).Row 'dernière ligne utilisée col A
T_grandlivre = .Range("A1:H" & Derlig).Value 'creation d'une variable -tableau

'---- --------création d'une variable tableau avec les colonnes A à H des lignes du n° compte en cours
For Cptr_d = 1 To Cptr_t
Nbre = T_comptes(1, Cptr_d)

ReDim T_dummy(Nbre, 6)
Lig = 1

For Cptr = 1 To Nbre
Lig = .Columns("h").Find(T_comptes(2, Cptr_d), .Cells(Lig, "H"), xlValues).Row
For Col = 1 To 6
T_dummy(Cptr, Col) = T_grandlivre(Lig, Col)


Next
Next


'----------restitution et encadrement dans la feuille comptes en cours
With Sheets(CStr(T_comptes(2, Cptr_d)))
Ligvide = .Columns("A").Find("", .Range("A5")).Row
With .Cells(Ligvide, "A").Resize(Nbre, 6)
.Value = T_dummy
.Borders.Weight = xlThin
End With
'----------calculs


Dim LastLig, LastLig2 As Long
Application.ScreenUpdating = False

With Sheets(CStr(T_comptes(2, Cptr_d)))
'Ligne de la dernière cellule remplie de colonne A
LastLig = .Cells(.Rows.Count, "E").End(xlEnd).Row
LastLig2 = .Cells(.Rows.Count, "G").End(xlEnd).Row
'On écrit la formule dans A2&"/"&B2 dans C2:Cxx puis on fige les valeurs
With .Range("E6:E" & LastLig)
.Formula = "=IF(RC[-4]>0,IF(RC[-2]>0,R[-1]C+RC[-2],R[-1]C-RC[-1]),"""")"
.Value = .Value
End With

With .Range("G6:G" & LastLig2)
.Formula = "=IF(RC[-5]<> """",CHOOSE(MONTH(RC[-5]),""janvier"",""fevrier"",""mars"",""avril"",""mai"",""juin"",""juillet"",""aout"",""septembre"",""octobre"",""novembre"",""decembre""),"""")"
.Value = .Value
End With
End With

End With
Next
End With
MsgBox "Répartition des comptes effectuée avec succès"
End Sub
A voir également:

1 réponse

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié le 19 août 2017 à 21:02
Bonjour,

ce ne sont pas tes quelques lignes de code qui font du poids, c'est plus sûrement tes données.
On ne change pas qq chose de concis, bien écrit et qui tourne sans pb depuis 4 ans. Tu repousseras un peu la limite pour qq temps seulement, au risques de te retrouver avec un escargot...
Il fait quelle taille et tu as combien de mémoire ?
Travailles-tu avec plusieurs classeurs ouverts ? inutilement ?
Peut-être voir aussi si tu n'as pas d'appli que tu pourrais fermer
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
1
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
19 août 2017 à 21:37
Bonjour eriic
J'ai ajouté des feuilles, je me disais que c'étais peut-être à cause de ça.. J'ai pas vraiment rien d'autre d'ouvert (pas d'autre fichier) juste Chrome et mes courriels.
Mon fichier fait 23 912 Ko, j'ai 4.00 de Ram dont 3.98 go utilisable.
merci à l'avance
Mélanie
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4
19 août 2017 à 22:08
J'ai 92 feuilles dans mon classeur
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié le 19 août 2017 à 23:15
Excel ne sait pas travailler sans charger la totalité du fichier en mémoire.
24 Go c'est très gros, trop pour ta config en tout cas. Surtout que si c'est un xlsm c'est compressé, donc beaucoup plus en mémoire.
Bien que ce soit des opérations délicates il va falloir que tu réfléchisses à en historiser une partie dans un autre classeur si c'est possible.
Là tu cours un risque de détérioration du fichier, avec des erreurs de mise à jour que tu ne verras peut-être pas au début, jusqu'à ce que ce soit définitif et que tu perdes tout avec un fichier inutilisable...

En attendant de régler se problème je te conseille fortement de faire des copies datées régulières (pas sur clé usb...) pour pouvoir en récupérer le maximum en cas de cata.
Tu as un petit utilitaire très bien qui le fait automatiquement, c'est www.filehamster.com
La version gratuite suffit amplement.
Tu lui désignes un fichier ou un répertoire complet et à chaque fois que tu enregistres un document il en fait une copie datée. Comme ça tu es sûr de ne jamais oublier.

Sinon tu peux voir pour étendre la mémoire, là il vaut mieux le faire avec qq'un qui connaisse un peu.
En second lieu contrôler la mémoire virtuelle (ou fichier d'échange, extension mémoire sur le disque dur quand windows en manque)
Saisir "vituel" dans la zone de recherche du bouton windows et cliquer sur 'Comment Modifier la taille de la mémoire virtuelle' pour être guidée.
Contrôle que la gestion automatique soit bien coché, et que tu aies au moins un disque 'Géré par le système' (souvent C: tu peux décocher temporairement la gestion auto si besoin) et qu'au total tu aies au moins 8 Go d'espace disponible.
Contrôle aussi l'espace disponible sur C: (faire un peu le ménage avec ccleaner par exemple) et défragmente-le si ce n'est pas un SSD si tu ne le fais pas régulièrement.
Ce dernier paragraphe c'est juste pour essayer de le faire travailler mieux si c'est possible (à tes risques et périls pour le fichier), l'action à envisager c'est bien d'essayer de réduire les données ou voir l'achat d'une grosse barrette de mémoire au minimum (4 Go c'est très faible aujourd'hui).
eric
0
lanetmel Messages postés 200 Date d'inscription mercredi 24 août 2011 Statut Membre Dernière intervention 15 mars 2018 4 > eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023
19 août 2017 à 23:35
merci beaucoup Eriic, je vais essayer tes solutions et voir ce que cela donne

Mélanie
0