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

Access Discussion :

Recherche d'une éventuelle valeur existente dans un sous-formulaire [AC-2010]


Sujet :

Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 26
    Points : 19
    Points
    19
    Par défaut Recherche d'une éventuelle valeur existente dans un sous-formulaire
    Bonjour,

    J'ai actuellement un formulaire qui me permet d'ajouter ou de modifier un local dans un bâtiment. Le bâtiment sera sélectionné via des boutons "flèches" pour passer d'un bâtiment à un autre. Puis dessous cette zone de texte qui affiche le bâtiment dans lequel on se situ, j'ai mon sous-formulaire qui m'indique tous les locaux du bâtiments à la ligne. Avec la surface du local, s'il est tertiaire ou industriel, le nombre de personnes dans ce local etc etc.
    Ci besoin, je peux modifier ces données dans le sous-formulaire, ou alors à la fin de ce formulaire ajouter un nouveau local.
    Néanmoins, je ne dois pas pouvoir ajouter un local déjà existant dans le même bâtiment, avec le même nom de local. C'est pour ça que je souhaiterai pouvoir afficher un message d'erreur lorsqu'on rentre un nom de local déjà existant dans ce bâtiment, ou sinon si ce n'est pas le cas, qu'il me demande la confirmation de l'ajout de ce local.

    J'ai cherché sur le net, et la fonction qui est souvent retomber est la suivante : DlookUp

    Je me doute que le code à mettre sera sur le champ du local dans le sous formulaire, dans l'onglet Evénnement. Mais je ne vois pas quoi mettre, j'ai essayé quelques codes mais sans réussite.

    Je vous remercie de votre attention.
    Cordialement

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    La première étape à faire c'est de mettre un index unique sur le nom du bâtiment dans la table pour garantir que jamais tu n'auras 2 bâtiments avec le même nom.
    Après si tu essayes la BD te le dit et refuse l'ajout.

    Pour la partie préventive, la recherche préliminaire.

    Tu peux mettre dans l'événement AvantMAJ du champ NomBatiment un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if not isnull(dfirst("NomBatiment", "TaTable", "[NomBatiment]=""" & me.NomBatiment & """")) then
        msgbox "Il y a déjà un bâtiment"
        cancel=True 'Annule la modification
     else
        if vbNo=msgbox("Voullez-vous ajouter le bâtiment", vbYesNo+VBQuestion+VbDefaultButton2) then
            cancel=True
        end if
    end if
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Je vous remercie ! Cela fonctionne très bien, comme je l'attendais !

    Cordialement
    Alban

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    N'oublie pas la création de l'index il n'est pas bon de se reposer sur du code pour ce genre de sécurité.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Re bonjour,

    Je reviens vers vous, car j'ai remarqué que mon code ne permet finalement pas de résoudre ce que je voulais au début. Je m'explique :

    Nom : Capture.PNG
Affichages : 71
Taille : 39,5 Ko

    Sur le formulaire ci-dessus, comme expliqué précédemment, je passe d'un bâtiment à l'autre avec les boutons flèches en bas. Ce que je souhaite donc faire ici, c'est une modification des locaux dans un bâtiment.
    Avec le code qui a été envoyé plus haut, cela me permet d'afficher un message d'erreur lorsque le local existe déjà afin de ne pas avoir deux fois le même local. Néanmoins, cela m'affiche une erreur uniquement lorsque le local est existant sur la table utilisée pour ce formulaire, en l'occurrence tous les locaux de tous les bâtiments.
    Tendis que je souhaite qu'il m'affiche une erreur que lorsque je modifie un numéro de local déjà existant dans le bâtiment sélectionné via les flèches en bas et d'où le nom est affiché en haut.
    Voici donc le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Gisement_batiment_BeforeUpdate(Cancel As Integer)
    If Not IsNull(DFirst("Gisement_batiment", "T_Detail_batiment", "[Gisement_batiment]=""" & Me.Gisement_batiment & """")) Then
        MsgBox "Il y a déjà ce gisement dans le bâtiment"
        Cancel = True 'Annule la modification
     Else
        If MsgBox("Voulez-vous confirmer la modification", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
            Me.Undo
            Cancel = True
        End If
    End If
    End Sub
    Ici "Gisement_batiment" correspond à la variable du local du bâtiment, "T_Detail_batiment" est la table où est recensé tous les locaux de tous les bâtiments.
    Je ne vois donc pas quoi modifier pour qu'il ne recherche pas tous les locaux de la base pour savoir s'il y a un doublon, mais uniquement chercher les locaux du bâtiment sélectionné.

    Je vous remercie de votre attention.
    Cordialement

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 263
    Points : 19 428
    Points
    19 428
    Billets dans le blog
    63
    Par défaut
    Bonsoir,

    Dans votre fonction test il me semble qu'il manque la condition sur le bâtiment comme la proposé Marot :

    donc il faudrait identifier le nom de la zone de texte affichant le nom du bâtiment dans votre formulaire principal, puis tenter quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Gisement_batiment_BeforeUpdate(Cancel As Integer)
    If Not IsNull(DFirst("Gisement_batiment", "T_Detail_batiment", "[Gisement_batiment]=""" & Me.Gisement_batiment & """ and [NomBatiment]=""" & Forms!F_Principal!NomBatiment & """")) Then
        MsgBox "Il y a déjà ce gisement dans le bâtiment"
        Cancel = True 'Annule la modification
     Else
        If MsgBox("Voulez-vous confirmer la modification", vbQuestion + vbYesNo, "CONFIRMATION") = vbNo Then
            Me.Undo
            Cancel = True
        End If
    End If
    End Sub
    Je suppose que votre formulaire principal se nomme F_Principal et que la zone de texte affichant le nom du bâtiment NomBatiment.

    Mais ceci implique que le champ NomBatiment soit dans la table T_Detail_batiment, ce qui serait étonnant, donc, vous devrez probablement utiliser une requête à la place de la table dans la fonction DFirst.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Cette fois ci, tout fonctionne comme il le faut. Je vous remercie !

    Cordialement

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 21/10/2016, 16h54
  2. [AC-2003] Valeur identique dans 2 sous-formulaires
    Par lucas-18 dans le forum IHM
    Réponses: 7
    Dernier message: 30/09/2009, 18h30
  3. Réponses: 2
    Dernier message: 05/12/2008, 12h06
  4. Réponses: 1
    Dernier message: 25/03/2007, 22h03
  5. Réponses: 25
    Dernier message: 26/01/2007, 17h04

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