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 :

Débutante - Code VBA pour MsgBox avec actions multiples


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Débutante - Code VBA pour MsgBox avec actions multiples
    Bonjour,

    voici les données de mon problème :
    Table "Coordonnéesclients" et formulaire "Clients" avec onglets et
    sous-formulaires
    Champs et contrôles "Patronyme", "Prénom" , "Numérodevoie"

    Je souhaite éviter les doublons involontaires dans la base mais permettre la
    création d'homonymes volontaires. J'utilise donc une message box vb
    YesNoCancel AVANT mise à jour par
    un code évènement sur le contrôle "Prénom" avec 3 actions en fonction du
    choix de l'utilisateur :
    vbYes : créer homonyme en conservant [Patronyme] et [Prénom] saisis et se placer sur le contrôle suivant "Numérodevoie"
    vbNo : ouvrir le formulaire en cours sur l'enregistrement déjà existant pour
    ces [Patronyme] et [Prénom]
    vbCancel : annuler et effacer les [Patronyme] et [prénom] saisis et se replacer sur le contrôle "Patronyme" dans le formulaire actif

    La traduction erronée de tout cela donne le code ci-dessous. Quelqu'un
    pourrait-il me proposer une version corrigée de ce code?

    Merci beaucoup


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Private Sub Prénom_BeforeUpdate(Cancel As Integer)
    'variable stockant la réponse donnée dans la boite de dialogue
    Dim intReponse As Integer
     
    If Not IsNull(DLookup("Nom", "Coordonnéesduclient", "[Nom] ='" & Me!Nom & "' 
    AND [Prénom]='" & Me.Prénom & "'")) Then intResponse = MsgBox("Ce 
    bénéficiaire semble déjà enregistré. Voulez-vous saisir un HOMONYME ?", 
    vbYesNoCancel + vbCritical + vbDefaultButton3, "Attention !")
        Select Case intReponse
        Case vbYes
        Forms!Coordonnéesduclient!Adresse.SetFocus
        Case vbNo
        DoCmd.OpenForm "Coordonnéesduclient", acNormal, , "[Nom] ='" & Me!Nom & 
    "' AND [Prénom]='" & Me.Prénom & "'"
        Case vbCancel
        Form.Undo
        Forms!Coordonnéesduclient!Nom.SetFocus
        End Select
     
    End Sub

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut et bienvenue sur le forum,

    Peux tu dire plus précisément quelle erreure génére ton code ?
    Sur quelle ligne ?

    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Erreurs
    Bonjour Muhad'hib,
    la message box s'affiche comme il faut.
    En revanche,
    quand on choisit oui, erreur 438 "propriété ou méthode non gérée par cet objet"
    quand on choisit non, erreur 2501 "l'action Openform a été annulée"
    quand on choisit annuler, erreur 2108 "vous devez enregistrer le champ avant d'éxecuter l'action SetFocus"
    Merci pour ton aide

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    est-ce qu'il ne manquerait pas des "undo" quelque part ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,

    Avant de changer le focus ou de charger un autre enregistrement on doit terminer la saisie du controle en cours (nous sommes avant MAJ). J'utiliserai plutot l'événement aprés MAJ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Private Sub Prénom_AfterUpdate()
    Dim nom As String
    Dim prenom As String
    Dim intReponse As Integer
     
    If Not IsNull(DLookup("Nom", "Coordonnéesduclient", "[Nom] ='" & Me.nom & "' AND [Prénom]='" & Me.Prénom & "'")) Then
        intReponse = MsgBox("Ce bénéficiaire semble déjà enregistré. Voulez-vous saisir un HOMONYME ?", vbYesNoCancel + vbCritical + vbDefaultButton3, "Attention !")
     
        Select Case intReponse
            Case vbYes
                Me.Numérodevoie.SetFocus
            Case vbNo
                nom = Me.nom
                prenom = Me.prénom
                Me.Undo
                DoCmd.GoToRecord , , acFirst
                Do Until Me.nom = nom And Me.prénom = prenom
                    DoCmd.GoToRecord , , acNext
                Loop
     
            Case vbCancel
                Me.Undo
                Me.Prénom = ""
                Me.Patronyme = ""
                Me.nom.SetFocus
        End Select
        intReponse = 0
    End If
    End Sub
    Pas testé puisque je n'ai pas ta base mais bon ...

    A+

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Merci
    Cela fonctionne très bien.
    Merci beaucoup et bonne fin de journée

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

Discussions similaires

  1. Quel code Vba pour action renvoyer mail
    Par AlexFred dans le forum VBA Outlook
    Réponses: 6
    Dernier message: 05/11/2012, 20h04
  2. Réponses: 7
    Dernier message: 15/08/2012, 16h16
  3. [AC-2007] code vba pour bouton en relation avec case oui/non
    Par ivonick dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/05/2011, 13h44
  4. Code VBA pour communication avec un port série dans EXCEL
    Par Fbroom dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2008, 10h14
  5. Réponses: 3
    Dernier message: 06/09/2005, 10h27

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