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

Statistiques des forums

Discussions
312 207
Messages
2 086 240
Membres
103 162
dernier inscrit
fcfg