Msgbox de confirmation [Résolu]

Annapouet 2 Messages postés mardi 5 février 2008Date d'inscription 6 février 2008 Dernière intervention - 5 févr. 2008 à 14:39 - Dernière réponse : PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention
- 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.
Afficher la suite 

6 réponses

Répondre au sujet
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 6 févr. 2008 à 00:17
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_MPi
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 5 févr. 2008 à 15:16
0
Utile
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
Commenter la réponse de cs_Exploreur
cs_MPi 3863 Messages postés mardi 19 mars 2002Date d'inscription 13 mars 2018 Dernière intervention - 6 févr. 2008 à 00:21
0
Utile
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
Commenter la réponse de cs_MPi
Annapouet 2 Messages postés mardi 5 février 2008Date d'inscription 6 février 2008 Dernière intervention - 6 févr. 2008 à 08:54
0
Utile
Merci beaucoup pour vos réponses rapides. Tout marche nikel ^^
Commenter la réponse de Annapouet
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 6 févr. 2008 à 10:24
0
Utile
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
Commenter la réponse de jrivet
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 6 févr. 2008 à 15:37
0
Utile
validé et déplacé vers VBA !
(bonjour à tous)
Commenter la réponse de PCPT

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.