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

Macro événementielle récalcitrante

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Magic_Doctor

XLDnaute Barbatruc
Supporter XLD
Bonjour,

J'ai rédigé une macro événementielle pour 3 cellules.
Quand on clique sur l'une de ces 3 cellules il doit se passer normalement quelque chose (en l'occurrence : écart type soit par rapport à la moyenne, soit par rapport à la médiane).
La syntaxe est peut-être lourde et maladroite, mais ça marchait jusqu'au moment où, curieusement, ça ne marchait plus... Qu'aurais-je fait entre temps comme bourde ??

Les cellules en question sont celles qui sont bleu clair avec le symbole sigma à l'intérieur.
La macro se trouve dans le module de la feuille, à savoir :
Feuille --> "Hoja1 (Enero)"
Macro --> "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"

Toute suggestion sera la bienvenue.

Bonne fin d'après-midi.
 

Pièces jointes

Re : Macro événementielle récalcitrante

bonjour

j'ai essayer comme ceci et chez moi ça fonctionne:
à la place de Worksheet_SelectionChange ...
et double clic dans les cellules concernées
(je n'ai pas touché au code !)

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not (Target.Address = "$C$48:$D$48" Or Target.Address = "$C$57:$D$57") Then Exit Sub
Dim x As Byte, y As Byte, z As Byte

If Not Application.Intersect(Target, [C48]) Is Nothing Then
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    x = x + 1
    [Q41].Value = x + [Q41].Value
    If [Q41].Value > 1 Then [Q41].Value = 0
    Cancel = True 'pour quitter la cellule (à la place bidouillage)
    
    Application.ScreenUpdating = True
    Application.EnableEvents = True
ElseIf Not Application.Intersect(Target, [C57]) Is Nothing Then
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    y = y + 1
    [Q42].Value = y + [Q42].Value
    If [Q42].Value > 1 Then [Q42].Value = 0
    [CR3].Select
    Application.ScreenUpdating = True
    Application.EnableEvents = True
ElseIf Not Application.Intersect(Target, [O44]) Is Nothing Then
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    z = z + 1
    [Q43].Value = z + [Q43].Value
    If [Q43].Value > 1 Then [Q43].Value = 0
    [CR3].Select
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End If
End Sub

EDIT je crois que j'ai oublié des cellules avec le sigma !?
mais il suffit de les rajouter dans le test
If Not (Target.Address = "$C$48:$D$48" Or Target.Address = "$C$57:$D$57") Then Exit Sub

exemple or Target.Address = "$O$44"
 
Dernière édition:
Re : Macro événementielle récalcitrante

Merci Roland M, ça marche très bien sans faire aucune modification supplémentaire.
Je me contenterai donc de votre solution.

Mais pourquoi donc le "Private Sub Worksheet_SelectionChange(ByVal Target As Range, Cancel As Boolean)" qui marchait très bien a-t-il subitement cessé de bien fonctionner ??

Bonne soirée.
 
Re : Macro événementielle récalcitrante

Bonjour,

Mais pourquoi donc le "Private Sub Worksheet_SelectionChange(ByVal Target As Range, Cancel As Boolean)" qui marchait très bien a-t-il subitement cessé de bien fonctionner ??
Bonne soirée.

Très probablement car les macros événementielles étaient désactivées:
Code:
Application.EnableEvents = False
Peut-être as-tu eu à un moment donné un bug lors de l'exécution de la macro mais entre temps l'instruction ci-dessus a été appliquée.
Donc la fois suivante il faut penser à réactiver les macros événementielles:
Code:
Application.EnableEvents = True
dans la fenêtre d'exécution (Ctrl+G dans VBE) par exemple.
 
Re : Macro événementielle récalcitrante

Bonsoir Skoobi,

Merci pour ta suggestion, il s'agissait bien d'un "Application.EnableEvents = True".

Curieusement, dans la macro événementielle cette sentence était bien écrite après chaque événement. Sans trop chercher à comprendre pourquoi, je l'ai glissée en fin de toutes les fonctions qui gèrent les calculs, bien qu'à aucun moment dans ces fonctions il y ait eu "Application.EnableEvents = False". Bref, maintenant ça marche, mais je reste somme toutes dubitatif.

Très bonne fin de soirée.
 
Re : Macro événementielle récalcitrante

bonsoir à tous

effectivement Skoobi(que je salue) à tout à fait raison !

par-contre c'est beaucoup plus judicieux d'utiliser le double clic pour des cellules bien définies
pour qu'il n'y ai pas constamment d'action "événement" à chaque intervention dans la feuille
et ce qui évite l'utilisation de Application.EnableEvents
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

A
Réponses
7
Affichages
1 K
altra83
A
M
Réponses
6
Affichages
2 K
Maryloo2005
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…