Exécutun macro très longue

meldja

XLDnaute Impliqué
Bonjour,
J'avais ouvert une discussion à propos d'un fichier :
HTML:
Je suis en train de faire une petite macro pour un ami.
Sur un tableau dans la première feuille du classeur, il a un résultat en colonne O.
Il s'agit du stock restant qui se calcul avec la quantité totale (colonne G) moins les quantités vendues en colonne J et L.
Il voulait que si la quantité restante (en colonne O) est égale à zéro, la ligne soit recopiée à la fin d'un tableau sur la deuxième feuille, puis que la ligne recopiée soit supprimée dans la première feuille.
J'ai pensé faire la macro avec l'évènement Change, lorsqu'il rentre une quantité vendue en colonne J ou L.
La macro s'exécute bien, mais j'ai une erreur d'exécution 424 (Objet requis).
Les lignes en couleur rouge sont surlignées
Minick m'avait donné la solution (merci encore au passage).
Mais le destinataire du fichier a encore compliqué les choses.
Normalement, quand on validait une des deux quantités et que le strock restant est égal à zéro, ça exécute la macro. Il veut que si les prix de vente ne sont pas remplis, la macro ne s'exécute pas ; c'est réglé.
Il veut ensuite que si les cellules quantité vendue sont remplies mais qu'il reste encore du stock, la cellule quantité vendue 1 reprenne la somme des 2 quantités venues et que le prix de vente 1 reprenne la moyenne des 2 prix de vente (Qté vendue 1 * Prix de vente 1 + Qté Vendue 2 * Prix de vente 2) / Qté vendue 1 + Qté vendue 2).
Tout ça pour libérer de la place en effaçant les cellules Qté vendue 2 et prix de vente 2 (parce qu'il ne veut pas un tableau trop long avec Qté vendu 1..2..3..4).
Ce problème est aussi réglé, mais l'exécution du calcul est long et l'affichage est bizarre, comme s'il excel bouclait sur toutes les lignes.
Voici le code qui exécute le calcul :
Code:
    ElseIf Target.Column = 12 And Range("O" & Target.Row).Value > 0 Then
    Range("K" & Target.Row).Value = (Range("J" & Target.Row).Value * Range("K" & Target.Row).Value + Range("L" & Target.Row).Value _
    * Range("M" & Target.Row).Value) / (Range("J" & Target.Row).Value + Range("L" & Target.Row).Value)
    Range("J" & Target.Row).Value = Range("J" & Target.Row).Value + Range("L" & Target.Row).Value
    Range("L" & Target.Row).ClearContents
    Range("M" & Target.Row).ClearContents
Pour voir ce que ça fait, je joins le fichier avec des petites explications.
Merci et bonne journée.
 

Pièces jointes

  • compta1.zip
    27.1 KB · Affichages: 24

mutzik

XLDnaute Barbatruc
Re : Exécutun macro très longue

bonjour,

execute le code de la feuille 1 en mode pas à pas, tu verras que tu as une boucle infinie, c'est poour cela qu'il y a une erreur de pile (dépassement de capacité)

nb : met un point d'arret sur la ligne application.screenupdating = false en début de code puis mode pas à pas avec la touche F8
 

meldja

XLDnaute Impliqué
Re : Exécutun macro très longue

Bonjour et merci pour ta réponse,
C'est bizarre, avec F8 (pas à pas détaillé), je n'ai aucune erreur renvoyée ?
J'ai mis un point d'arrêt sur la ligne que tu m'as dit pourtant.
Je ne comprends toujours pas ?
En tout cas, merci pour ta réponse.
 

mutzik

XLDnaute Barbatruc
Re : Exécutun macro très longue

en fait, excel reserve une certaine place en mémoire pour mettre des adresses de retour (idem une sub qui appelle une sub qui appelle une sub ..., il daoit bien mettre l'info de retour vers que sub précédente se diriger)
ici c'est pareil, sauf que:
- en manuel (pas à pas) il faut quand même que tu fasses un millier (en fait je sais pas vraiment combien) de fois la boucle avant qu'il ne génère l'erreur comme quoi il n'a plus de place pour écrire (en ram) ses adresses de retour
- en automatique, cela va tellement vite qu'il arrive au bout presque tout de suite

voili, voilà
 

meldja

XLDnaute Impliqué
Re : Exécutun macro très longue

Re,
Merci pour tes explications.
C'est bizarre, lorsque la macro s'exécute et que je regarde dans le gestionnaire des tâches, je ne vois pas la ressource mémoire gonfler (ni la RAM, ni la mémoire virtuelle).
En tout cas, merci pour tes explications.
Que me conseilles-tu ? De revoir l'approche à zéro ou de chercher une solution avec le code actuelle ?
Encore merci et bonne journée
 

mutzik

XLDnaute Barbatruc
Re : Exécutun macro très longue

re,
c'est normal que la ressource mémoire ne change pas, excel se la réserve au lancement et ne la bougera plus, quelque soit le fichier et la macro qui s'éxecute, donc pas de changement
Sinon, pour ton appli, j'ai pas vraiment compris ce qu'elle doit faire, plus tu vas faire de modifs dans cette appli, plus tu auras du mal à deboguer ton code, il est déja très lourd comme cela... (pour moi, je remettrai tout à plat en posant les bonnes questions dès le départ, mais bon, cela n'engage que moi)
 

Discussions similaires

Statistiques des forums

Discussions
312 193
Messages
2 086 062
Membres
103 110
dernier inscrit
Privé