je suis comme ma macro...je tourne en rond...

sterf

XLDnaute Nouveau
bonjour à tous,
j'ai besoin d'aide sur un pb de gestion d'une de mes macros. Je m'explique...j'ai dans des cellules (ex:D16:D18)renseigné manuellement,une série de trois relevés de mesures.Dans une autre cellule (ex:D19) je viens faire la moyenne de ces trois mesures.les relevés suivants ce font en (F16:F18) la moyenne ce fait en (F19) et ainsi de suite. lorsque j'ai une série de 7 moyennes consécutives, j'applique une formule pour surveiller où ce trouve chacune de ces moyennes par rapport à une cible.Si ces 7 valeur ce trouve en dessous de la cible, j’exécute une macro (X)tout ceci fonctionne mais...Comme ces valeurs sont figées,les macros utilisé tourne en rond....

dans la pratique ça donne ça:

formule (BA27) pour ctrl de la série:
=SI(ET(D19<>"";D19<0,15;F19<>"";F19<0,15;H19<>"";H19<0,15;J19<>"";J19<0,15;L19<>"";L19<0,15;N19<>"";N19<0,15;P19<>"";P19<0,15);"sept points consécutifs en dessous de la cible")
je passe par une autre cellule (BA26) pour vérifier l'état:
=SI(BA27="sept points consécutifs en dessous de la cible";1)
et je fais de même pour le ctrl de toute la série en me décalant d'une colonne à chaque fois.
il me reste plus qu'a contrôler l'état de mes cellules (BA26;BB26;BC26;etc...) via un code directement sur la feuille qui exécute ma "macro1" en cas ou l'une d'entre elle passe à 1.
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
If Range("BA26") = 1 Then
Call Macro1
End If
If Range("BB26") = 1 Then
Call Macro1
End If
If Range("BC26") = 1 Then
Call Macro1
End If
If Range("BD26") = 1 Then
Call Macro1
End If
Application.EnableEvents = True
End Sub

le PB c’est que mes cellules BA26;BB26 etc restant en l'état, cela crée une boucle sans fin :(
j'ai donc tenté de rompre cette boucle de la manière suivante:
à la suite de mon code "feuille"

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("BA26")) Is Nothing Then
Target.Value = "0"
End If
If Not Intersect(Target, Range("BB26")) Is Nothing Then
Target.Value = "0"
End If
If Not Intersect(Target, Range("BC26")) Is Nothing Then
Target.Value = "0"
End If
If Not Intersect(Target, Range("BD26")) Is Nothing Then
Target.Value = "0"
End If
End Sub

cela fonctionne quand mes case BA26;BB26 etc sont forcées à 1 manuellement,mais ne fonctionne pas en auto lorsque c'est la formule (ex:=SI(BA27="sept points consécutifs en dessous de la cible";1) qui gère l'état de ces memes cellules.
les lignes --> Application.EnableEvents = False
et --> Application.EnableEvents = True

ont juste résolue le pb lors du calcul auto mais n’empêche pas la relance de la macro apres chaque enregistrement.

mon objectif final est de lancer automatiquement ma "macro1" après chaque détection de série mauvaise mais q'une seul fois (même si le liens entre ces éléments est rompue).

je retourne donc vers vous et votre savoir pour m'aider.

merci par avance
 

Si...

XLDnaute Barbatruc
Re : je suis comme ma macro...je tourne en rond...

salut

avec ma version 2010, les évènementielles posent problème. J'aurais écrit :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False 'la cible change donc appel récursif et ...
  If Not Intersect(Target, Range("BA26:BD26")) Is Nothing Then Target.Value = "0"
  Application.EnableEvents = True
End Sub

(pas regardé le reste)
 

sterf

XLDnaute Nouveau
Re : je suis comme ma macro...je tourne en rond...

Bonjour Mr Si...

j'ai essayé votre code et je rencontre toujour le meme PB. Si je force les cellule à 1 ça fonctionne....mais lorsque je met à la place la formule censé mettre la cellule à 1 (ex:=SI(BA27="sept points consécutifs en dessous de la cible";1;0) dans la cellule BA26 (au lieu de la valeur 1) là le forçage de cette meme cellule (à 0 ou autre) ne ce fait pas et si elle ne ce fait pas,elle tourne en boucle.

merci quand meme pour votre aide.

salutation
 

Discussions similaires

  • Résolu(e)
XL 2021 macro
Réponses
9
Affichages
471

Statistiques des forums

Discussions
312 215
Messages
2 086 333
Membres
103 188
dernier inscrit
evebar