[résolu]Gestion des doublons en vba

nrdz83

XLDnaute Impliqué
Bonjour à tous,

Je cherche à ce qu'on me signale si en colonne A il y a des doublons, pour cela j'ai regardé la docs suivante>>>
La gestion des doublons dans Excel

J'utilise donc ce code que j'ai placé dans ma Feuil5 ("BD_Confection")

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Colonne As Integer
Dim Adresse As String
'On sort si plus d'une cellule a été modifiée
If Target.Count > 1 Then Exit Sub
'On sort si la cellule modifiée est vide
If Target.Value = "" Then Exit Sub
'Définit la colonne à vérifier (1=Colonne A, 2=colonne B ...etc...)
Colonne = 1
'Vérifie si c'est la colonne cible a été modifiée
If Target.Column = Colonne Then
'Recherche si la nouvelle donnée existe déjà dans la colonne.
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0),
LookAt:=xlWhole, _
SearchDirection:=xlNext).Address
'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée, cela
'signifie qu'il y a un doublon dans la colonne.
If Adresse <> Target.Address Then
MsgBox "La donnée '" & Target & "' existe déjà dans la cellule " & Adresse
'Suppression de la donnée
Target.Value = ""
Target.Select
End If
End If
End Sub


Mon problème est que le code suivant est en rouge donc erreur :
Code:
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0),
LookAt:=xlWhole, _
SearchDirection:=xlNext).Address

Ce code est-il compatible avec excel 2010?
Faut-il le modifier?

Par avance merci pour vos lumières amitiés
 
Dernière édition:

nrdz83

XLDnaute Impliqué
Re : Gestion des doublons en vba

Rebonjour à tous,
voila donc ce code
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Colonne As Integer
Dim Adresse As String
'On sort si plus d'une cellule a été modifiée
If Target.Count > 1 Then Exit Sub
'On sort si la cellule modifiée est vide
If Target.Value = "" Then Exit Sub
'Définit la colonne à vérifier (1=Colonne A, 2=colonne B ...etc...)
Colonne = 1
'Vérifie si c'est la colonne cible a été modifiée
If Target.Column = Colonne Then
'Recherche si la nouvelle donnée existe déjà dans la colonne.
Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, SearchDirection:=xlNext).Address
'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée, cela
'signifie qu'il y a un doublon dans la colonne.
If Adresse <> Target.Address Then
MsgBox "La donnée '" & Target & "' existe déjà dans la cellule " & Adresse
'Suppression de la donnée
Target.Value = ""
Target.Select
End If
End If
End Sub

Fonctionne à merveille c'est le top, mais mon problème et que je n'arrive pas à le faire cohabiter avec celui ci >>
Code:
'Pour mettre le format 000/ année en cours dans la colonne A
Private Sub Worksheet_Change(ByVal Target As Range)
'--contrôle des valeurs numériques entrées en colonne A--
Set Target = Intersect(Target, [A:A], Me.UsedRange)
If Target Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each Target In Target 'si entrées multiples
  If IsNumeric(Target.Text) Then _
    Target = Format(Target.Text, "000") & " \ " & Year(Date)
Next
Application.EnableEvents = True

End Sub

En effet ce dernier me permet d'automatiser un numéro de saisie en fonction de l'année en cours.

Est il possible de faire cohabiter ces deux ensembles.? Ils sont les deux coller dans le code de ma Feuil5("BD_Conception")

ou est il possible de le joindre à ce code qui me permet de ranger les données saisies dans ma feuille?

Code:
Private Sub BTN_Valider_Click()
Dim derlig As Long
With Sheets("BD_Confection")

'On teste la saisie du N° d'identification ..
If Me.TB_1.Text = "" Then
MsgBox "vous devez saisir un numéro d'identification!"
Me.TB_1.SetFocus
Exit Sub
End If

'On teste la saisie du concepteur ..
If Me.TB_2.Text = "" Then
MsgBox "vous devez saisir le nom du concepteur!"
Me.TB_2.SetFocus
Exit Sub
End If

'On teste la saisie de la destination ..
If Me.Combo_Destinations.Text = "" Then
MsgBox "vous devez saisir une destination !"
Me.Combo_Destinations.SetFocus
Exit Sub
End If






derlig = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Cells(derlig, 1).Value = TB_1
.Cells(derlig, 2).Value = Combo_Produit
.Cells(derlig, 3).Value = DTPicker1
.Cells(derlig, 4).Value = UCase(TB_2) 'ucase pour mettre en majuscule
.Cells(derlig, 5).Value = Application.Proper(TB_3) 'permet de mettre la première lettre en majuscule
.Cells(derlig, 6).Value = TB_4.Text 'le.Text permet de mettre le format en texte
.Cells(derlig, 7).Value = TB_5.Text 'le.Text permet de mettre le format en texte
.Cells(derlig, 8).Value = Combo_Destinations


End With

Par avance merci

amitiés
 
Dernière édition:

Gelinotte

XLDnaute Accro
Re : Gestion des doublons en vba

Bonjour,

Pour les 2 premiers, ai-je bien compris le fonctionnement ?

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
 Dim Colonne As Integer
 Dim Adresse As String
 
 'On sort si plus d'une cellule a été modifiée
2 If Target.Count > 1 Then Exit Sub
 'On sort si la cellule modifiée est vide
 If Target.Value = "" Then Exit Sub
 'Définit la colonne à vérifier (1=Colonne A, 2=colonne B ...etc...)
 Colonne = 1
 'Vérifie si c'est la colonne cible a été modifiée
 If Target.Column = Colonne Then
 'Recherche si la nouvelle donnée existe déjà dans la colonne.
 Adresse = Columns(Colonne).Find(What:=Target.Value, After:=Target.Offset(1, 0), LookAt:=xlWhole, SearchDirection:=xlNext).Address
 'Si l'adresse de cellule trouvée ne correspond pas à la cellule modifiée, cela
 'signifie qu'il y a un doublon dans la colonne.
 If Adresse <> Target.Address Then
 MsgBox "La donnée '" & Target & "' existe déjà dans la cellule " & Adresse
 'Suppression de la donnée
 Target.Value = ""
 Target.Select
 End If
 End If
 
  'Pour mettre le format 000/ année en cours dans la colonne A
 '--contrôle des valeurs numériques entrées en colonne A--
 Set Target = Intersect(Target, [A:A], Me.UsedRange)
 If Target Is Nothing Then Exit Sub
 Application.EnableEvents = False
 For Each Target In Target 'si entrées multiples
   If IsNumeric(Target.Text) Then _
     Target = Format(Target.Text, "000") & " \ " & Year(Date)
 Next
 Application.EnableEvents = True
 
 End Sub

G
 

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83