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 :

Passer variable d'un formulaire à un autre formulaire --> Access 2007 [AC-2007]


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 46
    Points
    46
    Par défaut Passer variable d'un formulaire à un autre formulaire --> Access 2007
    Bonjour,
    étant débutant sous Access 2007, je rencontre une problématique

    j'ai une table T_bordereau avec comme champ (clé primaire : numéro_bordereau et numéro_facture)

    j'ai un premier formulaire : f_recherche_bordereau avec un champ recherche et un bouton "rechercher" sur lequel j'ai mis une fonction onclick (code VBA)


    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
    Option Compare Database
     
    Private Sub Cmd_recherche_bordereau_Click()
     
    Me.Requery
    Dim sql_bordereau, bordereau_id As String
    Dim rs As DAO.Recordset
    sql_bordereau = "SELECT * FROM T_bordereau WHERE numero_bordereau ='" & Me.Txt_bordereau & "' ;"
    Set rs = CurrentDb.OpenRecordset(sql_bordereau)
    If Not rs.EOF Then
      DoCmd.OpenForm "F_trouve_bordereau", acNormal, , , , acWindowNormal
      DoCmd.Close acForm, "F_menu"
      bordereau_id = rs("numero_bordereau").Value
    Else
      MsgBox "NumÈro de bordereau incorrect ", vbInformation, "NumÈro de bordereau"
    End If
    End Sub
    et j'ai un deuxième formulaire : F_trouve_bordereau
    sur lequel je voudrais récupérer ma variable passée sur le premier formulaire
    en l'occurence ici bordereau_id si je ne me trompe

    par contre je ne sais pas du tout comment faire pour afficher ce champ dans une textbox
    dans mon form je n'ai que ça au départ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Option Compare Database
    merci de votre aide

    sachant que par la suite j'aimerais pouvoir afficher les différents champs d'autre table dont la clé est aussi numéro_bordereau

    d'avance merci
    Franck

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Tout d'abord renseignes-toi sur le requery.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Me.Requery
    Dim sql_bordereau, bordereau_id As String
    Dim rs As DAO.Recordset
    sql_bordereau = "SELECT * FROM T_bordereau WHERE numero_bordereau ='" & Me.Txt_bordereau & "' ;"
    Si tu fais un requery avant de te servir de la valeur d'un champ ça fonctionnera 1 fois sur 10. En effet Requery réinterroge la source de données et donc c'est le premier enregistrement de cette source qui sera affichée et non plus la courante.

    Requery ne doit pas être utilisé à tord et à travers.

    Si ton but est d'afficher le bordereau correspondant à l'id choisi dans le formulaire 1, il faut utiliser la clause Where de la commande docmd.openform.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 46
    Points
    46
    Par défaut
    bonjour,

    merci pour ta réponse

    pourrais tu m'en dire plus sur comment faire en adaptant mon code stp?
    car je ne m'en sors pas

    D'avance merci

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,
    Tout d'abord l'option explicit est vivement conseillée, ça évite pas mal de soucis.(voir le F1)

    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
    Option Compare Database
    Option Explicit
     
    Private Sub Cmd_recherche_bordereau_Click()
     
    Dim sql_bordereau, bordereau_id As String
    Dim rs As DAO.Recordset
     
    sql_bordereau = "SELECT * FROM T_bordereau WHERE numero_bordereau ='" & Me.Txt_bordereau & "' ;"
    Set rs = CurrentDb.OpenRecordset(sql_bordereau)
    If Not rs.EOF Then
      DoCmd.OpenForm "F_trouve_bordereau", acNormal, , "numero_bordereau ='" & Me.Txt_bordereau & "'", , acWindowNormal
      DoCmd.Close acForm, "F_menu"
    Else
      MsgBox "NumÈro de bordereau incorrect ", vbInformation, "NumÈro de bordereau"
    End If
    rs.close  'on est propre, si on ouvre une variable sur un recordset on le ferme après utilisation
    set rs = nothing
    End Sub
    Normalement le id sont de type Long (numérique long) et pas String.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 46
    Points
    46
    Par défaut
    j'ai modifié quelques points mais cela ne fonctionne toujours pas

    dans mon form 1 j'ai ma zone de text nommée txt_bordereau

    et j'ai le code suivant sur le bouton onclick:

    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
     
     
    Option Compare Database
     
    Private Sub Cmd_recherche_bordereau_Click()
     
    Dim sql_bordereau, bordereau_id As String
    Dim rs As DAO.Recordset
    sql_bordereau = "SELECT * FROM T_bordereau WHERE numero_bordereau ='" & Me.Txt_bordereau & "' ;"
    Set rs = CurrentDb.OpenRecordset(sql_bordereau)
    If Not rs.EOF Then
      Me.Refresh
      DoCmd.OpenForm "F_trouve_bordereau", acNormal, , " [bordereau_id] =" & Me![Txt_bordereau], , acWindowNormal
      DoCmd.Close acForm, "F_recherche_bordereau"
    Else
      MsgBox "NumÈro de bordereau incorrect ", vbInformation, "NumÈro de bordereau"
    End If
    End Sub


    par contre ça m'ouvre une boite de dialogue me demandant le bordereau_id
    ce que je ne souhaite pas vu que je le saisie dans la zone de texte txt_bordereau

    comment faire pour ne pas avoir cette boite?

    et surtout comment récupérer et afficher ce que je récupère du form1 pour l'afficher dans le form2 ?

    D'avance merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 46
    Points
    46
    Par défaut
    avec ta solution cela fonctionne super
    merci

    par contre du coup je n'ai meme pas besoin de ma variable bordereau_id ??

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2007
    Messages : 116
    Points : 46
    Points
    46
    Par défaut
    j'en profite pour une autre question toujours sur le même sujet

    je récupère bien mes données dans mon deuxième form nommé f_trouve_bordereau


    par contre dans la table T_BORDEREAU

    pour un même numéro d'échafaudage je peux avoir plusieurs numéros de factures

    exemple

    numero_bordereau / numero_facture
    1 / 1
    1 / 2
    1 / 3
    2 / 1
    3 / 2


    comment faire dans mon form2 (f_trouve_bordereau) pour que ça m'affiche toutes les factures en relation avec le numéro d'échafaudage saisi sur le premier form?

    D'avance merci

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Attention à ne rien oublier durant la recopie du code. Chaque caractère compte dans du code.

    Pour la variable tu peux factoriser ton code, et ne faire plus référence à ton contrôle (Me.Txt_bordereau) mais à ta variable .

    Comme dans cet exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim bordereau_id As String
    bordereau_id = Me.Txt_bordereau 
     
    ...bordereau ='" & bordereau_id & "' ;"
    Normalement avec le code que tu as ça devrait le faire. C'est juste une histoire de présentation.
    En intégrant un sous-form en mode liste qui affiche tes factures ça fonctionnera, sans invoquer de code supplémentaire.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

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

Discussions similaires

  1. Passer variables d'une JTable à une autre sur un Joptionpane
    Par laplumedoie dans le forum Débuter
    Réponses: 4
    Dernier message: 28/02/2014, 18h58
  2. Ouvrir formulaire via autre formulaire
    Par delg dans le forum IHM
    Réponses: 2
    Dernier message: 30/04/2012, 15h30
  3. Accéder champ sous-formulaire depuis autre formulaire
    Par CyberMen dans le forum VBA Access
    Réponses: 5
    Dernier message: 03/01/2010, 19h46
  4. Réponses: 5
    Dernier message: 20/12/2006, 07h39
  5. Réponses: 2
    Dernier message: 28/10/2004, 16h54

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