Microsoft 365 macro evenementielle

hbb

XLDnaute Occasionnel
Bonjour à tous,
Je fais appel à vos talents concernant les macros événementielles de type "changement de valeur dans une cellule".
Mon besoin est d'avoir 3 types d'événements dans la même feuille et c'est là que ça coince....

Pour résumer le fonctionnement des tableaux :
Dès qu'on change le nombre de pièces à produire dans le tableau1 :
- les 3 lignes de totaux de ce même tableau se mettent à jour en auto => 1er événement
- le calcul du nombre d'équipes dans le tableau 2 se fait en auto => 2ème événement
- A l'inverse, quand on modifie manuellement le nombre d'équipes à produire dans le tableau2, le calcul du nombre de pièces dans le tableau1 se lance en auto (avec les totaux) => 3ème événement

J'ai beau triturer les codes dans tous les sens, je n'y arrive plus....

Si quelqu'un a une piste, ce serait super !!!

merci d'avance,
hbb
 

Pièces jointes

  • Macro évennement.xlsm
    24.2 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Hbb,
Dans une feuille il ne peut y avoir qu'une seule macro événementielle d'un type, pas plusieurs.
Il faut différencier les plages au sein de cette macro événementielle.
Par ex avec Worksheet_Change:
VB:
Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    premLigTablo1 = 5
    premLigTablo2 = 14
    premLigTablo3 = 26
    Application.ScreenUpdating = False
    If Not Intersect(Target, Range(Cells(premLigTablo1 + 1, 7), Cells(premLigTablo2 - 4, 23))) Is Nothing Then      ' Test si plage1
        'Si modification de la quantité de pièces Tableau1, calcul auto du nombre d'équipes Tableau2
        ' Macro de traitement
    ElseIf Not Intersect(Target, Range(Cells(premLigTablo2 + 1, 7), Cells(premLigTablo3 - 4, 23))) Is Nothing Then  ' Test si plage2
        'Si modification du nombre d'équipes Tableau2, calcul auto du nombre de pièces tableau1
        ' Macro de traitement
    End If
Fin:
End Sub
 

hbb

XLDnaute Occasionnel
Bonjour Sylvanu,
Merci pour ton aide, effectivement ça fonctionne mieux,
En revanche, ce qui parait logique, c'est que la boucle ne semble pas s'arrêter.
Explication : La cellule 1 est modifiée ce qui entraine la màj de la cellule 2.
La cellule 2 est donc modifiée, ce qui entraine un nouveau calcul pour la cellule 1 etc....

Y a-t-il un moyen de limiter les macros à 1 seul traitement ?

J'ai mis en pj le fichier modifié suivant ta proposition

merci d'avance,
hbb
 

Pièces jointes

  • Macro évennement v2.xlsm
    21.7 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
C'est classique.
Pour éviter cela il faut invalider les events, en fait les interdire, et les ré autoriser à la fin avec :
Code:
Application.EnableEvents = False  ' Interdit tout event'
Application.EnableEvents = True   ' Autorise les events'
VB:
Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    premLigTablo1 = 5
    premLigTablo2 = 14
    premLigTablo3 = 26
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    If Not Intersect(Target, Range(Cells(premLigTablo1 + 1, 7), Cells(premLigTablo2 - 4, 23))) Is Nothing Then      ' Test si plage1
        'Si modification de la quantité de pièces Tableau1, calcul auto du nombre d'équipes Tableau2
        ' Macro de traitement
    ElseIf Not Intersect(Target, Range(Cells(premLigTablo2 + 1, 7), Cells(premLigTablo3 - 4, 23))) Is Nothing Then  ' Test si plage2
        'Si modification du nombre d'équipes Tableau2, calcul auto du nombre de pièces tableau1
        ' Macro de traitement
    End If
Fin:
Application.EnableEvents = True
End Sub
Attention cependant, il faut absolument sortir par la fin "naturelle" de la macro, et ne pas mettre d' "exit sub" car alors les events resteraient OFF et la macro ne pourrait plus être rappelée, sauf à fermer le fichier et le ré ouvrir.
 

Pièces jointes

  • Macro évennement v2.xlsm
    17.9 KB · Affichages: 4

Discussions similaires

Réponses
4
Affichages
296

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35