Msgbox confirmer modification cellule VBA

Bonjour encore,

Je crée un autre sujet pour ne pas se mélanger les pinceaux

J'ai fait cette macro pour envoyer un message de confirmation si oui on valide la cellule si non on remet la cellule précédente qui a été enregistrée.

Cette macro fonctionne très bien pour Range("D6:D2000") mais rien ne se passe pour Range("F6:BXY2000")

Quelqu'un peut m'éclairer?

Merci d'avance vous êtes les meilleurs !

Option Explicit
Dim ValCell As Variant
Dim PreviousValue As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("D6:D2000")) Is Nothing _
  Or Application.Intersect(Target, Range("F6:BXY2000")) Is Nothing Then
  Application.EnableEvents = False
   If MsgBox("Êtes-vous certain de modifier la révision", vbYesNo + vbExclamation + vbDefaultButton2) = vbNo Then
    Target.Value = ValCell
   End If
  Application.EnableEvents = True
 End If
If Target.Value <> PreviousValue Then
Worksheets("QQOQCCP").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Environ("Username")
Worksheets("QQOQCCP").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Value = Cells(Target.Row, 2).Value
Worksheets("QQOQCCP").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Value = ValCell
Worksheets("QQOQCCP").Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Value = Target.Value
Worksheets("QQOQCCP").Cells(Rows.Count, 5).End(xlUp).Offset(1, 0).Value = Date
Worksheets("QQOQCCP").Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Value = Hour(Now) & ":" & Minute(Now)
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D6:D2000")) Is Nothing _
  Or Application.Intersect(Target, Range("F6:BXY2000")) Is Nothing Then
ValCell = Target

End If
End Sub

Bonsoir,

Qui, Quoi, Où, Quand, Comment,...

Essayez de remplacer :

If Not Application.Intersect(Target, Range("D6:D2000")) Is Nothing _

Or Application.Intersect(Target, Range("F6:BXY2000")) Is Nothing Then

Par

If Not Application.Intersect(Target, Range("D6:D2000"), Range("F6:BXY2000")) Is Nothing Then

@ bientôt

LouReeD

Bonjour,

If Not Application.Intersect(Target, Range("D6:D2000")) Is Nothing _
  Or Not Application.Intersect(Target, Range("F6:BXY2000")) Is Nothing Then

Et salut LouReed ! (tu dormais déjà un peu ? )

Merci LouReed et MFerrand ! Je me suis aperçue de mon erreur en effet et ai un peu revu mon fichier

Seulement des problèmes des persistent : rien ne s'affiche dans la colonne "pourquoi"

Si je supprime une cellule cela n'apparaît pas dans l'historique elle est juste supprimée

Au lancement et (uniquement au lancement) du fichier si je modifie une cellule et que je choisi "non" elle disparaît (je ne comprends pas pourquoi) et en conséquence du premier point n'apparaît pas dans l'historique (je ne vois pas d'où vient l'erreur)

Option Explicit
Dim ValCell As Variant
Dim PreviousValue As Variant
Dim MaLigne As Long
Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("D6:D2000")) Is Nothing _
  Or Not Application.Intersect(Target, Range("F6:BXY2000")) Is Nothing Then
  Application.EnableEvents = False
     With Worksheets("QQOQCCP")
  ' calcul de la première ligne vide sur les 8 colonnes
  MaLigne = .UsedRange.Resize(, 8).Find("*", , , , xlRows, xlPrevious).Row + 1
    If MsgBox("Êtes-vous certain de modifier la révision", vbYesNo + vbExclamation + vbDefaultButton2) = vbNo Then
    Target.Value = ValCell
    .Cells(MaLigne, 8).Value = "Pas de modification"
       Else
    Pourquoi.Show
    End If
                        ' on injecte les 7 valeurs directement en passant un tableau
            If Target.Value <> PreviousValue Then
                .Cells(MaLigne, 1).Resize(1, 8).Value = Array(Environ("USERNAME"), _
                       Cells(Target.Row, 2).Value, _
                       ValCell, Target.Value, _
                       IIf(Target.Column = 4, _
                      "Révision du document " & Cells(Target.Row, 2).Value, _
                      "Prise en compte du document " & Cells(2, Target.Column).Value), _
                       Date, _
                      Hour(Now) & ":" & Minute(Now), Pourquoi.TextBox1.Value)
          End If
        End With
    End If
  Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D6:D2000")) Is Nothing _
  Or Not Application.Intersect(Target, Range("F6:BXY2000")) Is Nothing Then
ValCell = Target
End If
End Sub

Bonjour,

xlByRows (au lieu de xlRows)

