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 :

Alimenter sous formulaire VBA sans Recordsource


Sujet :

IHM

  1. #1
    Membre régulier Avatar de Jordmund
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 181
    Points : 118
    Points
    118
    Par défaut Alimenter sous formulaire VBA sans Recordsource
    Bonjour,

    Je dois alimenter un sous formulaire.

    Mon problème est qu'une partie des informations est stockée et que l'autre partie est calculée.

    Pour les informations stockés, j'alimente bien le formulaire avec le recordsource / requery. Ok ca marche.

    Mais j'ai un problème pour la partie des informations calculés : je ne peux pas les calculer via SQL (sum, etc).
    Je dois faire un calcul pour chaque enregistrement de mon formulaire.

    Je suis donc parti sur la création d'un recordset DAO avec procédure de calcul pour chaque enregistrement.

    Mais je n'arrive pas à accéder aux champs de mon sous-formulaire via le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    strsql = "SELECT champ1, champ2 from tbl_TEST;"
    Set rst = oDb.OpenRecordset(strsql, dbOpenSnapshot)
     
    Do Until rst.EOF
        Form_frm_FORMULAIRE_GENERAL.[frm_SOUS_FORMULAIRE].champ1= rst![champ1]
        rst.MoveNext
    Loop
    Je peux mettre à jour les informations du formulaire général mais pas du sous-formulaire. Erreur de syntaxe ?

    Merci d'avance de vos réponses.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    On ne comprend pas très bien ce que tu veux faire. Si tu alimentes ton sous-formulaire par une requête SQL, tu peux y ajouter le champ "calculé".

    Sinon tel que présenté par ton code, le plus simple je pense est d'utiliser la fonction de domaine DLookUp en source du champ Champ1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    = DLookUp("[champ1]";"[tbl_TEST]"; Critère)
    J'ai laissé expressément le champ critère non informé car dans ton code, je ne vois pas la liaison entre le champ1 de ton sous-formulaire et l'enregistrement correspondant de la table.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre régulier Avatar de Jordmund
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 181
    Points : 118
    Points
    118
    Par défaut
    Merci de ta réponse.

    Je vais essayer d'être plus clair car j'ai oublié de mentionner des éléments.

    Je veux afficher 3 champs dans mon sous-formulaire :
    - Champ 1 & Champ 2 qui me sont donnés par l'exécution de mon SELECT (ils sont stockés dans une table)
    - Champ 3 qui est une valeur calculée. Cette valeur est dépendante d'autre variables déclarées dans le formulaire général (listbox) et n'est pas stockée dans une table. Ce traitement est différent pour chaque ligne retournée par le SELECT, je dois donc exécuter une formule de calcul hors de ma chaine SQL.

    Pour l'affichage du résultat dans mon sous-formulaire:
    Avec la méthode Recordsource, je peux bien affecter les valeurs de Champ 1 & Champ 2 dans mon sous formulaire.
    Mais je ne sais pas comment ajouter le champ 3 dans le sous formulaire (car le resordsource ne prend que le SQL en entrée, je ne pense pas pouvoir y ajouter mon 3ième champ).
    D'où mes questions :
    - Est il possible d'ajouter un 3ième champ dans le recordsource, qui n'est pas dans ma requête.
    - Si ce n'est pas possible, comment puis je utiliser un recordset qui me permettra d'alimenter mon sous-formulaire ligne par ligne.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Il faudrait voir le mode de calcul du champ3 pour donner plus de pistes.
    Le résultat devrait être mis directement en source de ton champ3 dans le sous-formulaire.
    Ce traitement est différent pour chaque ligne retournée par le SELECT, je dois donc exécuter une formule de calcul hors de ma chaine SQL.
    Donc chaque valeur du champ3 va dépendre AUSSI des valeurs de champ1 et/ou champ2


    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Membre régulier Avatar de Jordmund
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 181
    Points : 118
    Points
    118
    Par défaut
    Bon je progresse, j'arrive presque à faire ce que je veux.
    Je crée un recordset rst qui va me servir à alimenter mon sous-formulaire.
    L'alimentation des champs 1, 2 et 3 se fait bien.
    Mais je n'ai que le dernier enregistrement de mon recordset qui est affiché car le formulaire ne change pas de ligne.
    J'ai tenté un Addnew mais ca ne fonctionne pas (erreur 91).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Do Until rst.EOF
        ' Traitement calcul champ 3 => OK
        ' Insertion des champs dans le sous-formulaire
        Forms![formulaire_general].Form![sous_formulaire]!champ1.Value = rst![champ1]
        Forms![formulaire_general].Form![sous_formulaire]!champ2.Value = rst![champ2]
        Forms![formulaire_general].Form![sous_formulaire]!champ3.Value = rst![champ3]
     
        Forms![formulaire_general].Form![sous_formulaire].Form.Recordset.Addnew
     
        rst.MoveNext
    Loop

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Je n'ai pas encore compris ce que tu veux faire !
    Si tu as un recordset avec un jeu d'enregistrement ou un SELECT, tu peux l'attribuer à la propriété Recordsource de ton sous-formulaire. Non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Forms![formulaire_general].[sous_formulaire]!Form.RecordSource = tonSQL
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  7. #7
    Membre régulier Avatar de Jordmund
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 181
    Points : 118
    Points
    118
    Par défaut
    Bonjour,

    J'ai trouvé la solution :
    Problème 1 : Je voulais afficher un champ calculé dans mon formulaire, et le RecordSource ne le permet pas (il permet juste l'exécution de SQL).
    J'ai contourné le problème en traitant le champ calculé dans une autre procédure : je stocke ce champ dans ma table tant pis mais ca me permet d'utiliser le RecordSource => Mon sous-formulaire affiche bien ce que je veux OK.

    Problème 2 : Rendre ce formulaire "intéractif" et permettre à l'utilisateur de modifier une valeur sélectionnée, ce qui va exécuter le code de mise à jour.
    Il m'était impossible de modifier la valeur sélectionnée (alors que ce fonctionnait sur des formulaires faits par le passé).
    Ma requête reposait sur 5 tables donc plus de 2, j'ai modifié le paramètre RecordSetType en MAJ Globale, et ca fonctionne.

  8. #8
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    EDIT : message inutile suite à résolution par l'initiateur lui-même.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

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

Discussions similaires

  1. [AC-2000] Actualisation sous formulaire VBA
    Par electronedf dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/01/2012, 10h36
  2. [AC-2007] Sous formulaire VBA
    Par nada83 dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/10/2010, 20h29
  3. Acceder donnees sous formulaire VBA
    Par obel38 dans le forum IHM
    Réponses: 0
    Dernier message: 22/07/2010, 16h47
  4. Imprimer un pdf sous access (vba) sans ouvrir acrobat reader
    Par benoit16 dans le forum VBA Access
    Réponses: 3
    Dernier message: 23/02/2010, 08h43
  5. Etat avec sous formulaire VBA
    Par superpye dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/06/2008, 00h27

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