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

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
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
If Not Plg3 Is Nothing Then Target.Value = "VRAI"
Cordialement.
Daniel
Emile63 avait écrit le 12/10/2015 :
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
'--------------------------------------------
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
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
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
'----------------------------------------------------------------
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
c'est tout bon, cette fois on à fait le tour de la question.
Merci beaucoup.
Cordialement,
Emile