Problème de gestion mémoire et utilisation ressources ...
cs_Sp00ky
Messages postés112Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention20 novembre 2006
-
19 août 2005 à 14:55
cs_Sp00ky
Messages postés112Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention20 novembre 2006
-
19 août 2005 à 16:01
Bonjour,
J'ai un problème de gestion de la mémoire et d'utilisation des ressources que je n'arrive pas à résoudre ...
J'ai un Classeur Excel 2003 sur lequel j'aimerais effectuer une macro sur une ligne à chaque modification d'une cellule de cette ligne.
Ainsi, dans le code de Feuil1, je mets :
Private Sub Worksheet_Change(ByVal Target As Range)
For Each Cellule In Target
If Cellule.Column <> Alertes_Col Then
l = Cellule.Row
If l <> old Then
Call Module5.Verif
old = l
End If
End If
Next
End Sub
Mon Module5.Verif contient une macro qui vérifie des choses dans la cellule.
Lorsque je l'appelle depuis un bouton placé sur ma feuille (et non pas automatiquement a chaque modif), cette macro marche parfaitement et c'est super rapide (c'est fait pour etre a chaque modification de cellule, donc c'est instantané le resultat)
Seulement dès qu'elle se lance d'elle meme quand je fais une modif dans une cellule, ca me mets une erreur 28 : Espace Pile Insuffisant. De plus, ca mets un certain temps avant d'afficher cette erreur, ca réfléchit anormalement.
J'ai essayé plusieurs méthodes :
1. Call Module5.Verif => cf plus haut
2. Executer à l'intérieur de Feuil1
= > Beaucoup trop lent, et si j'utilise des fonctions : Espace Pile Insuffisant
3. Verif(l) où l est la ligne
=> Beaucoup trop lent, et Espace Pile Insuffisant
4. Le meilleur : Verif.Show où Verif est un UserForm qui execute la macro au chargement.
> Parfait, cependant le UserForm se charge, et ne se ferme pas de lui même ...
Si je le fais se fermer par Verif.Hide, comme j'ai mis le code dans UserForm_Initialize, il ne le refait pas lors du prochain Verif.Show ...
Enfin bref, comment la faire executer de facon "normale" sans qu'elle rame, comme si je cliquais simplement sur le bouton (qui lui marche parfaitement) ... ?
aieeeuuuuu
Messages postés698Date d'inscriptionjeudi 16 janvier 2003StatutMembreDernière intervention20 mai 20113 19 août 2005 à 15:53
je pense que ta fonction tourne en boucle :
tu lance une fonction sur un evenement on_change d'une cellule A, mais cette fonction doit (enfin c'est ce que je pense) modifier la cellule A. donc quand la fonction modifie cette cellule, elle genere a nouveau l'evenement on_change, qui rappelle la fonction... qui remodifie la celleule A, ce qui rappelle la fonction... et c'est sans fin.
est-ce que tu pourrais nous donner le code de la fonction appelée.
sinon la solution pour eviter ca est de declarer une variable globale que tu place a True lorsque la fonction est en train de s'executer, et au debut de la fonction tu verifie si la variable est a True, tu sors directement de la fonction
public bIsFonctiunRunning as boolean
public function maFonction() as ...
if bIsFonctiunRunning then exit function
bIsFonctiunRunning = true
cs_Sp00ky
Messages postés112Date d'inscriptionvendredi 21 janvier 2005StatutMembreDernière intervention20 novembre 20061 19 août 2005 à 16:01
Effectivement, ca devait venir de là, merci à vous deux ;)
En fait j'ai réussi a m'en sortir car je ne changeais qu'une colonne en particulier quand j'appellais la macro.
D'ailleurs j'avais résolu ce pb avec :
If Cellule.Column <> Alertes_Col Then (cf premier post)
Donc il ne tournait aps en boucle puisque les modifs que faisaient la macro étaient dans Alertes_Col ....
En tous cas maintenant, ca marche !
Avec Verif.Show vbModeLess
et Verif.Hide .... va savoir pkoi ...