Suppression de doublons dans colonnes

papypog

XLDnaute Occasionnel
Bonjour,

J'ai trouvé sur le forum ce code pour signaler les doublons dans une colonne.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column = 1 Then
If Application.WorksheetFunction. _
CountIf(Range("A:A"), Target.Value) > 1 Then
MsgBox "Vous avez déjà saisi ce numéro -- recommencer"
Target.Value = ""
Target.Select
End If
End If
End Sub


Ce code permet donc de repérer les doublons dans la colonne A.
Comment l'adapter afin de repérer les doublons existants dans la colonne B, puis la colonne C puis la D.

Merci de votre aide.
 
Dernière édition:

Banzai64

XLDnaute Accro
Re : Suppression de doublons dans colonnes

Bonsoir

Essayes

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Target.Column < 5 Then
  
    If Application.WorksheetFunction. _
      CountIf(Columns(Target.Column), Target.Value) > 1 Then
      MsgBox "Vous avez déjà saisi ce numéro -- recommencer"
      Target.Value = ""
      Target.Select
    End If
  End If
End Sub
 

papypog

XLDnaute Occasionnel
Re : Suppression de doublons dans colonnes

Bonsoir

Essayes

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  If Target.Column < 5 Then
  
    If Application.WorksheetFunction. _
      CountIf(Columns(Target.Column), Target.Value) > 1 Then
      MsgBox "Vous avez déjà saisi ce numéro -- recommencer"
      Target.Value = ""
      Target.Select
    End If
  End If
End Sub

Re,

Quelle réactivité, mais ce n'est pas le tout, il faut comprendre, pourrais-tu m'expliquer la manip ?

Je suppose que le < 5 signifie inférieur à cinq colonnes.
Est-ce cela marche pour des colonnes non adjacentes et que la condition ne doit pas s'appliquer pour les colonnes intermédiaires ( pénible le mec).

Encore Merci pour cette première réponse.
 

Banzai64

XLDnaute Accro
Re : Suppression de doublons dans colonnes

Bonsoir

J'ai repris une partie de la macro que tu avais fournie et je l'ai adaptée en fonction de ta demande (Colonnes A, B, C, D)
En fonction de la cellule modifiée si elle est est dans les 4 premières colonnes (<5) je compte le nombre de fois la valeur qui vient d'être inscrite avec CountIf(Columns(Target.Column), Target.Value)
Et si > 1 Message et effacement de la cellule

Est-ce cela marche pour des colonnes non adjacentes et que la condition ne doit pas s'appliquer pour les colonnes intermédiaires

On peut l'adapter en faisant une liste des colonnes à vérifier
 

Banzai64

XLDnaute Accro
Re : Suppression de doublons dans colonnes

Re

On peut aussi opter pour une solution non VBA

Sélectionne les colonnes que tu veux (Pour cet exemple il faut que la dernière colonne choisie soit la A, sinon adaptes la formule)

Menu : Données --> Validation
Dans l'onglet Options
Critères de validation : Choisir personnalisé
Et dans formule : Tapes =NB.SI(A:A;A1)<2
Dans l'onglet Alerte d'erreur
Tu peux choisir ce que tu veux comme traitement en cas de doublon avec les choix dans Style : Arrêt, Avertissement ou Informations
 

papypog

XLDnaute Occasionnel
Re : Suppression de doublons dans colonnes

Merci Banzai,

Finalement en me creusant un peu la cervelle j'ai trouvé la solution ci-dessous.


Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column < 12 Then
If Application.WorksheetFunction. _
CountIf(Range("E:E"), Target.Value) > 1 Then
MsgBox "Vous avez déjà saisi ce numéro -- recommencer"
Target.Value = ""
Target.Select
End If
End If
If Application.WorksheetFunction. _
CountIf(Range("G:G"), Target.Value) > 1 Then
MsgBox "Vous avez déjà saisi ce numéro -- recommencer"
Target.Value = ""
Target.Select
End If
If Application.WorksheetFunction. _
CountIf(Range("I:I"), Target.Value) > 1 Then
MsgBox "Vous avez déjà saisi ce numéro -- recommencer"
Target.Value = ""
Target.Select
End If
If Application.WorksheetFunction. _
CountIf(Range("K:K"), Target.Value) > 1 Then
MsgBox "Vous avez déjà saisi ce numéro -- recommencer"
Target.Value = ""
Target.Select
End If
End Sub


Cela est fait pour remplacer une mise en forme conditionnelle résultant de la fonction NombSi.

Merci de ton aide.

:)
 

Discussions similaires

Réponses
1
Affichages
204
Réponses
5
Affichages
125

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof