Recherche de doublon
bonjour a tous
j'ai récupérer ce code qui recherche si il y a des doublons dans la colonne B de la feuille Base de Données si le nom est déjà présent il fonctionne très bien mais certaine personne sont dans la liste avec leurs fils ou frère et donc me sortent comme des doublons car cela ne recherche que dans la colonne des nom (B:B)
dans la le code peut t'on y ajouter la colonne C:C pour que cela me signale le doublon que si le nom (colonne B:B) et le prénom colonne (C:C) sont présent cela déclenche mon MsgBox
merci & bon dimanche
Private Sub T1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim rg As Range
Dim rep As Integer
If T1.Text = "" Then Exit Sub
Set rg = Sheets("Base de Données").Range("B:B").Find(T1.Text)
If Not rg Is Nothing Then
rep = MsgBox("Cet adhérent est existant " & "Voulez vous continuer", vbCritical + vbYesNo)
If rep = vbYes Then
T2.SetFocus: GoTo 1
Cancel = True
Else
MsgBox ("Opération annulé")
Unload Me
End If
End If
1 End SubBonjour
Tu devrais joindre ton fichier...
Bye !
re
je ne peut pas car j'ai dessus des données confidentielles
Bonsoir,
faire une comparaison sur deux colonnes ce n'est pas bien compliqué, mais il faut connaitre les variables servant à faire cette comparaison.
Si j'ai bien compris T1.Text correspond au nom, mais quelle est la variable pour le prénom ?
Après on pourra lancé une recherche Find sur le nom, et en cas d'égalité on vérifie le prénom, si différent alors on tient le bon bout, mais il faut continuer la recherche sur le Nom afin de tester toutes les paires, et si au final aucune paire nom Prénom est identique à l'entrée, alors nouvelle personne, sinon doublon.
@ bientôt
LouReeD
bonsoir et merci de prendre du temps
pour le prenom c'est t2.text
pour etre plus precis
T1(nom du textbox)=le nom (qui se trouve a partir de la colonne B2 de la feuille 2 nomée Base de Données)
T2(nom du textbox)=le prenom (qui se trouve a partir de la colonne C2 de la feuille 2 nomée Base de Données)
merci
Bonsoir,
voici ce que je vous propose :
Private Sub CommandButton1_Click()
' on vérifie que le nom et prénom sont bien indiqués sinon on quitte
If T1 = "" Or T2 = "" Then Exit Sub
Dim c As Range, firstAddress As String, Doublon As Boolean
' avec la feuille Base de données et la colonne B de la ligne 2 à 10
With Sheets("Base de Données").Range("B2:B10")
' on fait le rahcerche du nom avec FIND
Set c = .Find(T1, LookIn:=xlValues)
' si le résultat de la recherche est différente de rien
If Not c Is Nothing Then
' on met en mémoire l'adresse de la cellule trouvée
firstAddress = c.Address
' on rentre dans une boucle indéfinie
Do
' on rend la main à l'utilisateur
' permet de garder la main dans le cas d'une boucle infinie
DoEvents
' on test le prénom
If c.Offset(, 1) = T2 Then
' si le prénom est identique au prénom de la cellule trouvée
' on passe l'intérupteur doublon à vrai
Doublon = True
Else
' sinon on lance une nouvelle recherche du nom
Set c = .FindNext(c)
End If
' s'il y a doublon on sort de la boucle
If Doublon Then Exit Do
' on boucle tant que l'adresse de la cellule trouvée est différente de la première adresse trouvée
' si c'est le cas c'est que FIND revient en début "de boucle"
Loop While c.Address <> firstAddress
End If
End With
' s'il y a doublon
If Doublon Then
' on l'indique
MsgBox ("Cet adhérent est existant")
T1 = "": T2 = ""
' sinon on fait ce qu"il y a à faire avec ce nouveau membre
Else
' je ne sais ce que vous voulez faire s'il est inconnue dans la base de données
MsgBox ("Cet adhérent n'existe pas, vous pouvez continuer son inscription")
End If
End Subavec le fichier :
Il y a certainement d'autres moyens, voir plus simple et rapide...
@ bientôt
LouReeD
je ne peut pas car j'ai dessus des données confidentielles
Alors je fais à ma sauce avec un fichier de mon cru...
Bye !
bonsoir a tous
merci pour votre aide tout fonctionne
amicalement & bonne fin de soirée
Bonsoir à tous
Un peu en retard...
Une autre macro :
Bien sûr c'est vous qui décidez des actions à mettre dans chaque cas du If ... End If final.
Private Sub CommandButton1_Click()
Dim der&, t, i&, n&, nom$, prenom$, nomprenom$
nom = LCase(T1): prenom = LCase(T2)
If Trim(nom) = "" Or Trim(prenom) = "" Then MsgBox "Le nom et le prénom sont obligatoires", vbCritical: Exit Sub
With Sheets("Base de Données")
der = .UsedRange.Row + .UsedRange.Rows.Count
t = .Range("b1:c1").Resize(der)
For i = 1 To UBound(t)
If LCase(t(i, 1)) = nom Then If LCase(t(i, 2)) = prenom Then n = n + 1
Next
nomprenom = UCase(nom) & " " & Application.Proper(prenom)
If n = 0 Then
MsgBox nomprenom & vbLf & " n'existe pas ! ", vbExclamation
ElseIf n = 1 Then
MsgBox nomprenom & " existe " & vbLf & "et il est unique.", vbInformation
Else
MsgBox nomprenom & vbLf & " existe " & n & " fois !", vbExclamation
End If
End With
End Sub