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 :

Ouverture d'un sous formulaire, si absence dans liste


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut Ouverture d'un sous formulaire, si absence dans liste
    Bonjour tous le monde,
    pour commencer je tiens à dire merci d'avance car je suis novice expérimenté à l'application access.
    Voila j'ai une base de données à rendre pour mon travail dans quelques jours et j' ai besoin d' aide vraiment.

    Fonctionnement de ma base:
    C' est une base qui servira pour la gestion des voyages de chaques salarié avec formulaire de saisie.
    L' utilisateur devra rentrer les infos sur le formulaire principal de la table principal (table voyage) et rajouter les données sur les formulaires secondaires en meme temps.
    Toutes les saisies se font sur liste déroulante.

    mon probleme :
    lorsque je rentre une commande sur mon formulaire principal (voyage), je voudrais qu' il me dise qu'elle n'éxiste pas et qu'il me propose de l'ajouter dans le formulaire secondaire (commande).

    Voici le code que j'ai éffectué sur "evenement absence dans liste" de la liste modifiable voyages.commande du formulaire principal:

    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
    Private Sub VOYAGES_COMMANDE_NotInList(NewData As String, Response As Integer)
    Dim intmsgdialogue As Integer, strtitre As String
    Dim intnvcommande As Integer, strMsg As String
    If IsNull([VOYAGES_COMMANDE]) Then
    strtitre = "Commande inconnu dans la table"
    strMsg = "Voulez-vous ajouter une commande?"
    intmsgdialogue = vbYesNo + vbExclamation
    intnvcommande = MsgBox(strMsg, intmsgdialogue, strtitre)
    If intnvcommande = vbYes Then
    DoCmd.DoMenuItem acFormBar, acEdit, acUndo
    DoCmd.OpenForm "[commandes_req]", , , acAdd
    forms![COMMANDES_REQ]![commande] = NewData
    Response = acDataErrContinue
    Else
    Response = acDataErrDisplay
    DoCmd.DoMenuItem acFormBar, acEdit, acUndo
    strMsg = "pour modifier le nom de "
    MsgBox strMsg
    DoCmd.DoMenuItem acFormBar, acEdit, acUndo
    Response = acDataErrAdded
    DoCmd.OpenForm "[ORDRE_AFFECTATION]", , , acAdd
    forms![ordre_affectation]![commande] = NewData
    End If
    End Sub
     
    End Sub
    Merci de votre aide

  2. #2
    Membre expert
    Avatar de FreeAccess
    Homme Profil pro
    Un monde ou prendre est plus facile qu'apprendre.
    Inscrit en
    Mars 2006
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Un monde ou prendre est plus facile qu'apprendre.

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 745
    Points : 3 834
    Points
    3 834
    Par défaut
    Bonjour,

    Oui...et alors quel est le problème......

    Un peu plus d'explication serait bienvenue......avec éventuellement le message d'erreur ou nous expliquer ce qui se passe ou pas.......lorsque tu exécute ton code...
    FreeAccess
    "Petit à petit l'araignée tisse sa toile"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    c' est bien ca le problème, je n' ai aucun message. Aucune demande d' ajout dans la table secondaire. ( ce que j' ai essayer de faire dans mon code :/ )
    Le seul message que j' ai est qu'il me dit qu' il ne trouve aucun enregistrement correspondant a la table, normal vu que l' utilisateur rentre les données sur le formulaire principal qui est neutre.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir ou bonjour,
    le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Isnull(VOYAGES_COMMANDE)
    ne sert à rien et même fausse tout le code. Si l'événement a lieu; le contrôle contient bien une valeur contenue dans le paramètre NewData et cette valeur n'a aucune entrée dans la liste. Essaie en retirant ce test; il y a sûrement d'autres erreurs.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Toujours pareil, rien se passe et toujours le même message d' erreur. :/
    le message est en pièce jointe ...
    Si quelqu'un à 1 solution, Merci ..
    Images attachées Images attachées  

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    comme précisé plus haut, il y a je crois des erreurs de logique dans le code.
    D'abord, pourquoi annuler l'événement quelque soit le choix de l'utilisateur.
    Il n'y a pas d'ajout dans la liste du nouvel élément.

    'Premier partie demande d'insertion d'une nouvelle commande.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     If intnvcommande = vbYes Then
        'Pourquoi annuler ???
        DoCmd.DoMenuItem acFormBar, acEdit, acUndo
     
        'Tu ouvres un formulaire en mode Ajout Nouvel Enregistrement
        ' mais sans attendre la confirmation de l'insertion.
        'Et sans mettre à jour la liste; l'élément n'est donc pas ajouter alors que
        ' l'utilisateur l'a demandé.
        DoCmd.OpenForm "[commandes_req]", , , acAdd
        forms![COMMANDES_REQ]![commande] = NewData
     
        'Ici, tu considères que l'ajout n'a pas eu lieu. 
        Response = acDataErrContinue
    'Seconde partie l'utilisateur a répondu Non à la demande d'insertion d'une nouvelle commande
    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
     
    Else
        Response = acDataErrDisplay
     
        'Tu annules la saisie par un undo 
        DoCmd.DoMenuItem acFormBar, acEdit, acUndo
     
        'Tu affiches un message incomplet
        strMsg = "pour modifier le nom de "
        MsgBox strMsg
     
        'Tu effectues de nouveau un Undo. sur quoi ?
        DoCmd.DoMenuItem acFormBar, acEdit, acUndo
     
        'Et ici tu renvoies l'information que l'élément a été ajouté à la liste alors
        'que l'utilisateur à demander le contraire et qu'il n'y a eu aucun ajout
        Response = acDataErrAdded
     
        '??????
        DoCmd.OpenForm "[ORDRE_AFFECTATION]", , , acAdd
        forms![ordre_affectation]![commande] = NewData
    End If
    End Sub

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Merci pour tes réponses..
    Sinon voila j' ai essayé de refaire un petit code en suivant tes conseils mais tjs rien ...

    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
    Private Sub COMMANDE_NotInList(NewData As String, Response As Integer)
    Dim intmsgdialogue As Integer, strtitre As String
    Dim intnvclient As Integer, strMsg As String
    strtitre = "Commande inconnu dans la table"
    strMsg = "Voulez-vous ajouter une commande?"
    intmsgdialogue = vbYesNo + vbExclamation
    intnvclient = MsgBox(strMsg, intmsgdialogue, strtitre)
    If intnvclient = vbYes Then
    DoCmd.OpenForm "[commandes_req]", , , acAdd
    forms![COMMANDES_REQ]![COMMANDE] = NewData
    NewData.Requery
    Response = acDataErrAdded
    Else
    Response = acDataErrContinue
    COMMANDE.Undo
    End If
    End Sub
    Je commence à désespéré ... :/

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Je suis bête il sufiser de mettre oui dans limité à la liste ... Ma msg box marche cependant ce message apparaît.
    Une petite aide ?
    Merci pour tous
    Images attachées Images attachées  

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    C'est normal, tu ouvres le formulaire sans attendre qu'il soit fermé pour pousuivre l'éxécution du code.
    De quel type est le champ commande dans la table ? NewData est du texte.

    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
    31
    32
    33
     
    Private Sub COMMANDE_NotInList(NewData As String, Response As Integer)
    	Dim intmsgdialogue As Integer, strtitre As String
    	Dim intnvclient As Integer, strMsg As String
    	strtitre = "Commande inconnu dans la table"
    	strMsg = "Voulez-vous ajouter une commande?"
    	intmsgdialogue = vbYesNo + vbExclamation
    	intnvclient = MsgBox(strMsg, intmsgdialogue, strtitre)
     
    'Sinon Annuler et soritr
    	If intnvclient = vbno Then Goto Commande_AddCancel
     
    'Ouvrir le formulaire et attandre sa fermeture
    	DoCmd.OpenForm "[commandes_req]", , , acAdd
    	forms![COMMANDES_REQ]![COMMANDE] = NewData
     
    'Atendre la fermeture du formulaire avant de poursuivre
    	Do While CurrentProject.AllForms("[commandes_req]").IsLoaded
    		DoEvents
    	Loop
     
    'Vérifier que la commande a bien été ajouté 
    'Si la commande n'a pas été ajouté alors Annuler et Sortir
    	If Isnull(Dlookup("commande","Commandes","commande='" & newdata & "'")) then Goto Commande_AddCancel
     
    'La commande a bien été ajouté mettre à jour la liste
    	 Response = acDataErrAdded
             Exit Sub 		
     
    Commande_AddCancel:
    COMMANDE.Undo
    Response = acDataErrContinue
    End Sub
    Le code a été en considérant le champ commande comme étant du texte si le champ attend une valeur numérique
    alors il faut remplacer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Isnull(Dlookup("commande","Commandes","commande='" & newdata & "'")) then
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Isnull(Dlookup("commande","Commandes","commande=" & CLng(newdata))) then

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    Erreur d'objet 424.. Objet requis ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Do While CurrentProject.AllForms("[COMMANDES_REQ]").IsLoaded
    quesque sa veu dire ? qu' il ne trouve pas tous les éléments du formulaire COMMANDE_REQ?
    DSL de me mâcher le travail ...
    Merci en tout cas

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Essaie comme ça alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While Application.CurrentProject.AllForms("[commandes_req]").IsLoaded

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    erreur de compilation
    Membre de méthode ou données introuvable..

    il me sourligne le currentproject...
    je n' ai pas compris a la base pk il me refoule si quelqu'un peux m'expliquer
    Merci

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Es-tu sûr de l'orthographe ?
    CurrentProject est un objet Access donc a moins d'un faute d'orthographe

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    oui sur ..
    J' utilise A.97, sa peut venir de là non ?

  15. #15
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Ok, essaie en remplaçant les lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Ouvrir le formulaire et attandre sa fermeture
    	DoCmd.OpenForm "[commandes_req]", , , acAdd
    	forms![COMMANDES_REQ]![COMMANDE] = NewData
     
    'Atendre la fermeture du formulaire avant de poursuivre
    	Do While CurrentProject.AllForms("[commandes_req]").IsLoaded
    		DoEvents
    	Loop
    par celles-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'Ouvrir le formulaire et attandre sa fermeture
    	DoCmd.OpenForm "[commandes_req]", , , acAdd,achidden
    	forms![COMMANDES_REQ]![COMMANDE] = NewData
                 Docmd.OpenForm "[commandes_req]",,,Acadd,AcDialog

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    J'ai un peu oublié de préciser qu'il y a une autre table ataché à commande qui elle est un formulaire de saisie aussi.Qui elle contient aussi des champs d'information dans le formulaire principale..
    Dans la table commande le champ de la table en question est sur liste déroulante aussi.
    J'ai le même message d'érreur que pour commande
    Sa me met comme quoi le moteur microsoft ne trouve aucun enregistrement correspondant à la table... blabla
    je voudrais savoir quelle méthode utilisée pour le supprimer..Ou si il y avait moyen de mettre en attente jusqu'à que l'utilisateur rentre les données. Vraiment pas besoin que tu me donne tous sur un plateau, juste une procèdure me ferait plaisir de ta part, tu en as bien bcp fait.
    Merci pour tout ton aide en tous cas.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Points : 11
    Points
    11
    Par défaut
    j' ai compris le code merci pour tes infos ilank.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/06/2012, 16h10
  2. Réponses: 8
    Dernier message: 04/11/2008, 11h05
  3. Réponses: 2
    Dernier message: 28/06/2007, 09h22
  4. Réponses: 1
    Dernier message: 04/05/2007, 12h15
  5. ouverture dynamique de sous-formulaire
    Par seurjer dans le forum IHM
    Réponses: 2
    Dernier message: 27/11/2006, 18h55

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