VBA: Quand changement de valeur d'une cellule= VRAI

7 réponses
Avatar
Emile63
Bonjour =E0 tous,

Sur des cellules non-contigues, que j'ai nomm=E9es: Ok_1,Ok_2,Ok_3,Ok_4,Ok_=
5, je cherche =E0 avoir VRAI, si l'une d'entre-elle change de contenu, avec=
l'=E9v=E9nementielle:
Private Sub Worksheet_Change(ByVal Target As Range)

......

Set Plg3 =3D Union([Ok_1].Value, [Ok_2].Value, [Ok_3].Value, [Ok_4].Value, =
[Ok_5].Value)

If Not Plg3 Is Nothing Then
.......
End If


Je brode autour de ce "si", Malheureusement sans grand succ=E8s... :-(

Si quelqu'un pouvait me mettre sur la piste ?!

Je vous remercie d'avance pour votre sollicitude.
Meilleures salutations.
Emile

7 réponses

Avatar
DanielCo
Bonjjour,
If Not Plg3 Is Nothing Then Target.Value = "VRAI"
Cordialement.
Daniel

Emile63 avait écrit le 12/10/2015 :
Bonjour à tous,

Sur des cellules non-contigues, que j'ai nommées: Ok_1,Ok_2,Ok_3,Ok_4,Ok_5,
je cherche à avoir VRAI, si l'une d'entre-elle change de contenu, avec
l'événementielle: Private Sub Worksheet_Change(ByVal Target As Range)

......

Set Plg3 = Union([Ok_1].Value, [Ok_2].Value, [Ok_3].Value, [Ok_4].Value,
[Ok_5].Value)

If Not Plg3 Is Nothing Then
.......
End If


Je brode autour de ce "si", Malheureusement sans grand succès... :-(

Si quelqu'un pouvait me mettre sur la piste ?!

Je vous remercie d'avance pour votre sollicitude.
Meilleures salutations.
Emile
Avatar
MichD
Bonjour,

Attention : Ce que tu veux passer c'est chacune de cellules comme objet "Range" et non
pas la valeur des cellules. Regarde l'exemple...
Set Plg3 = Union([Ok_1].Value, [Ok_2].Value, [Ok_3].Value, [Ok_4].Value, [Ok_5].Value)


Comme ceci :

'--------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range

Set Rg = Intersect(Target, Union([Ok_1], [Ok_2], [Ok_3], [Ok_4], [Ok_5]))

Application.EnableEvents = False
If Not Rg Is Nothing Then
For Each C In Rg
MsgBox "la cellule """ & C.Address & """ est passée à ""VRAI""."
Next
End If
Application.EnableEvents = True

End Sub
'--------------------------------------------
Avatar
Emile63
Merci DanielCo pour le coup de main :-)

J'ai l'impression que mon problème démarre ici:
Set Plg3 = Union([Ok_1].Value, [Ok_2].Value, [Ok_3].Value, [Ok_4].Value, [Ok_5].Value)

Car, que j'ai ou pas, un contenu dans l'une des cellules nommées, Plg3 re ste toujours sur "nothing"
Du coup, mon If ne rentre jamais en VRAI

If Not Plg3 Is Nothing Then
Target = [Ok_Ko].Find(Target).Offset(, 1).Value
End If
Avatar
Emile63
Rebonjour à tous,

Merci MichD, tu m'as mis sur la piste. :-)
Maintenant ça fonctionne mieux..

Set Plg3 = Intersect(Target, Union([Ok_1], [Ok_2], [Ok_3], [Ok_4], [Ok_5] ))
If Not Plg3 Is Nothing Then Target = [Ok_Ko].Find(Target).Offset(, 1).Value

Quand je ne suis pas sur la plage Ok_1, 2, 3 etc.. il n'entre pas dans le " If" et quand je suis dessus, Oui. ;-)
C'est mieux, mais dans l'absolu (de rapidité), je cherchais à ne pas en trer dans le "if" si les cellules regroupés dans "union" sont vides, d'ou "la valeur", mais qui ne fonctionnait pas..
Si on peu améliorer, tant mieux, sinon je prends comme ça.
Encore merci et bonne après-midi, à vous.

Emile
Avatar
MichD
'----------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range

Set Rg = Intersect(Target, Union([Ok_1], [Ok_2], [Ok_3], [Ok_4], [Ok_5]))

Application.EnableEvents = False
If Not Rg Is Nothing Then
If Application.CountIf(Rg, "<>") > 0 Then
For Each C In Rg
MsgBox "la cellule """ & C.Address & """ est passée à ""VRAI""."
Next
End If
End If
Application.EnableEvents = True

End Sub
'----------------------------------------------------------------
Avatar
MichD
Si tu veux que cela s'applique seulement dans le cas où le contenu d'une ou
plusieurs cellules contient l'expression "Vrai" :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range

Set Rg = Intersect(Target, Union([Ok_1], [Ok_2], [Ok_3], [Ok_4], [Ok_5]))
Application.EnableEvents = False
If Not Rg Is Nothing Then
If Application.CountIf(Rg, "<>VRAI") > 0 Then
For Each C In Rg
If UCase(C.Value) = "VRAI" Then
MsgBox "la cellule """ & C.Address & """ est passée à ""VRAI""."
End If
Next
End If
End If
Application.EnableEvents = True
End Sub
Avatar
Emile63
Re-bonjour MichD,

c'est tout bon, cette fois on à fait le tour de la question.
Merci beaucoup.
Cordialement,
Emile