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

IHM Discussion :

Erreur gestion absence dans liste


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Erreur gestion absence dans liste
    Bonjour,

    Je réalise un BDD pour gérer et archiver nos correspondances.
    J'ai un premier formulaire où je choisi dans des listes :
    - émetteur (1ère liste), son contact (2ème liste),
    - destinataire (3ème liste), son contact (4ème liste).
    Je peux bien évidemment saisir dans chacun des champs la valeur désirée.
    Par contre, je veux que si la valeur n'existe pas dans la liste : un formulaire s'ouvre avec la nouvelle saisie et que l'on puisse compléter le reste des informations (notamment associé au nom d'émetteur : l'adresse, la télécopie, ...).
    J'ai saisi le code ci-dessous mais cela ne fonctionne pas comme je le souhaite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Emetteur_NotInList(NewData As String, Response As Integer)
     
    If MsgBox("Voulez-vous ajouter " & NewData & " à la liste des Emetteurs ?", vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") = vbYes Then
        DoCmd.OpenForm "Emetteurs", , , , acFormAdd
        DoCmd.Close acForm, "Correspondances", acSaveNo
    Else
        GoTo Emetteur_AddCancel
    End If
     
    Emetteur_AddCancel:
    DoCmd.OpenForm "Correspondances", , , acAdd
    Response = acDataErrContinue
     
    End Sub
    Je n'arrive pas à retourner sur la correspondance que j'ai commencé à créer et le nouvel émetteur n'apparaît pas dans ma liste.
    Comment dois-je modifier mon code SVP ?
    Merci pour votre aide !
    @+

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 124
    Points : 12 176
    Points
    12 176
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Dans ton code, déjà, le Else ne sert à rien car quelle que soit la réponse de l'utilisateur, l'exécution suivra son cours...

    En fait, c'est bien NotInList qu'il faut utiliser mais...

    Voilà le code modifié.
    Il exploite la fonction FormIsLoaded() afin de vérifier si le formulaire Emetteurs (que tu aurais nommer frmEmetteurs pour une meilleure lisibilité et un respect des conventions typographiques).

    Elle exploite aussi l'argument OpenArgs() afin d'y loger la valeur de NewData dans le formulaire Emetteurs où j'ai supposé que le champ cible se nomme Emetteur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Emetteur_NotInList(NewData As String, Response As Integer)
        If MsgBox(NewData & " n'existe pas dans la liste..." & vbCrLf & "Voulez-vous ajouter cet émetteur à la liste ?", vbYesNo + vbQuestion + vbDefaultButton2, "Ajout") = vbYes Then
            Response = acDataErrContinue
            DoCmd.OpenForm "Emetteurs", , , , acFormAdd, acDialog, NewData
            Do
                If FormIsLoaded(Me.Name) = False Then
                    Me.Emetteur.Requery
                    Exit Do
                Else
                    DoEvents
                Wend
            Loop
        End If
    End Sub
    La fonction en question... à mettre dans un module indépendant où réside d'autres fonctions publiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Function FormIsLoaded(ByVal FormName As String) As Boolean
        If SysCmd(acSysCmdGetObjectState, acForm, FormName) <> 0 Then
            If Forms(FormName).CurrentView <> 0 Then
                FormIsLoaded = True
            End If
        End If
    End Function
    Enfin, le formulaire Emetteurs voit son événement Load() comme ceci (à toi d'améliorer)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_Load()
        If Not IsNull(Me.OpenArgs) Then
            Me!Emetteur = Trim$(Me.OpenArgs)
            MsgBox "Veuillez compléter les autres champs s.v.p...", , "Nouvel emetteur"
        Else
            MsgBox "La valeur de l'émetteur ne peut pas être une chaîne vide !", vbExclamation
            DoCmd.Close acForm, Me.Name
        End If
    End Sub
    Bonne adaptation...

    Argy

Discussions similaires

  1. Ouverture d'un sous formulaire, si absence dans liste
    Par discretos39 dans le forum VBA Access
    Réponses: 16
    Dernier message: 15/03/2009, 18h53
  2. Sur absence dans liste + ajout
    Par psychopat dans le forum VBA Access
    Réponses: 4
    Dernier message: 19/07/2008, 14h00
  3. Absence dans liste déroulante.
    Par kupae dans le forum IHM
    Réponses: 5
    Dernier message: 15/07/2008, 17h09
  4. Absence dans liste déroulante
    Par mystikgirl30 dans le forum IHM
    Réponses: 7
    Dernier message: 30/05/2007, 11h30
  5. [zone de liste] événement absence dans liste
    Par platon dans le forum Access
    Réponses: 1
    Dernier message: 07/11/2005, 09h57

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