Msgbox VbYesNo (modification des cellules)

Bonjour,

Je voudrais tester deux solutions sur la modification des cellules

1) demander une confirmation de changement de valeur

2) Enregistrer sur une autre feuille (log) les modification (Colonne A=emplacement de la cellule et colonne B=la date etc..)

Déjà pour le 1, j'ai mis cette source et le problème est que si je répond "non" à la question la fenêtre (msgbox) revient à la charge

Je vous laisse un fichier d'exemple.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D4:G29")) Is Nothing Then
    a = MsgBox("Attention, vous vous apprêtez à modifier cette valeur. Continuer ?", vbYesNo)
    If a = vbYes Then Exit Sub Else ok = False: Target = val: Exit Sub
End If

End Sub

Merci pour votre aide.

Eric

Bonjour,

Pour le 1 déjà, en mettant à la ligne , EDIT : mais ça n'empêche pas d'entrer la valeur comme cela. Mais je suis une bille en vba donc je vais trop dire de bêtises

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D4:G29")) Is Nothing Then
    a = MsgBox("Attention, vous vous apprêtez à modifier cette valeur. Continuer ?", vbYesNo)
    If a = vbYes Then Exit Sub
    Else: ok = False: Target = val:
    Exit Sub
End If

End Sub

Merci Thrrybo
Mais si je dis "Non" il garde quand même la valeur que je viens de rentrer

Tu as devancé mon EDIT

Voilà j'ai réussi, je donne ma solution qui n'est pas forcement la meilleur :

Dim a
Dim val
Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If ok = True Then Exit Sub
If Not Application.Intersect(Target, Range("D4:G29")) Is Nothing Then 
Emplacement = Split(Columns(Target.Column).Address(ColumnAbsolute:=False), ":")(1) & Target.Row 
Fin = Sheets("log").Cells(Rows.Count, 1).End(xlUp).Row + 1 
Sheets("log").Range("A" & Fin).Value = Emplacement 
Sheets("log").Range("B" & Fin).Value = Date 
Sheets("log").Range("C" & Fin).Value = val 
Sheets("log").Range("D" & Fin).Value = Target 
a = MsgBox("Attention, vous vous apprêtez à modifier cette valeur. Continuer ?", vbYesNo)
If a = vbYes Then Exit Sub Else ok = True:: Target = val 
End If 
ok = False 
End Sub 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
val = Target.Value 
End Sub 

Bonjour,

Un essai :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ValeurPrec As String, ValeurNew As String, Lig As Long

If Not Application.Intersect(Target, Range("D4:G29")) Is Nothing Then
    Application.EnableEvents = False 'Désactive les événements (sinon la macro se relance en boucle)
    ValeurNew = Target.Value
    Application.Undo
    ValeurPrec = Target.Value
    If MsgBox("Attention, vous vous apprêtez à modifier cette valeur. Continuer ?", vbYesNo) = vbYes Then
        Target = ValeurNew
        'Enregistrement des modifications
        With Sheets(2) 'Feuille n°2
            Lig = .Range("A" & Rows.Count).End(xlUp).Row + 1
            .Range("A" & Lig) = Replace(Target.Address, "$", "") 'Cellule
            .Range("B" & Lig) = Now 'Date et heure
            .Range("C" & Lig) = ValeurPrec 'Ancienne valeur
            .Range("D" & Lig) = ValeurNew 'Nouvelle valeur
        End With
    End If
    Application.EnableEvents = True
End If

End Sub
Rechercher des sujets similaires à "msgbox vbyesno modification"