Événement Worksheet_Change non détecté

Mais Coudonc

XLDnaute Nouveau
Bonjour aux lecteurs et collaborateurs d'ExcelDownloads.

J'ai une interrogation relative à un événement Worksheet_Change où je fais intervenir une condition Intersect.

Avant d'afficher le bout de code, voici la mise en situation.

J'ai une case à cocher (de la boite à outil Formulaire) en A1.

J'ai une cellule liée à cette case à cocher en B1 (TRUE ou FALSE).

Et ainsi de suite pour les dix premières lignes.

Ma macro, sur événement Worksheet_Change porte la condition Intersect avec Target & Range("B1:B10").

Or, comme c'est le résultat de la case à cocher qui fait varier la valeur dans B1, il ne semble pas que l'événement soit détecté (comme si la valeur avait été modifiée manuellement par un utilisateur).

Quelqu'un pourrait m'éclairer sur une façon de détecter un changement de valeur dans la colonne B, par action de la case à cocher, pour enclencher la macro ?

J'aimerais en fait que la case à cocher amène l'inscription de la valeur "0" dans la colonne C (sur une condition), pour chaque ligne modifiée, corrrespondante de la plage B1 à B10.

Merci de votre aide !

Private Sub Worksheet_Change(ByVal Target As Range)
Set Plage = .Range("B1:B10")
If Not Intersect(Target, Range("B1:B10")) Is Nothing Then
For Each cell In Plage
If cell.Value = True Then
Range.ActiveCell.Offset(0, 1).Select
ActiveCell.Value = "0"
End If
Next
End If
End Sub
 
Dernière édition:

CHALET53

XLDnaute Barbatruc
Re : Événement Worksheet_Change non détecté

bonjour, normalement ça doit marcher

Regarde l'exemple (click sur le checkbox1 qui aliment F2)
Peut-être que l'événementiel est désactivé
Lance la macro que j'ai mis dans le module 1 pour réactiver

a+
 

Pièces jointes

  • Coudonc.xls
    64 KB · Affichages: 23

mécano41

XLDnaute Accro
Re : Événement Worksheet_Change non détecté

Bonjour à tous,

Sinon, peut-être ceci avec un module de classe pour traiter les 10...(les conditions sont bidons)

Ne pas oublier de lancer le Sub Initialisation par le code (ici c'est par le bouton)


Cordialement
 

Pièces jointes

  • Essai module classe et OleObject 2.xlsm
    36.4 KB · Affichages: 26
  • Essai module classe et OleObject 2.xls
    48.5 KB · Affichages: 24
Dernière édition:

Si...

XLDnaute Barbatruc
Re : Événement Worksheet_Change non détecté

salut

une autre proposition (peut-être hors sujet) mais la demande est encore floue à mes yeux. Quand faut-il écrire les 0 ? Faut-il vraiment choisir B1 comme cellule liée, que faut-il prévoir en cas de corrections ... ?
 

Pièces jointes

  • Case à cocher.xls
    32.5 KB · Affichages: 29
  • Case à cocher.xls
    32.5 KB · Affichages: 28
  • Case à cocher.xls
    32.5 KB · Affichages: 22

Mais Coudonc

XLDnaute Nouveau
Re : Événement Worksheet_Change non détecté

Bonjour XLDnaute Accro,
Votre classeur Case à cocher.xls montre bien le problème que j'ai pour intercepter un événement sans qu'un utilisateur doive faire une modification manuelle en colonne B (plage en trame jaune). En fait, dans mon bout de code, je passe peut-être par Rome pour aller à Québec (expression qui fait du sens pour nous au Québec.....) mais j'aurais aimé automatiser l'insciption d'une valeur zéro, dnas une plage à vérifier de 10 lignes, chaque fois qu'une case à cocher était cochée. Effectivement, l'utilisation d'une cellule liée n'est peut-être pas indiquée. Elle témoigne peut-être seulement de mes connaissances plus limitées en VBA.
 

job75

XLDnaute Barbatruc
Re : Événement Worksheet_Change non détecté

Bonjour à tous,

Le vrai problème posé par le post #1 c'est qu'une case à cocher Formulaire ne crée pas d'événement Change.

Sur Excel 2003 en tout cas. Edit : et sur Excel 2010 c'est pareil.

Donc la macro Worksheet_Change ne s'exécute pas quand on clique sur une case à cocher.

On peut contourner le problème en utilisant l'événement Calculate :

Code:
Private Sub Worksheet_Calculate()
Dim Plage As Range, cel As Range
Set Plage = [B1:B10]
Application.EnableEvents = False
For Each cel In Plage
  cel.Offset(, 1) = IIf(cel, 0, "")
Next
Application.EnableEvents = True
End Sub
Mais pour créer cet événement il faut dans la feuille une fonction volatile, comme AUJOURDHUI() en G1.

Cela dit quel est l'intérêt d'utiliser VBA ???

Il suffit d'utiliser (en D1) la formule =SI(B1;0;"")

Fichier joint.

A+
 

Pièces jointes

  • Cases à cocher(1).xls
    38 KB · Affichages: 23
  • Cases à cocher(1).xls
    38 KB · Affichages: 30
  • Cases à cocher(1).xls
    38 KB · Affichages: 30
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 853
Membres
103 975
dernier inscrit
denry