Bonjour à tous,

J'apprends le VBA en autodidacte avec les vidéos Youtube et vos multiples contributions, alors tout d'abord MERCI !!

J'ai réalisé un programme qui doit me permettre d'atteindre 2 objectifs lors de la modification d'une cellule dans ma feuille :
1- Marquer en couleur + lister les mises à jour d'une plage de cellules définie dans une nouvelle feuille => OK ça marche bien
2- Détecter les doublons dans les colonnes qui se trouvent à droite dans mon tableau (à partir de J8 jusqu'à environ 1000 en bas et loin à droite) => là j'ai 2 problèmes

1er problème j'ai du mal à définir la plage de travail de ce 2ème contrôle. Au début j'ai voulu faire un 2ème programme mais comme j'active 2 fois "Worksheet_Change" sur la même feuille il n'a pas l'air d'accord, alors j'ai tout réuni dans le même programme. Une partie du problème vient peut-être de là.
2ème problème je voudrais faire partir mon contrôle à partir de J8 mais il s'applique aux premières colonnes...

Voici mon code commenté, cf. lignes 48, 56-57 là où je bloque :
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
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
A noter que la réponse Oui apporte un résultat satisfaisant : ma cellule est vidée et je reviens dessus.
La réponse Non n'apporte aucun effet (j'ai tenté de mettre une msgbox à la place et elle ne s'affiche pas. La condition ne s'exécute pas du tout)

Auriez vous une solution pour moi ?

Un très grand merci d'avance,

Cdlt,

Nathalie