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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| Private Sub Worksheet_Change(ByVal Target As Range)
Dim PlageCellules As Range, Nbr As Integer, RgIndex As Integer, y As Integer
RgIndex = Target.Row 'pour récupérer l'index présent sur cette ligne
y = ActiveCell.Column ' pour identifier la colonne sur laquelle contrôler les doublons
' Cacher le travail d'Excel pour ne pas gêner l'utilisateur :
Application.ScreenUpdating = False
'Supprimer la protection de la feuille MAJ
Sheets("MAJ").Select
ActiveSheet.Unprotect "nath"
' 1 // Sur la partie gauche, suivre les mises à jour en passant les cellules modifiées en surbrillance
' et en les listant dans la feuille MAJ
' La variable PlageCellules contient les cellules dont les modifications seront suivies
Set PlageCellules = Sheets("Gestion").Range("C8:I800")
If Not Application.Intersect(Target, PlageCellules) Is Nothing Then
' Si l'une de ces cellules a été modifiée, alors
Target.Interior.Color = RGB(255, 255, 0) 'passer la cellule concernée en jaune
'Récupérer le nombre de ligne existant sur la feuille MAJ pour écrire dessous
Nbr = Sheets("MAJ").Range("G1").Value + 1 'le nombre de lignes est stocké en G1 de la feuille MAJ (écriture non visible)
'Alimenter la première ligne vide trouvée avec les différents éléments dans le tableau de la feuille MAJ :
Sheets("MAJ").Range("A" & Nbr) = Now '........................................................Date de modification
Sheets("MAJ").Range("B" & Nbr) = Environ("username") '................................Utilisateur qui a apporté la modification
Sheets("MAJ").Range("C" & Nbr) = Target.Worksheet.Name '...........................Matrice concernée
Sheets("MAJ").Range("D" & Nbr) = Target.Address(False, False, , False, "A1") '.Cellule modifiée
Sheets("MAJ").Range("E" & Nbr) = Sheets("Gestion").Range("I" & RgIndex) '...Index correspondant
Sheets("MAJ").Range("F" & Nbr) = Target.Value '............................................Nouveau contenu de la cellule
End If
'Rétablir la protection de la feuille MAJ
Sheets("MAJ").Select
ActiveSheet.Protect "nath", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
AllowFormattingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
AllowUsingPivotTables:=True
'Se repositionner sur la feuille d'origine (pour que ce soit transparent pour l'utilisateur)
Sheets("Gestion").Select
'2 // Signaler et gérer les doublons à la saisie des numéros dans les colonnes de la matrice
'S'il existe un doublon dans la colonne active des lignes 8 à 1000 /JE VOUDRAIS EXCLURE LES 9 PREMIERES COLONNES = NE MARCHE PAS
If Application.WorksheetFunction.CountIf(Range(Cells(8, 10), Cells(1000, y)), Target) > 1 Then
'alors signaler le doublon et proposer d'annuler la saisie :
If MsgBox("Attention... ce numéro a déjà été utilisé." & Chr(10) & "Voulez-vous l'effacer ?", vbYesNo + vbExclamation, "Doublon") = vbYes Then
If vbYes Then
Target.Value = "" ' si OUI annuler la saisie
Target.Cells.Select ' et se repositionner sur la cellule saisie pour que l'utilisateur entre directement un nouveau numéro
Else ' Sinon :
Target.Interior.Color = RGB(248, 187, 208) ' colorer la cellule en rose / NE MARCHE PAS
Target.Font.Color = vbRed ' colorer le texte en rouge / NE MARCHE PAS
End If
End If
End If
'Remontrer le travail d'Excel
Application.ScreenUpdating = True
End Sub |
Partager