Msgbox de confirmation [Résolu]

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

Votre réponse

6 réponses

Meilleure réponse
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
3
Merci
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

Merci cs_MPi 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_MPi
Messages postés
4824
Date d'inscription
lundi 11 novembre 2002
Dernière intervention
15 novembre 2016
0
Merci
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
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Dernière intervention
23 août 2018
0
Merci
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
Messages postés
2
Date d'inscription
mardi 5 février 2008
Dernière intervention
6 février 2008
0
Merci
Merci beaucoup pour vos réponses rapides. Tout marche nikel ^^
Commenter la réponse de Annapouet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
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
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
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.