Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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.
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 :
l'exécution de la procédure en cours est suspendue, ses paramètres sont empilés en mémoire ;
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 :
l'exécution de cette deuxième procédure est suspendue, ses paramètres sont empilés en mémoire ;
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...
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.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.