erreur excel espace pile insuffisant

titom59280

XLDnaute Junior
Bonjour a tous j'ai créer un code vba qui regarder la valeur d'une cellule et affiche des infos dans d'autre cellule mais dés que je veux changer la valeur de la cellule, qui s'effectue grâce à une liste déroulante, j'ai un jolie message d'erreur ESPACE PILE INSUFFISANT. Et excel se ferme.

Que se passe t-il et comment je peux résoudre ce probléme.

Je vous ai mis le fichier en piéces jointes.
 

Pièces jointes

  • essai.xlsm
    44.1 KB · Affichages: 72
  • essai.xlsm
    44.1 KB · Affichages: 76
  • essai.xlsm
    44.1 KB · Affichages: 92

ROGER2327

XLDnaute Barbatruc
Re : erreur excel espace pile insuffisant

Bonjour titom59280.


Que se passe-t-il ?
Une classique boucle infinie qui sature la mémoire à vitesse grand V !

Description simplifiée du phénomène :

En ouvrant votre classeur et en choisissant par exemple Equipe B en L1, on déclenche la procédure Worksheet_Change ; elle s'exécute sans encombre jusqu'à la ligne de code n° 151 :​
VB:
    ElseIf Range("L$2").Value = "MAI" Then 'Ligne 151
Comme la valeur en L2 est MAI, la procédure exécute la ligne 152 :​
VB:
        Range("$J$4").Value = "26/05/2014 au 01/06/2014" 'Ligne 152
...et les emmerdements commencent car cette ligne modifie la valeur de la cellule J4 ; conséquences immédiates :
  1. l'exécution de la procédure en cours est suspendue, ses paramètres sont empilés en mémoire ;
  2. une nouvelle procédure Worksheet_Change est déclenchée pour traiter la modification de la valeur de la cellule J4.
Cette nouvelle procédure s'exécute sans encombre jusqu'à la ligne de code n° 151 :​
VB:
    ElseIf Range("L$2").Value = "MAI" Then 'Ligne 151
Comme la valeur en L2 est MAI, la procédure exécute la ligne 152 :​
VB:
        Range("$J$4").Value = "26/05/2014 au 01/06/2014" 'Ligne 152
...et les emmerdements continuent car cette ligne modifie la valeur de la cellule J4 ; conséquences immédiates :
  1. l'exécution de cette deuxième procédure est suspendue, ses paramètres sont empilés en mémoire ;
  2. une nouvelle procédure Worksheet_Change est déclenchée pour traiter la modification de la valeur de la cellule J4.
Cette troisième procédure s'exécute, etc.
...et la mémoire vite saturée par l'empilement de procédures inachevées s'en sort comme elle peut, en provoquant par exemple un plantage général si elle est méchante, ou encore, si elle est de bonne humeur, une simple fermeture de l'application, sans conséquence plus fâcheuse.


Que faire ?
Mettre comme première ligne de la procédure :
VB:
Application.EnableEvents = False
Ce qui aura pour effet de ne pas déclencher une nouvelle procédure Worksheet_Change pour traiter la modification de la valeur de la cellule J4.
Mettre comme dernière ligne de la procédure :
VB:
Application.EnableEvents = True
afin de pouvoir réutiliser la procédure.

Toutefois, je n'ai pas étudié complètement votre fort longue procédure ; il se peut que le traitement que je propose (et qui évite le plantage : je l'ai vérifié) soit un peu trop radical. À vous de voir...​


Bon courage.


ℝOGER2327
#7023


Mardi 3 Sable 141 (Saint Phlegmon, doctrinaire - fête Suprême Quarte)
13 Frimaire An CCXXII, 0,9538h - cèdre
2013-W49-2T02:17:21Z
 

titom59280

XLDnaute Junior
Re : erreur excel espace pile insuffisant

Merci ROGER2327

J'ai bien vu ton message mais comme je l'ai vu au petit matin en prenant mon petit dej et qu'ensuite je suis parti au boulot j'ai complètement oublié de te réponde.

En tous cas ta solution marche a merveille.

Merci Mille fois.
 

Statistiques des forums

Discussions
312 215
Messages
2 086 316
Membres
103 176
dernier inscrit
jean.yvesjean.yves