XL 2010 Non Déclenchement Evenement WorkSheet_Change

cp4

XLDnaute Barbatruc
Bonsoir,
J'ai inséré des cases à cocher (formulaire) en colonne C liées aux cellules en colonne B.
En cochant/décochant mon code ne fonctionne pas.
Un peu perdu merci pour votre aide.
 

Pièces jointes

  • WorkSheet_Change.xlsm
    16.3 KB · Affichages: 7

Dudu2

XLDnaute Barbatruc
Bonjour,

Le Worksheet_Change() n'a rien à voir avec les cases à cocher bien que la cellule associée change de valeur. Et ça parait bizarre mais c'est comme ça.
Comme ces cases sont des Contrôles de Formulaire, il faut que tu affectes un Macro à chaque case à cocher (clic droit sur la case à cocher, puis affecter une macro).

Si ces cases à cocher étaient des Contrôles Active X, il faudrait passer en mode Création puis double-cliquer sur la case à cocher pour que le Sub de l'évènement correspondant s'inscrive automatiquement dans le code de la feuille (Parent du Contrôle Active X).
 

Dudu2

XLDnaute Barbatruc
Je pense que c'est pour ne pas cumuler 2 actions sur un Contrôle de Formulaire:
- L'action liée à l'éventuelle macro associée au Contrôle.
- L'action liée à un Worksheet_Change() qui viendrait en double et peut-être en conflit.
 

cp4

XLDnaute Barbatruc
Bonjour @Marcel32 ;), @Dudu2 ;),

Je vous remercie pour votre retour et explications. Mais je reste perplexe. En effet, je ne comprends pas la raison du non déclenchement de l’évènement étant donné que la valeur d'une cellule liée change.
Je me demandais si mon code ci-dessous est incorrect
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dl As Long, Rng As Range
dl = UsedRange.Cells(UsedRange.Cells.Count).Row
Set Rng = Range("B6:B" & dl)

    If Target.Count > 1 Then Exit Sub
'    If Not Intersect(Target, Rng) Is Nothing Then
    If Intersect(Target, Rng) Then

        If Target.Value = "VRAI" Then
            MsgBox "je copie"
        Else
            MsgBox "j'efface"
        End If

    End If
End Sub
Merci beaucoup.

Bonne journée.
 

job75

XLDnaute Barbatruc
Bonjour cp4,, Marcel32, Dudu2, le forum,

Les cellules liées aux contrôles de formulaire (case à cocher, case d'option, barre de défilement) ne créent pas d'évènement Change quand elles sont modifiées par le contrôle, c'est facile à vérifier.

A+
 

cp4

XLDnaute Barbatruc
Bonjour cp4,, Marcel32, Dudu2, le forum,

Les cellules liées aux contrôles de formulaire (case à cocher, case d'option, barre de défilement) ne créent pas d'évènement Change quand elles sont modifiées par le contrôle, c'est facile à vérifier.

A+
Bonjour Job75;),

Merci pour ton retour. Justement, je suis sur l'une de tes contributions pour un problème similaire, où tu préconises d'utiliser l'évènement Calculate. Je suis entrain d'essayer de m'en sortir avec ton idée.

Bonne journée.
 

Dudu2

XLDnaute Barbatruc
Bonjour @job75, @cp4,
c'est facile à vérifier
En effet, il suffit de mettre simplement un MsgBox dans le Worksheet_Change() et on le constate sans chipoter sur la question :p.
utiliser l'évènement Calculate
Alors ça c'est comme chercher le passage de Nord-Est pour aller de Paris à Versailles.

Pourquoi faire simple, comme expliqué précédemment, en associant une macro à une case à cocher Contrôle de Formulaire (ce que tu as choisi de faire) ou si c'est une case à cocher Contrôle Active X, en gérant son évènement _Click() quand on peut faire très compliqué et non fonctionnel. 😅
 

Dudu2

XLDnaute Barbatruc
Je suggère cette solution comme alternative au "pourquoi faire simple"...
Avec un Application.Ontime(), lancer chaque seconde une fonction qui va scanner toutes les cases à cocher de la feuille et comparer le contenu de leurs cellules associées avec ce même contenu précédent stocké dans une table. Évidemment la résolution étant la seconde, on ne percevra pas les clics On/Off faits rapidement. Mais est-ce important ?
 

cp4

XLDnaute Barbatruc
Bonjour @Dudu2 ;),
kker un membre, ce qui m'a permis d'apprendre que les cellules liées ne déclenche pas d'évènements. J'ai monté le fichier joint juste pour illustrer la demande (mais avec des cases à cocher pour chacune des lignes. D'ailleurs, il n'est allé jusqu'à sa dernière ligne).
Et, J'ai eu un doute sur mon code d'où cette discussion. En essayant d'aider, je découvre beaucoup de chose que je connaissais pas.
Je lui ai proposé une solution avec userform, à lui de voir si ça lui convient.

Merci.

Bon week-end.
 

Statistiques des forums

Discussions
312 797
Messages
2 092 211
Membres
105 285
dernier inscrit
SBE