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 :

Pb pour remplir un formulaire en VBA [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Par défaut Pb pour remplir un formulaire en VBA
    Bonjour

    Je cherche à affecter dynamiquement des valeurs à des zones de texte d'un formulaire, à partir d'un recordset. Les contrôles existent déjà (txtboxes dans la zone Détail, étiquettes dans la zone Header). J'ai écris ce code sur l'évènement "Form_Open" du formulaire :

    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
    Private Sub Form_Open(Cancel As Integer)
        Dim rst As Recordset
        Dim hdr, txt As String
        Set rst = CurrentDb.OpenRecordset("Req_Form_mensuel")
     
        For i = 1 To rst.Fields.Count
            hdr = "hdr_" & i
            txt = "txt_" & i
            Me.Controls(hdr).Caption = rst.Fields(i - 1).name
            Me.Controls(txt).ControlSource = "='" & rst.Fields(i - 1) & "'"
     
        Next i
     
     
    End Sub
    Apparemment l'affectation se passe bien, car mes headers contiennent la bonne info, les zones de texte aussi.
    Le problème c'est que bien que je soit en mode "formulaire continus", il n'y a qu'une seule ligne qui apparaît, or dans mon recordset il y en a plusieurs.
    Pourquoi les autres lignes n'apparaissent-elles pas ?

    Merci de votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Par défaut
    re-bonjour

    J'ai avancé dans ma solution : il faut paramétrer la source du formulaire, et les lignes d'enregistrements apparaissent :

    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
    Private Sub Form_Open(Cancel As Integer)
        Dim rst As Recordset
        Dim hdr, txt As String
        Set rst = CurrentDb.OpenRecordset("Req_Form_mensuel")
        Me.RecordSource = "Req_Form_mensuel"
        For i = 1 To rst.Fields.Count
            hdr = "hdr_" & i
            txt = "txt_" & i
            Me.Controls(hdr).Caption = rst.Fields(i - 1).name
            Me.Controls(txt).ControlSource = "='" & rst.Fields(i - 1) & "'"
     
        Next i
     
     
    End Sub
    par contre, j'ai la même valeur dans toutes les lignes !!!

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Avec le code que tu as écrit, le résultat que tu obtient et nornal. Pour chaque enregistement affiché tu assigne la valeur contenu dans le 1er enr.

    Ce que tu veux faire c'est que les entêtes de colonne et le nombre de colonne change dynamiquement et que les données suivent.

    Si c'est bien cela que tu veux faire je regarderai les formulaires de type croisé dynamique qui devrait faire cela sans une seule ligne de code.

    Reviens sur le forum si les formulaires croisée ne répondent pas à ton besoin.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Par défaut
    Salut

    Les formulaires croisés dynamiques ne sont pas très satisfaisant car il faut tout de même faire un drag and drop des champs de colonnes par l'utilisateur : moi je cherche à faire un formulaire tout fait en fonction des résultats de ma requête.

    Question : y a-t-il un moyen d'affecter dynamiquement les valeurs d'un recordset à un formulaire en mode "continu" ?

    Je sais que c'est possible comme par exemple dans ce code.
    Je n'arrive pas à comprendre pourquoi là çà marche et pas chez moi.

  5. #5
    Membre éclairé
    Homme Profil pro
    Manager de Projet SAP
    Inscrit en
    Mars 2009
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Pologne

    Informations professionnelles :
    Activité : Manager de Projet SAP
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2009
    Messages : 210
    Par défaut
    Bonjour.

    Pourquoi ne pas construire le formulaire en utilisant l'automatisme d'Access ? Dans la creation assistee, on choisi le nom de la requete ou se trouvent les donnees, puis on defini les champs de la requete qui doivent se trouver dans le formulaire et enfin le type d'apparence des enregistrement (table etc).

    Ca marche tres bien sans complication et sans code.

    Cdlt.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 77
    Par défaut
    Salut

    J'ai trouvé la solution, dont je n'étais vraiment pas loin, voici le code :
    C'était juste l'affectation des données aux contrôles qui pêchaient, il m'a juste fallu remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           Me.Controls(hdr).Caption = rst.Fields(i - 1).name
            Me.Controls(txt).ControlSource = "='" & rst.Fields(i - 1) & "'"
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Me.Controls(hdr).Caption = rst.Fields(i - 1).name
            Me.Controls(txt).ControlSource = rst.Fields(i - 1).name
    Et mon formulaire se remplit parfaitement!!
    Merci à jj4822 et à marot_r pour leur participation sur ce post.

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

Discussions similaires

  1. [Toutes versions] Lire un tableau via VBA pour remplir un formulaire
    Par kimai dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2012, 10h07
  2. Réponses: 1
    Dernier message: 11/10/2006, 14h24
  3. utilisation de popup pour remplir un formulaire php
    Par kro35 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/06/2006, 12h03
  4. enlever la croi pour fermer un formulaire en vba?
    Par xtaze dans le forum Access
    Réponses: 6
    Dernier message: 15/06/2005, 17h16
  5. Réponses: 6
    Dernier message: 24/01/2005, 14h12

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