Je ne vois pas où est définie PreviousValue.

Pour le reste, pas d'élément d'appréciation.

j'ai allégé le code,

le dernier problème qui persiste est que rien ne s'affiche dans la colonne "pourquoi" (8ème colonne de la worksheet("QQOQCCP")) je voudrais y faire apparaître le message du textbox1 inclu dans le userform appelé "pourquoi"

Option Explicit
Dim Continuer As Integer, MaLigne As Long
Dim ValCell As Variant
Dim PreviousValue As Variant

Private Sub Worksheet_Change(ByVal Target As Range)

' on vérifie qu'on est sur l'une des deux plages, et on demande de continuer ou non
If Not Application.Intersect(Target, Range("D6:D2000")) Is Nothing _
Or Not Application.Intersect(Target, Range("F6:BXY2000")) Is Nothing Then
    Continuer = MsgBox("Êtes-vous certain de modifier la révision ", vbYesNo + vbExclamation + vbDefaultButton2)
Else
    Exit Sub
End If

Application.EnableEvents = False
    With Worksheets("QQOQCCP")
        ' calcul de la première ligne vide sur les 8 colonnes
        MaLigne = .UsedRange.Resize(, 8).Find("*", , , , xlRows, xlPrevious).Row + 1

        ' si on ne continue pas
        If Continuer = vbNo Then
            Target.Value = ValCell

        ' si on continue
        Else
             Pourquoi.Show
            ' on injecte les 8 valeurs directement en passant un tableau
            .Cells(MaLigne, 1).Resize(1, 8).Value = Array(Environ("USERNAME"), _
                                                              Cells(Target.Row, 2).Value, _
                                                              ValCell, Target.Value, _
                                                              IIf(Target.Column = 4, "Révision ligne", "Révision matrice"), _
                                                              Date, _
                                                              Hour(Now) & ":" & Minute(Now), Pourquoi.TextBox1.Text)
            End If
        End With
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("D6:D2000")) Is Nothing _
  Or Not Application.Intersect(Target, Range("F6:BXY2000")) Is Nothing Then
ValCell = Target
End If
End Sub

Vérifie que tu n'as pas fermé (déchargé) ton Userform.

La commande de mon bouton "valider" sur mon userform

Les unload me "décharge" le userform ?

Private Sub CommandButton1_Click()
If TextBox1.Text <> "" Then
Unload Me
Else
MsgBox "Veuillez saisir un argument"
End If
End Sub

Donc, en y faisant référence, tu le rappelles, mais ayant été réinitisalisé, la TextBox est vide... Pas d'erreur mais la valeur est "" !

A la place de Unload : Me.Hide

Et après ton affectation, tu peux faire : Unload Pourquoi (dans la proc. Change).

Mille merci mes sauveurs !

Je suis venu à bout de ce petit code !!!!!!!!

Juste une dernière question : le hide.me prend beaucoup de place ou pas? Car ça me parraît bien pratique de pouvoir réutiliser le texte précédent sans avoir à le retaper (si jamais l'argument est le même).

Si j'enregistre et que je referme le classeur, le userform se réinitialisera tout de même ? Car même si c'est pratique ça porte à confusion si ce n'est pas la même personne qui ré ouvre le fichier.

Merci encore

C'est : Me.Hide

et tu le mets simplement à la place de : Unload Me

Et dans ta procédure Change, tu as le fragment :

Else
    Pourquoi.Show
    .Cells(MaLigne, 1).......
    Unload Pourquoi
End If

[Si tu indentais correctement, on lirait plus vite... !]

Bonsoir,

merci de vos mercis !

Bonsoir MFerrand

Et salut LouReed ! (tu dormais déjà un peu ? )

Pourquoi ?

ma ré écriture ne marche pas ?

Pour ce qui est du Hide :

Hide cache le USF mais garde les données entrée.

Unload le ferme et vide les données, et l'initialisation sera lancée au "rallumage".

Dans les deux cas si le fichier est fermé, puis ouvert aucunes données n'est conservées.

@ bientôt

LouReeD

Salut LouReed !

Oh ! Je n'ai pas testé, mais l'intersection de 3 plages dont 2 ne peuvent avoir aucune instersection, est forcément nulle (Nothing en l'occurrence comme réponse).

Cordialement.

HA ok ! j'en apprend tous les jours !!!

je dois avouer que pour mois je le prener comme étant :

target intersection avec le premier range, puis target avec le deuxième range etc

Alors qu'en fait c'est l'intersection des différent range !!!!

Pauvre de moi

@ bientôt

LouReeD

Rechercher des sujets similaires à "msgbox confirmer modification vba"