Microsoft 365 alerte si cellule change de valeur

thenesol

XLDnaute Junior
bonjour à tous

j'ai essayé ce code
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    ' Spécifiez les cellules nommées à surveiller
    Dim CellulesSurveillees As Range
'    Set CellulesSurveillees = Union(Me.Range("OK_Formules"), Me.Range("OK_cellErr"), Me.Range("Tot_Ctrl")) ' Ajoutez toutes les cellules nommées
    Set CellulesSurveillees = Me.Range("B2") ' Ajoutez toutes les cellules nommées


    ' Vérifiez si l'une des cellules modifiées est surveillée
    If Not Application.Intersect(Target, CellulesSurveillees) Is Nothing Then
        ' Affichez une alerte
        MsgBox "La valeur d'une des cellules surveillées a changé !"
    End If
End Sub

qui ne génère pas de message quand B2 (qui contient la formule = A1+A2) change de valeur

pourquoi ...?

merci !
 

thenesol

XLDnaute Junior
j'ai bien essayé les 2 , mais j'ai constaté que :

1/ avec Worksheet_Calculate , nécessite de préciser la valeur (et non pas un changement quelconque)
Private Sub Worksheet_Calculate()
If Range("B2") = 5 Then MsgBox "attention !!"
End Sub
si ça devient autre chose que 5, pas d'alerte

et 2/ avec Worksheet_Change, il faut saisir manuellement dans B2 pour avoir une alerte

est-ce bien le cas ?
si oui, impossible de surveiller un changement sur B2 (sans surveiller A1 ou A2 qui n'étaient que pour exemple)?
 

job75

XLDnaute Barbatruc
VB:
Private Sub Worksheet_Calculate()
MsgBox "attention !!"
End Sub
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [B2].DirectPrecedents) Is Nothing Then MsgBox "attention !!"
End Sub
 

thenesol

XLDnaute Junior
ça marche...! :)
mais avec 1 seule cellule :confused:

j'ai tenté sur plusieurs cellules avec Union mais ça plante sur la ligne "set...union..."
(et ensuite, je tenterai aussi des cellules nommées)

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    ' Spécifiez les cellules nommées à surveiller
    Dim CellulesSurveillees As Range
'    Set CellulesSurveillees = Union(Me.Range("OK_Formules"), Me.Range("OK_cellErr"), Me.Range("Tot_Ctrl")) ' Ajoutez toutes les cellules nommées
    Set CellulesSurveillees = Union(Me.Range([A13].DirectPrecedents), Me.Range([A14].DirectPrecedents), Me.Range([K16].DirectPrecedents)) ' Ajoutez toutes les cellules nommées
'    Set CellulesSurveillees = Me.Range("B2") ' Ajoutez toutes les cellules nommées
    ' Vérifiez si l'une des cellules modifiées est surveillée
    If Not Application.Intersect(Target, CellulesSurveillees) Is Nothing Then
        ' Affichez une alerte
        MsgBox "La valeur d'une des cellules surveillées a changé !"
    End If
End Sub
 

Jacky67

XLDnaute Barbatruc
Bonjour à tous,
Ceci ne fonctionne pas ?
VB:
Option Explicit
Dim tmp


Private Sub Worksheet_Change(ByVal Target As Range)
    If [b2].Value <> tmp Then MsgBox "La valeur d'une des cellules surveillées a changé !"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    tmp = [b2].Value
End Sub
 

thenesol

XLDnaute Junior
super, merci encore !

dernière chose : si je lance une macro vb qui va traiter ma feuille (elle dure plusieurs minutes), y a t il une méthode propre pour qu'elle ne soit pas interrompue par ce contrôle, juste le temps de son execution, à part effacer ce code ?
 

job75

XLDnaute Barbatruc
Il suffit de désactiver les évènements puis de les réactiver :
VB:
Application.EnableEvents = False
'ici votre code
Application.EnableEvents = True
Attention, ne pas sortir de la macro avant que les évènements soient réactivés.
 

Discussions similaires

Réponses
2
Affichages
210
Réponses
7
Affichages
399

Statistiques des forums

Discussions
312 964
Messages
2 094 010
Membres
105 912
dernier inscrit
willou3869