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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
DanielCo
Le #26371503
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
MichD
Le #26371500
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
'--------------------------------------------
Emile63
Le #26371506
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
Emile63
Le #26371513
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
MichD
Le #26371518
'----------------------------------------------------------------
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
'----------------------------------------------------------------
MichD
Le #26371517
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
Emile63
Le #26371526
Re-bonjour MichD,

c'est tout bon, cette fois on à fait le tour de la question.
Merci beaucoup.
Cordialement,
Emile
Publicité
Poster une réponse
Anonyme