Bonjour encore,
La novice que je suis s'est lancée dans la réalisation de macro
Pas peu fière de moi (car oui même si pour vous c'est hyper easy pour moi cela relève plutôt du miracle) ma macro consiste en :
Je modifie ma cellule et un evénement msgbox s'ouvre pour confirmer la modification si "oui" on valide la cellule si "non" on remet la cellule précédente qui a été enregistrée.
En simultané à chaque modification de ces cellules un historique de modification s'ouvre dans la feuille "QQOQCCP" avec les champs Qui, Quoi, Quand(date), Quand(heure), Valeur avant modif, Valeur Après modif, et un champs Pourquoi qui doit être rempli par le modificateur (si il décide de modifier la cellule un userform apparaît)
Cette macro fonctionne très bien (ou presque) pour Range("D6: D2000") mais rien ne se passe pour Range("F6:BXY2000")
Aussi lorsque les lignes Worksheets("QQOQCCP").Cells(Rows.Count, 7).End(xlUp).Offset(1, 0).Value="..." prennent uniquement en compte la cellule d'au dessus et non pas la ligne, il suffit qu'une cellule soit vide et le End(xlUp) va automatiquement sur la ligne déjà renseignée mais avec 1 cellule vide ce qui risque de provoquer un décalage dans mon historique QQOQCCP, comment empêcher ça ?
Enfin j'aurai voulu que pour la plage "F6:BXY2000" un message un peu différent s'affiche lors de la modification, en précisant dans la feuille "QQOCCCP" si on a modifié sur la plage "D6: D2000" ou "F6:BXY2000" (en rajoutant une colonne "type de modification" par exemple)
Je ne sais pas si j'ai été très claire, mais voici mon petit code et merci d'avance à mes futurs sauveurs!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 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 Worksheets("QQOQCCP").Cells(Rows.Count, 7).End(xlUp).Offset(1, 0).Value = "Pas de modification" Else Pourquoi.Show 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
Partager