IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

code permettant de vérifier l'existence d'une valeur saisie dans un champ


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut code permettant de vérifier l'existence d'une valeur saisie dans un champ
    bonjour,

    je souhaiterai que dans un formulaire où je saisis une date, access puisse vérifier que cette date n'existe pas dans la table de destination avant de l'écrire dans un nouvel enregistrement de cette table. et au cas où elle existerait, qu'il me renvoie un message d'alerte me permettant d'annuler ou de modifier la saisie de cette date.

    merci à toutes les bonnes volontés.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 840
    Points
    23 840
    Par défaut
    Pour être sur que ta rêgle soit respectée tu devrais mettre un index unique.

    Après tu peux le faire en mode défensif ou offensif.

    En mode défensif, tu attrape l'erreur et tu envoie un message à l'utilisateur. Comme ta règle est inscrite dans la base, Access ne créera pas l'enr.

    En mode offensif tu pourrais utiliser le code suivant dans 'Before Update'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if DCount("NomTaClefPrimaire","[NomTonChampDate]=#" & format$(taDate,"yyyy/mm/dd") & "#")<>0 then
       msgbox "existe déjà"
       cancel = cint(true)
    end if
    A+

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    merci marot de ta réponse, toutefois, je ne suis pas expert en VBA. autant dire que l'index unique et le mode offensif ou défensif, c'est pas gagné pour moi.
    peux-tu me préciser ce que tu appelles index unique et où je dois le placer.
    dans mes deux tables ?

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    je viens de tester ton code, mais je ne comprends pas ton usage de la fonction Dcount. il ne semble pas y avoir de domaine défini.
    tu peux m'expliquer ?

    merci d'avance.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 840
    Points
    23 840
    Par défaut
    Ooops, tu as raison j'ai oublié le paramêtre, il faut mettre le nom de la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DCount("NomTaClefPrimaire", "NomTaTable", "[NomTonChampDate]=#" & format$(taDate,"yyyy/mm/dd") & "#")<>0 then

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 840
    Points
    23 840
    Par défaut
    Citation Envoyé par gravia Voir le message
    merci marot de ta réponse, toutefois, je ne suis pas expert en VBA. autant dire que l'index unique et le mode offensif ou défensif, c'est pas gagné pour moi.
    peux-tu me préciser ce que tu appelles index unique et où je dois le placer.
    dans mes deux tables ?
    Quand tu as crée ta table tu as probablement défini un clef primaire, mais en cliquant sur l'icône avec l'éclair tu peux ajouter des indexs.

    Donc tu cliques sur cet icône, tu choisi une ligne vide et tu y met un nom, ex : UniciteDate, puis tu choisi les champs dont tu as besoin. En bas de l'écran de saisie, tu peux dire si il s'agit d'un index primaire, unique ou avec doublon. Choisi Unique et Access s'assurera que tes données ne sont présentes qu'une seule fois.

    Un bémol toute fois, cela ne marche pas pour les nulls. Les nulls ne créent pas de double :-(.

  7. #7
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    en effet la meilleure solution me paraît être l'index avec valeurs uniques.
    Attention toutefois pour les dates #06/05/2008 9:08# est différent de #06/05/2008 9:50#
    assure donc toi bien d'avoir des dates et pas des dates/heures.

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    merci encore,

    dans ta ligne de code "format$(taDate,"yyyy/mm/dd")" , peux-tu me préciser ce qu'est "taDate", un champ du formulaire, d'une table ???

    @+

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Datevac_BeforeUpdate(Cancel As Integer)
    If DCount(Date, Vacations, [Datevac] = "#" & Format$(Date, "yyyy/mm/dd") & "#") <> 0 Then
       MsgBox "existe déjà"
       Cancel = CInt(True)
    End If
    Date est le nom du champ de ma table vacations (index unique)
    Datevac est le nom de la zone de texte de mon formulaire

    et ça marche pas, quand je vous dis que je suis ignare en VBA

    merci de vos conseils

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    merci du coup de main,

    en fait si on définit la date en index unique, le contrôle de doublons intercepte la valeur avant le code.
    j'ai réussi à obtenir le bon résultat en enlevant l'index unique et en saisissant le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Datevac_BeforeUpdate(Cancel As Integer)
    If DCount("[Date]", "Vacations", [Date] = Me!Datevac) > 0 Then
       MsgBox "Cette date a déjà été saisie, veuillez en saisir une autre"
       Cancel = CInt(True)
    End If
    End Sub
    encore merci

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 368
    Points : 23 840
    Points
    23 840
    Par défaut
    Appeler ton champ 'Date' est une mauvaise idée. C'est un mot réservé d'Access.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2014, 16h18
  2. Réponses: 14
    Dernier message: 10/10/2013, 07h39
  3. Vérifier l'existence d'une valeur
    Par amerex dans le forum Excel
    Réponses: 4
    Dernier message: 16/08/2008, 00h32
  4. Vérifier l'existence d'une valeur dans un ComboBox
    Par logiciel_const dans le forum Composants VCL
    Réponses: 6
    Dernier message: 08/03/2008, 10h07
  5. Vérifier l'existence d'une valeur?
    Par ashen dans le forum Access
    Réponses: 8
    Dernier message: 19/05/2006, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo