Prévenir l'erreur de saisie de valeurs doublon

fb62840

XLDnaute Impliqué
Bonjour à toutes et tous,

Pourriez-vous m'aider ?

Voici le problème :
Un formulaire de saisie d'information nom, prénom, date de naissance, N° licence.
Sur ce formulaire un bouton Enregistrer avec ce code :
Code:
Private Sub ValiderSaisie_Click()
    num = Sheets("Source").Range("A65536").End(xlUp).Row + 1
    Sheets("Base").Activate
    Range("A" & num).Value = TextBox1.Value 'Nom
    Range("B" & num).Value = TextBox2.Value 'Prénom
    Range("B" & num).Value = TextBox3.Value 'Date de naissance
    Range("C" & num).Value = ComboBox1.Value 'Club
    Range("D" & num).Value = TextBox4.Value 'Licence
    Unload UserForm1
End Sub

Je sollicite votre aide afin de le modifier de façon à ce qu'il y ait une vérification empêchant les doublons :
Si le numéro de licence existe déjà, afficher un message d'erreur "Impossible d'enregistrer car le numéro de licence est déjà utilisé"

Si Nom + Prénom + Date de Naissance + Ville sont identiques mais pas le numéro de licence, afficher un message d'erreur "Il existe déjà un enregistrement pour "Nom" & "Prénom" & "Date de Naissance" + "Ville" mais avec le numéro de licence (à retrouver sur la feuille). Confirmez vous l'enregistrement d'un nouvel archer portant donc le même nom, prénom, la même date de naissance et la même ville ?", si oui alors ajouter l'enregistrement, sinon vider le formulaire

Merci pour votre aide.
 

Pièces jointes

  • Test.xls
    24 KB · Affichages: 27
  • Test.xls
    24 KB · Affichages: 31
  • Test.xls
    24 KB · Affichages: 35

titiborregan5

XLDnaute Accro
Re : Prévenir l'erreur de saisie de valeurs doublon

Bonjour fb, le forum,

sur ton code déjà en place les noms des feuilles ne correspondent pas... je pense que ce sont les noms de ton classeur réel...
De plus, il y a 2 range("B"&num).value ce qui écrase les données du prénom par la date de naissance...

Pour le test sur le n° de licence, j'ai rajouté un if, ce qui donne :
Code:
    num = Sheets(1).Range("A65536").End(xlUp).Row + 1
    'Sheets("Base").Activate
    L = Application.VLookup(TextBox4, Range(Cells(1, 5), Cells(num - 1, 5)), 1, False)
        
    If IsError(L) Then
    'MsgBox "vide"
    Range("A" & num).Value = TextBox1.Value 'Nom
    Range("B" & num).Value = TextBox2.Value 'Prénom
    Range("C" & num).Value = TextBox3.Value 'Date de naissance
    Range("D" & num).Value = ComboBox1.Value 'Club
    Range("E" & num).Value = TextBox4.Value 'Licence
    Unload UserForm1
    Else
    MsgBox "Impossible d'enregistrer car le numéro de licence est déjà utilisé"
    End If

Après pour les noms/prénom/ville/DN, il faut faire le même principe mais avec une concaténation.

En espérant t'avoir aidé...
Bon courage
 

fb62840

XLDnaute Impliqué
Re : Prévenir l'erreur de saisie de valeurs doublon

Merci beaucoup pour ton aide

En effet, je suis allé un peu vite en besogne et les noms ne correspondaient pas et les données s'écrasaient. J'ai corrigé.

J'ai corrigé comme tu me le proposais mais ça ne marche pas, quand je saisie les données dans le formulaire et que dans la case du numéro de licence je porte un numéro existant tout se passe comme si le numéro n'existait pas et la ligne s'ajoute sur la feuille base.

Code:
Private Sub ValiderSaisie_Click()
    num = Sheets(1).Range("A65536").End(xlUp).Row + 1
    Sheets("Base").Activate
    L = Application.VLookup(TextBox4, Range(Cells(1, 5), Cells(num - 1, 5)), 1, False)
       
    If IsError(L) Then
    'MsgBox "vide"
    Range("A" & num).Value = TextBox1.Value 'Nom
    Range("B" & num).Value = TextBox2.Value 'Prénom
    Range("C" & num).Value = TextBox3.Value 'Date de naissance
    Range("D" & num).Value = ComboBox1.Value 'Club
    Range("E" & num).Value = TextBox4.Value 'Licence
    Unload UserForm1
    Else
    MsgBox "Impossible d'enregistrer car le numéro de licence est déjà utilisé"
    End If
End Sub
[End Code]
 

Pièces jointes

  • Testv2.xls
    30.5 KB · Affichages: 31
  • Testv2.xls
    30.5 KB · Affichages: 37
  • Testv2.xls
    30.5 KB · Affichages: 37

titiborregan5

XLDnaute Accro
Re : Prévenir l'erreur de saisie de valeurs doublon

Effectivement, c'est bizarre parce que ça marche si tu mets la valeur du textbox4 dans une cellule et que tu fais ta recherchev (vlookup) sur cette cellule...
du coup j'ai fait:
Code:
    num = Sheets(1).Range("A65536").End(xlUp).Row + 1
    'Sheets("Base").Activate
    Range("h1").Value = TextBox4.Value
    r = Range("h1").Value
    L = Application.VLookup(r, Range(Cells(1, 5), Cells(num - 1, 5)), 1, False)
        
    If IsError(L) Then
    'MsgBox "vide"
    Range("A" & num).Value = TextBox1.Value 'Nom
    Range("B" & num).Value = TextBox2.Value 'Prénom
    Range("C" & num).Value = TextBox3.Value 'Date de naissance
    Range("D" & num).Value = ComboBox1.Value 'Club
    Range("E" & num).Value = TextBox4.Value 'Licence
    Unload UserForm1
    Else
    MsgBox "Impossible d'enregistrer car le numéro de licence est déjà utilisé"
    End If
    Range("h1").ClearContents
 

fb62840

XLDnaute Impliqué
Re : Prévenir l'erreur de saisie de valeurs doublon

Merci, ça marche parfaitement bien, ça me rend un grand service.

Je suppose que si la première proposition de rédaction ne fonctionne pas c'est qu'il n'y a pas de correspondance entre la valeur déjà contenue dans la colonne Licence et la valeur saisie dans le formulaire. Ne s'agirait-il pas d'un problème de format ?.

Bonne journée
 

laetitia90

XLDnaute Barbatruc
Re : Prévenir l'erreur de saisie de valeurs doublon

bonjour tous :):)
le plus simple souvent c'est traiter a la "source"

exemple avec la premiere qst...

Code:
Private Sub TextBox4_Change()
 Set a = Feuil1.Range("e2", Feuil1.Cells(Rows.Count, "e").End(xlUp)) _
 .Find(What:=TextBox4, LookIn:=xlValues, LookAt:=xlWhole)
 If Not a Is Nothing Then MsgBox "deja present"
End Sub

ps je prends le code_name de la feuille suppose feuil1
 

titiborregan5

XLDnaute Accro
Re : Prévenir l'erreur de saisie de valeurs doublon

J'avais commencé par un find mais ça ne détectait pas... je n'avais pas mis le set devant ma variable...
Faut que je me replonge pour savoir ce que signifie et comment s'en servir de ce set!!
Merci Laetitia pour la réponse du coup!
 

Discussions similaires