Bonjour,
Je cherche via une macro à détecter un doublon en colonne B et que potentiellement s'il y a un doublon en fonction de la réponse "Oui" ou "Non" sur la popup, soit je dis "Oui" pour conserver et cela doit recadence l'ensemble de la colonne, si je dis "Non" cela vide la cellule ou remet le chiffre d'origine.
Pour bien comprendre l'idée est de mettre en colonne A le nom des projets en B de mettre leur priorité.
Donc pas de doublon possible. Sachant que je peux avoir un doublon parce que je saisie une nouvelle ligne.
Mais aussi parque le projet qui était en priorité 5 devient 2 donc cela ne doit pas toucher le projet 1, mais le 2, 3 et 4 doivent du coup se décaler de +1.
A l'inverse si le projet priorité 5 je le passe en 8, c'est le 8, 7, 6 qui doivent se décaler de -1.
J'espère être clair. Car en gros l'idée est de priorisé les projets, mais surtout à la présentation à la Direction que si on priorise un projet qu'il devient urgent, le reste se décale çà ne se surperpose pas.
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 Private Sub Worksheet_Change(ByVal Target As Range) Dim rng As Range Dim cell As Range Dim valeurOrigine As Variant Dim positionDupliquee As Variant Dim debutPlage As Long Dim finPlage As Long Dim response As Integer ' Vérifier si la modification a eu lieu dans la colonne B If Not Intersect(Target, Range("B:B")) Is Nothing Then Application.EnableEvents = False ' Désactiver les événements pour éviter une boucle infinie ' Définir la plage de vérification des doublons Set rng = Range("B:B") ' Stocker la valeur d'origine de la cellule modifiée valeurOrigine = Target.Value2 ' Vérifier s'il existe un doublon de la nouvelle valeur If WorksheetFunction.CountIf(rng, valeurOrigine) > 1 Then ' Afficher le message de doublon et demander à l'utilisateur ce qu'il souhaite faire response = MsgBox("Un doublon a été trouvé pour la valeur " & valeurOrigine & " dans la colonne B. " & vbNewLine & _ "Voulez-vous conserver cette valeur et décaler tous les autres projets ? " & vbNewLine & _ "Ou voulez-vous saisir une nouvelle valeur pour l'ordre de priorité de ce projet ?", vbQuestion + vbYesNo, "Doublon détecté") ' Si l'utilisateur choisit de conserver la valeur et décaler les autres projets If response = vbYes Then ' Déterminer la plage de valeurs à ajuster If valeurOrigine < Target.Value2 Then debutPlage = Target.Row finPlage = rng.Rows.Count Else debutPlage = 1 finPlage = Target.Row End If ' Ajuster les valeurs dans la plage spécifiée For Each cell In rng.Rows(debutPlage & ":" & finPlage) If Not IsEmpty(cell) Then If valeurOrigine < Target.Value2 Then If cell.Value2 >= Target.Value2 And cell.Value2 <> valeurOrigine Then cell.Value = cell.Value + 1 End If Else If cell.Value2 > valeurOrigine And cell.Value2 <= Target.Value2 And cell.Value2 <> valeurOrigine Then cell.Value = cell.Value - 1 End If End If End If Next cell ' Mettre à jour la valeur de la cellule modifiée Target.Value = valeurOrigine ' Si l'utilisateur choisit de saisir une nouvelle valeur Else ' Annuler la modification en restaurant la valeur d'origine Target.Value = valeurAncienne MsgBox "Veuillez saisir une nouvelle valeur pour l'ordre de priorité de ce projet." End If End If Application.EnableEvents = True ' Réactiver les événements End If End Sub
Partager