Doublon Target sur 2 colonnes

David

XLDnaute Occasionnel
Bonjour à tous,

je voudrai détecter des doublons et les bloquer, mais cela se fait sur 2 colonnes et je ne sais faire que sur une seule, je ne sais même pas si c'est possible.

Je vous joins un fichier pour voir si vous avez une solution.

Dans le fichier, le doublon se fait bloquer sur la colonne A, si vous mettez 2 fois le même vous êtes bloqués, je voudrais pouvoir mettre 2 fois le même nom dans la colonne a avec un choix différent sur la colonne B, et bloquer sir A&B sont en doublons.

Merci.
 

Pièces jointes

  • test_doublons.xls
    35.5 KB · Affichages: 29

Papou-net

XLDnaute Barbatruc
Re : Doublon Target sur 2 colonnes

Bonjour David,

Voici une solution parmi d'autres possibles:

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Colonne As Integer
    Dim Adresse As String
    Dim Cel As Range, d As Integer
    
   'On sort si plus d'une cellule a été modifiée
    If Target.Count > 1 Then Exit Sub
   'On sort si la colonne de la cellule modifiée est > 2
    If Target.Column > 2 Then Exit Sub Else Colonne = Target.Column
    'Détermine le décalage de colonne par rapport à la cellule modifiée
    d = IIf(Colonne = 1, 1, -1)
    'On sort si la cellule modifiée est vide
    If Target.Value = "" Or Target.Offset(0, d) = "" Then Exit Sub
    'Recherche dans les colonnes 1 et 2
    For Each Cel In Columns(Target.Column).SpecialCells(xlCellTypeConstants)
      If Not Cel.Row = Target.Row Then
        If Cel = Target And Cel.Offset(0, d) = Target.Offset(0, d) Then
          Adresse = IIf(Colonne = 1, Cel.Address, Cel.Offset(0, d).Address)
          MsgBox Target & " existe déjà dans la cellule " & Adresse
          'Suppression de la donnée
          Target.Value = "": Target.Offset(0, d) = ""
          Target.Select
          Exit For
        End If
      End If
    Next
End Sub
Voir copie en PJ.

A +

Cordialement.
 

Pièces jointes

  • Copie de test_doublons.xls
    32 KB · Affichages: 21

David

XLDnaute Occasionnel
Re : Doublon Target sur 2 colonnes

Bonjour Papou-net, bonjour à tous,

Ton code marche, mais j'ai un petit problème, dans mon exemple j'ai donné 2 colonnes côte à côte (A,B) mais sur mon vrai tableur c'est A,C je ne trouve pas ou modifier le code exactement.

Merci
 

David

XLDnaute Occasionnel
Re : Doublon Target sur 2 colonnes

Re bonjour à tous,

C'est bon normalement j'ai trouvé .

Code:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Colonne As Integer
    Dim Adresse As String
    Dim Cel As Range, d As Integer
    
   'On sort si plus d'une cellule a été modifiée
    If Target.Count > 1 Then Exit Sub
   'On sort si la colonne de la cellule modifiée est > 2
    If Target.Column > 3 Then Exit Sub Else Colonne = Target.Column
    'Détermine le décalage de colonne par rapport à la cellule modifiée
    d = IIf(Colonne = 1, 3, -2)
    'On sort si la cellule modifiée est vide
    If Target.Value = "" Or Target.Offset(0, d) = "" Then Exit Sub
    'Recherche dans les colonnes 1 et 2
    For Each Cel In Columns(Target.Column).SpecialCells(xlCellTypeConstants)
      If Not Cel.Row = Target.Row Then
        If Cel = Target And Cel.Offset(0, d) = Target.Offset(0, d) Then
          Adresse = IIf(Colonne = 1, Cel.Address, Cel.Offset(0, d).Address)
          MsgBox Target.Offset(0, d) & " existe déjà dans la cellule " & Adresse
          'Suppression de la donnée
          Target.Value = "": Target.Offset(0, d) = ""
          Target.Select
          Exit For
        End If
      End If
    Next
End Sub
Papou-net si tu passes par la, ça serait sympa de me confirmer le code, au cas ou j'ai oublié quelque chose.

[edit] Je suis désolé, mais j'ai quand même encore un problème, il est possible que se soit vide en colonne C, si j'ai 2 fois le même nom et que c'est vide en C, ça doit me l'indiquer aussi. Une idée?


Merci
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Doublon Target sur 2 colonnes

Bonsoir David,

Peut-être comme ceci:

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim Colonne As Integer
    Dim Adresse As String
    Dim Cel As Range, d As Integer
   
   'On sort si plus d'une cellule a été modifiée
    If Target.Count > 1 Then Exit Sub
   'On sort si la colonne de la cellule modifiée est > 2
    If Target.Column > 3 Then Exit Sub Else Colonne = Target.Column
    'Détermine le décalage de colonne par rapport à la cellule modifiée
    d = IIf(Colonne = 1, 3, -2)
    'On sort si la cellule modifiée est vide
    If Target.Value = "" Or Target.Offset(0, d) = "" Then Exit Sub
    'Recherche dans les colonnes 1 et 2
    For Each Cel In Columns(Target.Column).SpecialCells(xlCellTypeConstants)
      If Not Cel.Row = Target.Row Then
        If Cel = Target Or Cel.Offset(0, d) = Target.Offset(0, d) Then
          Adresse = IIf(Colonne = 1, Cel.Address, Cel.Offset(0, d).Address)
          MsgBox Target.Offset(0, d) & " existe déjà dans la cellule " & Adresse
          'Suppression de la donnée
          Target.Value = "": Target.Offset(0, d) = ""
          Target.Select
          Exit For
        End If
      End If
    Next
End Sub
Mais dans ce cas, il devient impossible d'avoir 2 cellules identiques en colonne 1 avec des cellules différentes en colonne 3.

Ou bien je n'ai pas bien intégré le problème.

A +

Cordialement.

PS: Je pense que tu as bien compris le déplacement de la colonne 2.
 

David

XLDnaute Occasionnel
Re : Doublon Target sur 2 colonnes

Bonsoir papou-net, bonsoir à tous,

J'ai utilisé ton premier code, j'ai contourné le problème en affichant la liste de choix que si la première cellule contient quelque chose, du coup elle ne peut plus être vide.

Sinon j'ai terminé mon tableur et mis des protections sur les onglet et la ça ne marche plus j'ai une erreur d'exécution 1004 .
la reconnaissance est sur colonne A et C (cellules déverrouillées) mais la colonne B est verrouillée d'ou le message d'erreur. Je n'arrive pas à passer l'erreur si quelqu'un a une idée, ça serait sympa.

Je joins un fichier pour test.

Pour le moment j'ai contourné le problème en enlevant la protection pendant l’exécution et en la remettant à la fin, dois bien y avoir plus propre, non?
 

Pièces jointes

  • test2.xlsm
    15 KB · Affichages: 24
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 732
Messages
2 081 997
Membres
101 861
dernier inscrit
Jerem28630