Msgbox de confirmation

Résolu
Annapouet Messages postés 2 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 6 février 2008 - 5 févr. 2008 à 14:39
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 6 févr. 2008 à 15:37
Bonjour a tous,

Tout d'abord sachez que je débute en VBA. Ne m'en voulez pas si je n'arrive pas a suivre ^^

Voila mon soucis:

J'ai créer un classeur excel avec diverses données.
Pour une plage de données je ne veux pas que quelqu'un modifie les valeurs par inadvertance. Je souhaitais donc créer une msgbox qui demande à la personne modifiant ces valeurs si elle est bien sur de vouloir le faire (car modifier une de ces valeurs revient a modifier toutes les autres données qui partent de la par le calcul)

J'ai donc créer ma box avec la question (souhaitez vous vraiment modifier cette cellule?) et mes deux boutons (oui/non)

Lorsque je clique sur Oui, nikel, la box se ferme et ma cellule est modifiée
Lorsque je clique sur Non, le probleme survient... je n'arrive pas a faire en sorte que la donnée précédente reprenne sa place. Soit ca donne une boucle qui me relance la box, soit ca fais exactement la meme chose que quand je clique sur oui.

Je vous affiche mon ébauche VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("D5:D68")
reponse = MsgBox("Etes-vous sûr(e) de vouloir modifier cette valeur?", vbYesNo + vbQuestion, "Confirmation")
If reponse = vbYes Then
   Exit Sub
End If
If reponse = vbNo Then
Application.SendKeys "{ESC}" 'j'avais essayé application.undo avant ca'
End If
End Sub

J'ai un autre soucis qui fait que la msgbox s'etend a toutes les cellules de la feuille... est ce normal?

Merci de bien vouloir m'aider.

6 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
6 févr. 2008 à 00:17
Salut,

Inspire-toi de ceci

Option Explicit

Dim Valeur As Variant
Dim EnEdition As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rep As Integer
   
    If Not EnEdition Then
        If Not Application.Intersect(Target, Range("A1:F30")) Is Nothing Then
            Rep = MsgBox("Voulez-vous vraiment modifier cette cellule (" & Target.Address & ")", vbYesNo)
            If Rep = vbNo Then
                EnEdition = True
                Target.Value = Valeur
                EnEdition = False
                Exit Sub
            End If
        End If
    End If
End Sub

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

Comme un changement de cellule rappelle toujours Worksheet_Change, il faut y aller avec une variable booléenne (EnEdition, ici) qui évite de revenir continuellement dans l'événement.

Dans SelectionChange, il faut stocker la valeur avant qu'elle ne soit modifiée. Et comme ce sont des événements indépendants, il faut déclarer les 2 variables en dehors des procédures pour qu'elles soient reconnues dans une ou l'autre.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
5 févr. 2008 à 15:16
Salut,

J'y vais à taton...essaye cela défois que :

Private Sub Command1_Click()


'<E> Déclaration
     Dim sValeur As Variant
  '<E> Récupération valur cellule
       sValeur = Range("D5:D68").Value
      
'<E> MsgBox de confirmation modification
     If MsgBox("Etes-vous sûr(e) de vouloir modifier cette valeur?", vbYesNo + vbQuestion, "Confirmation") = vbYes Then
        '<E> Réponse Oui
        Exit Sub
     End If


' Réponse Non
 Range("D5:D68").Value = sValeur


End Sub


A+
Exploreur

 Linux a un noyau, Windows un pépin
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
6 févr. 2008 à 00:21
J'ai oublié de préciser que le Intersect sert à définir le Range qui sera considéré. Ici, j'ai mis A1 à F30, donc à toi de modifier au besoin.

Aussi, et ce n'est pas le moindre, si tu modifies une seule cellule, ça devrait bien fonctionner. Mais si tu sélectionnes plusieurs cellules et que tu les modifies d'un coup, ou si tu copies/colles plusieurs cellules, tu auras une belle erreur, si je ne me trompe... Il faudrait alors insérer une boucle pour lire chaque cellule modifiée... et je te laisse chercher un peu la solution...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Annapouet Messages postés 2 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 6 février 2008
6 févr. 2008 à 08:54
Merci beaucoup pour vos réponses rapides. Tout marche nikel ^^

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
6 févr. 2008 à 10:24
Salut,

[auteur/ANNAPOUET/1297726.aspx >Annapouet]:Si tout marche nickel, merci de valider les réponses t'ayant aidé à avancer

@+: Ju£i?n
Pensez: Réponse acceptée
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 févr. 2008 à 15:37
validé et déplacé vers VBA !
(bonjour à tous)
Rejoignez-nous