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 :

Controler avant enregistrement


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 73
    Points : 34
    Points
    34
    Par défaut Controler avant enregistrement
    Bonjour,

    j'ai un formulaire pour enregistrer un étudiant dans ma table. Lors d'un ajout, il se peut que cet étudiant soit déjà présent dans la table.
    Pour vérifier, j'ai remplacé le champ nom par une liste déroulante alimentée par une requête regroupement sur le nom. Le problème est que dès que l'on encode une lettre, un enregistrement est créé, un numéro automatique (clé primaire) est généré. Si l'étudiant est déjà présent, je dois effacer l'enregistrement qui vient d'être ajouté à la table. Est-il possible de mettre en place une procédure ou macro permettant de localiser un étudiant avant de créer un nouvel enregistrement ?
    Je vous remercie +++
    Nicodespiennes

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    Voici la solution en VBA. Il faut mettre un code VBA de ce type sur l’événement "Avant MAJ" de ton contrôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub monControle_BeforeUpdate(Cancel As Integer)
        If DCount("*", "maTable", "monChamp='" & Me.monControle & "'") <> 0 Then
            MsgBox "L'étudiant '" & Me.monControle & "' existe déjà."
            Cancel = True
        End If
    End Sub
    maTable étant la table qui stocke le champ monChamp et monControle étant le nom de ta liste déroulante. Ceci forcera l'utilisateur à rentrer un nom qui n'existe pas encore lors de la création d'un nouvel étudiant
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  3. #3
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 465
    Points : 549
    Points
    549
    Par défaut
    Bonjour,

    As-tu pensé à la définition de ta table ? Tu pourrais simplement définir le champ Nom de ta table avec un index sans doublon (no duplicates).

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    J'ai eu à faire quelque chose de similaire et j'en suis arrivé à la même conclusion que vous paidge à l'exception d'une chose:
    Bien que la plupart des exemples du même genre utilisent un Cancel, perso je l'ai remplacé par:
    Je sais pas si c'est très clean mais en tout cas, si par hasard le message
    "L'étudiant xxx existe déjà"
    apparaît et que je n'ai pas d'autre étudiant à enregistrer, je peux quand même fermer tranquillement le formulaire sans être obligé de saisir un autre nom d'étudiant valide. Après c'est vrai la valeur saisie est effacée (mais bon si elle n'est pas valide...)

    Je sais pas si je suis très clair mais si dans un tel cas le "Undo" à des effets secondaires, je suis bien évidement preneur.

  5. #5
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    le cancel permet de court circuiter l’événement au plus proche de sa survenance
    le me.undo agit au niveau de l'écran et essaye d'annuler ce qui a été fait ( ce qui n'est pas forcémant possible en fonction des traitements déclenchés par tes traitements )

    j'opterais pour la première solution,

    maintenant agir directement au niveau de la base en mettant une contrainte d'unicité comme le propose PipoWil est encore meilleur puisque ta contrainte est fonctionnelle et la positionner au niveau de la base est encore plus en amont et plus radical
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    Merci pour la précision.

    Comment faire alors pour fermer proprement le formulaire juste après une saisie erronée sans avoir le message ?
    L'étudiant ... existe déjà

  7. #7
    Membre éclairé Avatar de pyloupylou
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2012
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 438
    Points : 666
    Points
    666
    Par défaut
    si tu fais un cancel=true tu reviens je crois en saisie, non ?
    ensuite échap pour annuler la modification , ça marche pas ?
    ----
    Il ne s'agit pas de chercher à tout savoir mais de savoir où tout chercher

    merci de penser à
    Au fait.... je ne réponds pas, moi non plus, aux mp

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par pyloupylou Voir le message
    ensuite échap pour annuler la modification , ça marche pas ?
    Evidement! C'est fout comme un simple [esc] ça peut changer la vie Merci

Discussions similaires

  1. Lier un control à un enregistrement
    Par RENO184 dans le forum Access
    Réponses: 4
    Dernier message: 19/07/2007, 15h24
  2. Mise a jour des control avant affichage
    Par kacedda dans le forum MFC
    Réponses: 3
    Dernier message: 28/03/2007, 14h56
  3. Controle avant le submit
    Par kagura dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/08/2006, 17h41
  4. Réponses: 10
    Dernier message: 21/06/2006, 15h50
  5. [Formulaire] vérifier les champs avant enregistrement
    Par julien_t_m dans le forum Access
    Réponses: 5
    Dernier message: 16/10/2005, 21h53

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