Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Espace pile insuffisant

pat66

XLDnaute Impliqué
Bonjour le forum,

La macro ci dessous plante mon PC elle génère l'erreur suivante " Espace de pile insuffisant",
auriez vous une idée, peut être une question de variables, mais je ne sais pas l'écrire différemment, pourriez vous m'aider svp

merci beaucoup

sur la feuil1 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Worksheets("Feuil2").Range("C31").Value = Worksheets("Feuil1").Range("G13").Value
If Worksheets("Feuil1").Range("G10").Value = "LMNP" Then
Worksheets("Feuil1").Range("G14").Value = "non"
Else
Worksheets("Feuil1").Range("G14").Value = "oui"
End If
End Sub
 
Solution
Bonjour,
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents=False 'Inhibe les événements Excel pour éviter de boucler indéfiniment sur  Worksheet_Change 
Worksheets("Feuil2").Range("C31").Value = Worksheets("Feuil1").Range("G13").Value
If Worksheets("Feuil1").Range("G10").Value = "LMNP" Then
Worksheets("Feuil1").Range("G14").Value = "non"
Else
Worksheets("Feuil1").Range("G14").Value = "oui"
End If
Application.EnableEvents = True
End Sub

dysorthographie

XLDnaute Accro
Bonjour,
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents=False 'Inhibe les événements Excel pour éviter de boucler indéfiniment sur  Worksheet_Change 
Worksheets("Feuil2").Range("C31").Value = Worksheets("Feuil1").Range("G13").Value
If Worksheets("Feuil1").Range("G10").Value = "LMNP" Then
Worksheets("Feuil1").Range("G14").Value = "non"
Else
Worksheets("Feuil1").Range("G14").Value = "oui"
End If
Application.EnableEvents = True
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @pat66 ,

Une fois que la procédure évènementielle est lancée, dans le code la procédure :
  • on modifie des cellules de la feuille (C31,G14)
  • donc la modification entraine un nouvel appel de la même procédure (sans que l'exécution du premier appel soit terminée) et un empilement (stockage temporaire) des variables de l'ancien appel pour y revenir ensuite et pouvoir la terminer
  • dans le nouvel appel, on modifie encore une fois la feuille
  • donc la modification implique un nouvel appel de la la procédure et un empilement des variables de l'appel précédent
  • et ainsi de suite jusqu'à l'infini

Comme la mémoire de la machine n'est pas infinie (hé non), on aboutit à une erreur.

Il faut entourer le code des instructions qui modifient la feuille par :
  • Application.EnableEvents = False (avant) pour "arrêter" le traitement des erreurs
  • Application.EnableEvents = True (après) pour "ré-enclencher" le traitement des erreurs

edit : bonjour @dysorthographie ,
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…