VBA - Surveiller un changement de valeur dans une cellule

9info-q5-essai.xlsm (15.83 Ko)

Bonjour!
Je suis bloquée sur un exercice dont la consigne est la suivante

"Écrivez le code pour surveiller quand les valeurs dans C3 changent (par exemple, l'utilisateur change manuellement les valeurs) et demande à l'utilisateur de confirmer le changement avec une boîte de dialogue."

Mon programme est le suivant

Option Explicit

Dim dblOldValue As Double
Private Sub Worksheet_Change(ByVal Target As Range)
Dim j As Integer
Dim RangeSelected As Range
Dim Cell As Range
Dim answer As String

j = Cells(Rows.Count, 1).End(xlUp).Row

Set RangeSelected = Range(Cells(2, 3), Cells(j, 3))

answer = MsgBox("Are you sure about the change?", vbYesNo)
If answer = vbNo Then
Target.Value = dblOldValue
Exit Sub
End If

End Sub

'Here I get the previous value of the changed cell

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
dblOldValue = Target.Value
End Sub

le seul problème que je rencontre est que lorsque je clique sur non, la valeur de la cellule retourne bien à celle qu'elle était au début, mais la boite de dialogue continue d'apparaitre jusqu'à que je clique sur oui (et la valeur de la cellule reste l'ancienne)

est-ce que quelqu'un s'aurait comment faire pour que je puisse sortir du programme en cliquant sur non?

merci d'avance!

Bonjour,

Utilisez l'instruction :

Application.EnableEvents = False

qui empêchera Private Sub Worksheet_Change(ByVal Target As Range) de se déclencher lors de la "restauration" de la cellule cible :

If answer = vbNo Then
    Application.EnableEvents = False ' pour inhiber le déclenchement
    Target.Value = dblOldValue
    Application.EnableEvents = true' pour rétablir le déclenchement
    Exit Sub
End If

A+

Bonjour!

Merci beaucoup ça marche!

A+

vbYesNo retourne la valeur 6 pour oui, 7 pour non et 4 pour Annuler. Donc answer ne doit pas être une String. Il y a ça aussi.

D'accord je le change aussi!

je ne me suis pas rendue compte mais dans la question, ils demandent pour une colonne en particulier, mais moi ca le fait dans toute la feuille, comment puis je faire?

merci encore

La consigne demande de surveiller les changement de la cellule C3, ce n'est pas pour toute une colonne....

Voir l'utilisation de la méthode Intersect :

https://forum.excel-pratique.com/astuces/vba-utilisation-de-la-methode-intersect-1314

A+

Pardon j'ai traduit ma question de l'anglais au francais car mes cours sont en anglais, mais il s'agit bien de la colonne C. (troisieme colonne), nous utilisons la notation R1C1, c'est pour ca...

'Write the code to monitor when the values in C3 changes (e.g., the user manually changes the values) and asks the user to confirm the change with a dialog box.

je dois donc faire ca?

Option Explicit
Dim dblOldValue As Double
Private Sub Worksheet_Change(ByVal Target As Range)
Dim j As Integer
Dim RangeSelected As Range
Dim Cell As Range
Dim answer As Integer

j = Cells(Rows.Count, 1).End(xlUp).Row

If Not Application.Intersect(Target, Range(Cells(2, 3), Cells(j, 3)) Is Nothing Then

answer = MsgBox("Are you sure about the change?", vbYesNo)
If answer = vbNo Then
Application.EnableEvents = False
Target.Value = dblOldValue
Application.EnableEvents = True
Exit Sub
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Here I get the previous value of the changed cell so I have a "trace"
'and I can get back to it
dblOldValue = Target.Value
End Sub

Le mieux est d'essayer...

la plage "sensible" est limitée en colonne 3 aux lignes déjà renseignées à partir de la 2ème. Si une cellule vierge doit répondre à la même consigne, il faudra modifier cette plage.

vous devriez utiliser l'indentation du code ( et la mise en forme proposée par le site), ça facilite la lecture du concepteur et du lecteur, et ça peut mettre en évidence des oublis, des erreurs....

Bon courage

Ca a marche! merci beaucoup pour toute votre aide!

A+

Rechercher des sujets similaires à "vba surveiller changement valeur"