Empêcher un doublon dans une base de données

Fermé
44maKA - 21 janv. 2013 à 10:20
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 - 25 janv. 2013 à 11:28
Bonjour,

Je suis actuellement entrain de travailler sur un formulaire liée à une base de données. Grâce à un bouton, j'enregistre les données du formulaire dans ma base.

Voici mon code actuel :

Sub saisie()
  With Sheets("Base de données")
  'Message d'erreur si base pleine
    If Not IsEmpty(Sheets("Base de données").Range("A369").Value) Then
    MsgBox "La base de donnée est remplie. Mettre à jour !"
    Else
    End If
  'Copie les données du formulaire dans la base
    plva = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A" & plva & ":M" & plva) = Application.Transpose(Sheets("saisie").Range("C2:C14"))
  'Rendre vierge le formulaire
     Sheets("saisie").Range("C4:C9").ClearContents
   End With
End Sub


J'aimerais faire apparaitre sous la partie copie des données, un code qui me permettrait d'empêcher à l'utilisateur de rentrer à nouveau la date du jour.
Par conséquent, je souhaiterais dire que si la donnée (date) de la cellule "C3" de ma feuille "saisie" est déjà présente dans la plage "B4:B368" de la feuille "Base de données" alors une msgbox affiche le msg "Date déjà enregistrée. Cependant au vu de mes petites connaissances en VBA je n'ai pas réussis à trouver le code efficace.

En vous remerciant d'avance pour votre aide.

3 réponses

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
21 janv. 2013 à 13:49
Bonjour 44maKa,

Fait de tête .. à tester !

For i=4 To 368
    If(MaDate = CDate(Cells(i,2).Value)) Then
        MsgBox "Date déjà enregistrée"
    End If
Next i 
0
Merci pour cette réponse.

La msgbox s'affiche très bien parcontre, les données s'enregistre quand même. J'ai essayé de trouver un moyen pour que la deuxième partie de mon code qui tranpose les données ne s'opère pas si il y un doublon mais je n'y suis pas arrivée.
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
21 janv. 2013 à 17:37
Bonsoir 44maKA,

Il faut ajouter un booléen et travailler dessus pour savoir, si oui ou non, il faut enregistrer les données.
Même exemple avec un booléen:

Dim Enregistre As Boolean
'
Enregistre = True
For i=4 To 368
    If(MaDate = CDate(Cells(i,2).Value)) Then
        MsgBox "Date déjà enregistrée"
        Enregistre = False
        i = 369
    End If
Next i
If  (Enregistre) Then
    ' code qui enregistre les données
End If
0
Merci, le code marche très bien.
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
25 janv. 2013 à 11:28
Au plaisir et bonne continuation,
Heliotte.
0