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 :

[Formulaires] Passer des données entre formulaires


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Points : 81
    Points
    81
    Par défaut [Formulaires] Passer des données entre formulaires
    Bonjour,

    Je suis en train de faire une application qui gère des ventes avec des fournisseurs. A un moment, l'utilisateur doit choisir un fournisseur (que ce soit un nouveau fournisseur saisi, ou un sélectionné dans une liste).
    Le problème est que je ne sais pas comment passé le code du fournisseur d'un formulaire à un autre... Comment peut-on faire?

    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Quand tu ouvres un formulaire tu utilises la commande DoCmd.OpenForm, regarde l'aide pour la syntaxe, dans le dernier critére tu mets ce que tu veux

    Ensuite quant ton deuxième formulaire est ouvert, récupére cette donnée avec
    Starec

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    J'ai essayé mais je n'arrive toujours pas, voici ce que j'ai fait :
    J'ai mis en code dans le premier formulaire
    DoCmd.OpenForm "achat_ajout3", acNormal, acFormReadOnly, acWindowNormal, Me.[code_frs]
    Ce formulaire passe donc le code_frs dans le formulaire achat_ajout3, cet évènement se produit lorsque j'appuie sur un bouton.
    Ensuite, j'ai mis dans le second formulaire (achat_ajout3)
    Me.[code_frs] = Me.OpenArgs
    Mais ça ne marche toujours pas, lorsque je clique sur le bouton, Access m'affiche l'erreur "Utilisation incorrecte de Null", alors qu'avant j'ai fait un MsgBox qui affiche bien code_frs...

    Je ne comprend pas...

    Merci de m'éclairer

  4. #4
    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,

    Ta syntaxe n'est pas correct....attention aux virgules....
    Extrait de l'aide:
    Vous pouvez laisser un argument facultatif vierge au milieu de la syntaxe, mais vous devez inclure la virgule de l'argument. Si vous laissez un argument de fin vierge, n'utilisez pas de virgule à la suite du dernier argument spécifié.
    DoCmd.OpenForm "achat_ajout3", acNormal, , , acFormReadOnly, acWindowNormal, Me.[code_frs]
    Bonne continuation.....

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Points : 81
    Points
    81
    Par défaut
    Merci mais ça ne marche toujours pas, ça me met le message suivant :
    Le type d'une expression entrée pour un des arguments est incorrect.
    Voici le code du premier formulaire (celui qui doit envoyer le code du fournisseur) :
    DoCmd.OpenForm "achat_ajout3", acNormal, , , acFormReadOnly, acWindowNormal, code_frs
    Et celui du second formulaire (celui qui doit recevoir le code):
    Private Sub form_open()

    Dim code As Integer
    code = Me.OpenArgs

    End Sub
    Pourtant le code_frs (qui est le champ d'une table) est bien visible dans mon formulaire et contient bien un numéro, c'est étrange.

    J'ai vraiment du mal à comprendre comment cela fonctionne... Et notamment comprendre à quoi correspond le "Me.".

    Si quelqu'un pourrait m'éclairer à ce sujet, ça me serait bien utile
    Merci.

  6. #6
    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,
    ...J'ai vraiment du mal à comprendre comment cela fonctionne... Et notamment comprendre à quoi correspond le "Me.".....
    Ici Me va correspondre au champ nommé "code_frs" se trouvant sur ton formulaire actif.....

    Donc ne change pas la syntaxe que je te donne......
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "achat_ajout3", acNormal, , , acFormReadOnly, acWindowNormal, Me.[code_frs]

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Points : 81
    Points
    81
    Par défaut
    Merci de m'avoir répondu. Que ce soit juste code_frs ou Me.[code_frs], Access me retourne toujours la même erreur lorsque j'appuie sur le bouton qui doit faire passer le code à l'autre formulaire :
    Le type d'une expression entrée pour un des arguments est incorrect.
    Comment celà se fait il?
    Comment résoudre le problème et bien passer mon code dans le second formulaire?
    Merci

  8. #8
    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
    Re,

    Ton champ contenant ta valeur se nomme bien "code_frs"
    Essai cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ....., Me.code_frs.Value
    Quelle est le type de valeur comprise dans ton champ "code_frs" (Numérique, string....)
    Je demande cela, car dans le code d'ouverture de ton second Form, la valeur attendue est de type numérique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim code As Integer
    code = Me.OpenArgs

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Points : 81
    Points
    81
    Par défaut
    Si je met ..., Me.code_frs ou ...Me.[code_frs], j'ai le message suivant :
    Le type d'une expression entrée pour un des arguments est incorrect.
    Mais si je met Me.code_frs.value ça m'affiche :
    L'action OpenForm a été annulée.
    Bref je n'y comprend rien...

    Pour éclaircir mon problème je poste les codes des 2 formulaires :
    Le premier :
    Option Compare Database

    Private Sub form_open(Cancel As Integer)
    'A l'ouverture du formulaire, on accède directement au nouvel enregistrement
    DoCmd.GoToRecord , , acNewRec
    End Sub

    Private Sub Commande25_Click()
    Dim cod As Integer

    On Error GoTo Err_Commande25_Click

    If IsNull(nom_frs) Then
    'Affichage d'un message d'erreur si le client n'a pas de nom
    MsgBox ("Le fournisseur doit avoir un nom.")
    Else
    'On enregistre le nouveau fournisseur et on ouvre un autre formulaire
    DoCmd.GoToRecord , , acNewRec
    'Application.DoCmd.Close
    DoCmd.OpenForm "achat_ajout3", acNormal, , , acFormReadOnly, acWindowNormal, Me.code_frs.Value
    End If

    Exit_Commande25_Click:
    Exit Sub

    Err_Commande25_Click:
    MsgBox Err.Description
    Resume Exit_Commande25_Click

    End Sub
    Le second :
    Option Compare Database

    Private Sub form_open()

    Dim code As Integer
    code = Me.OpenArgs

    End Sub
    Voici comment se comporte mon formulaire (le premier) à son ouverture :


    Dès que je rentre du texte, voici comment il est :


    J'ai volontairement affiché le code du fournisseur (qui est en auto-increment) pour voir s'il est bien là, mais bien sûr il ne sera plus visible dès que mon problème sera réglé. On peut alors voir que le code doit normalement être transmis à l'autre page.

    Où est mon problème?

    Merci

  10. #10
    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
    'On enregistre le nouveau fournisseur et on ouvre un autre formulaire
    DoCmd.GoToRecord , , acNewRec
    'Application.DoCmd.Close
    DoCmd.OpenForm "achat_ajout3", acNormal, , , acFormReadOnly, acWindowNormal, Me.code_frs.Value
    Ici après avoir vérifié que la saisie du Fournisseur soit correcte.......
    tu passe sur un nouvel enregistrement vide..donc plus de valeur dans ton champ "code_frs"
    et ensuite tu ouvre le formulaire "achat_ajout3".......

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Points : 81
    Points
    81
    Par défaut
    C'est exact, c'est à quoi je pensais...
    Mais viens le problème (pour moi) d'enregistrer un nouveau fournisseur sans avoir à passer à un nouvel enregistrement.

    J'ai essayé de stocker le code et ensuite de faire passer le code dans le docmd.openform... Mais ça n'a pas marché...

    Comment puis-je faire pour enregistrer un nouveau fournisseur sans que ça m'affiche un nouvel enregistrement?

  12. #12
    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
    Je vais essayer de répondre en fonction de ce que j'ai compris...

    Ouverture de ton Form "Saisie fournisseur" sur un nouvel enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub form_open(Cancel As Integer)
    'A l'ouverture du formulaire, on accède directement au nouvel enregistrement
    DoCmd.GoToRecord , , acNewRec
    End Sub
    On vérifie que le non du fournisseur soit correctement saisie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Commande25_Click()
    If (IsNull(nom_frs) Or (nom_frs = vbNullString)) Then
        MsgBox "La saisie du fournisseur est OBLIGATOIRE avant validation", 48, "Saisie incomplète"
        Exit Sub
    Else
    'Je sauvegarde l'enregistrement en cours
    DoCmd.RunCommand acCmdSaveRecord
    'J'ouvre mon second formulaire
    DoCmd.OpenForm "achat_ajout3", acNormal, , , acFormReadOnly, acWindowNormal, Me.code_frs.Value
    End If
     
    End Sub
    A tester..........

    [EDIT] Petite question.....

    Pourquoi veux tu obligatoirement sauvegarder ton enregistrement avant d'ouvrir le second formulaire ...
    Normalement, dès que tu as au moins remplis un champ correctement (en l'occurence le champ "nom_frs")...le champ "code_frs" se vois automatiquement attribué un numéro......

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Points : 81
    Points
    81
    Par défaut
    Je veux sauvegarder l'enregistrement de façon à ce qu'il soit dans la base de données

    Je ne connaissais la commande "DoCmd.RunCommand acCmdSaveRecord", merci elle m'aide.
    Cependant ça ne fonctionne toujours pas, cela m'affiche "L'action OpenForm a été annulée". J'ai ré-essayé en mettant le code suivant (les modifications sont en gras) :
    Private Sub Commande25_Click()

    On Error GoTo Err_Commande25_Click

    If IsNull(nom_frs) Then
    'Affichage d'un message d'erreur si le client n'a pas de nom
    MsgBox "Le fournisseur doit avoir un nom."
    Else
    'On enregistre le nouveau fournisseur et on ouvre un autre formulaire
    'Je sauvegarde l'enregistrement en cours
    DoCmd.RunCommand acCmdSaveRecord
    'Application.DoCmd.Close
    DoCmd.OpenForm "achat_ajout3", , , , , , Me.code_frs
    End If

    Exit_Commande25_Click:
    Exit Sub

    Err_Commande25_Click:
    MsgBox Err.Description
    Resume Exit_Commande25_Click

    End Sub
    J'ai aussi essayé avec Me.code_frs.Value mais ça donne le même résultat!

  14. #14
    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
    Je veux sauvegarder l'enregistrement de façon à ce qu'il soit dans la base de données
    Mais ton enregistrement sera automatiquement sauvegardé à chaque changement d'enregistrement ou à la fermeture de ton formulaire......

    Ensuite, regarde bien.......quand je corrige ton code, il faut en tenir compte...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If (IsNull(nom_frs) Or (nom_frs = vbNullString)) Then
        MsgBox "La saisie du fournisseur est OBLIGATOIRE avant validation", 48, "Saisie incomplète"
        Exit Sub
    Else
    Il faut placer un Exit Sub à cet endroit (sortie de la procédure), sinon après l'affichage de ton MsgBox, le code exécute la commande suivante......

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Points : 81
    Points
    81
    Par défaut
    Merci mais ça ne marche toujours pas (décidement...)
    Lorsque je rentre un nouveau fournisseur et que j'appuie sur le bouton, ça m'affiche bien le formulaire "achat_ajout3", mais ce dernier est vide.
    Il n'y a strictement rien à l'intérieur, pourtant il devrait y avoir deux titres et une zone de texte où le code du fournisseur s'affiche.

    J'ai pourtant bien repris et étudié le code de la base en fichier joint mais ça ne veux pas...

    Voici le code de mon premier formulaire :
    Option Compare Database

    Private Sub Form_Open(Cancel As Integer)
    'A l'ouverture du formulaire, on accède directement au nouvel enregistrement
    DoCmd.GoToRecord , , acNewRec
    End Sub

    Private Sub Commande25_Click()
    If (IsNull(nom_frs) Or (nom_frs = vbNullString)) Then
    MsgBox "La saisie du fournisseur est OBLIGATOIRE avant validation", 48, "Saisie incomplète"
    Exit Sub
    Else
    'DoCmd.RunCommand acCmdSaveRecord
    DoCmd.OpenForm "achat_ajout3", acNormal, , , acFormReadOnly, acWindowNormal, Me.code_frs.Value
    End If
    End Sub
    Et celui du second :
    Option Compare Database

    Private Sub Form_Open(Cancel As Integer)
    Me.Texte24.Value = OpenArgs
    End Sub

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 166
    Points : 81
    Points
    81
    Par défaut
    Merci ça marche (ENFIN!)
    Bon je vais pouvoir bien avancer maintenant

    Le fait que le formulaire soit vide était dû aux mode d'ouverture du formulaire visiblement, il fallait mettre :
    DoCmd.OpenForm "achat_ajout3", , , , , , Me.code_frs.Value

Discussions similaires

  1. Passer des données entre Activity
    Par plopo dans le forum Android
    Réponses: 1
    Dernier message: 18/04/2013, 00h33
  2. [AC-2007] VBA: Passer des variables entre formulaire multi-utilisateurs ?
    Par delphi_jb dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/07/2012, 13h16
  3. récupérer des données entre formulaires
    Par ballantine's dans le forum Langage
    Réponses: 7
    Dernier message: 27/10/2009, 09h24
  4. [Débutant] Passer des données entre les fonctions callback
    Par Nouk_Lea dans le forum Interfaces Graphiques
    Réponses: 10
    Dernier message: 18/02/2009, 16h11
  5. [Données]Passer des données entre applet et Servlet
    Par CheryBen dans le forum Applets
    Réponses: 11
    Dernier message: 16/09/2005, 13h48

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