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

Access Discussion :

Arborescence de Formulaire


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 154
    Points : 124
    Points
    124
    Par défaut Arborescence de Formulaire
    Bonjour,

    J'ai un problème de remontée de valeur avec une arborescence de formulaires.

    L'arborescence est la suivante, le formulaire principal (Form1) contient un sous-formulaire (Form2) qui lui même contient plusieurs sous formulaires (Form3a et Form3b).

    Graphiquement parlant ça donne:

    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
    34
     
    --------------------------------
    |Form1                         |
    |                              |
    | ---------------------------  |
    | | Form2                   |  |
    | |                         |  |
    | | ----------------------- |  |
    | | | Form3a              | |  |
    | | |                     | |  |
    | | |               aaaa  | |  |
    | | |               bbbb  | |  |
    | | |               cccc  | |  |
    | | |               ----- | |  |
    | | |               tot3a | |  |
    | | ----------------------- |  |
    | |                         |  |
    | | ----------------------- |  |
    | | | Form3b              | |  |
    | | |                     | |  |
    | | |               aaaa  | |  |
    | | |               bbbb  | |  |
    | | |               cccc  | |  |
    | | |               ----- | |  |
    | | |               tot3b | |  |
    | | ----------------------- |  |
    | |                         |  |
    | |      tot2 = tot3a+tot3b |  |
    | |                         |  |
    | ---------------------------  |
    |                              |
    |            tot1 = tot2       |
    |                              |
    --------------------------------
    Le problème que j'ai, c'est que quand je fais un requery sur les formulaires Form3a et Form3b en changeant des critères, le total (tot2) est bien mise à jours, mais le total (tot1) ne reflète pas la nouvelle valeur de tot2, pire il remplace l'ancienne valeur par zéro.
    Je n'ai trouver aucun événement dans Form2 pour pouvoir intervenir sur Form1 pour mettre à jour la valeur tot1.
    La seule solution que j'ai trouvé pour le moment, c'est de placer un bouton dans Form1 pour faire un requery sur tot1, évidemment, cette solution est inaceptable.
    Qui à une solution pour ne pas avoir d'intervention humaine, ni en utilisant des timeouts.

    Merci d'avance

  2. #2
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Slt,

    Utilise Parent pour remonter d'un formulaire.

    C-à-d dans le code du Form2 :
    c'est le Form1

  3. #3
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour,

    Quand tu fais un .Requery dans form 3a ou b, tu peux aussi agir sur form2 et form1. Donc de toute façon, le bouton ne s'impose pas.
    Par contre c'est tout de même bizarre que les modifs ne remontent pas , sans .Requery du tout.
    Quelles sont les formulaes dans les sources de tot3 a et b, tot2, tot1?

    Bon courage,

    pgz

  4. #4
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 154
    Points : 124
    Points
    124
    Par défaut
    Concernant la réponse de Arkham46:

    je sais utilisé parent pour remonter dans les formulaire, mais le problème c'est comment lancer le code qui utilise parent.


    Concernant la réponse de pgz:

    pour tot3a et b:
    =somme(UM)

    pour tot2:
    =subForm3a.Formulaire!txtTotal+subForm3b.Formulaire!txtTotal

    pour tot1:
    =subForm2.Formulaire!txtTotal

  5. #5
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Je suppose que txtTotal est le vrai nom de tot2.
    Sinon tes formules semblent bonnes et, à mon avis, dès qu'un contrôle 'UM' est changé, tous les totaux devraient être mis à jour, sans code.

    Finalement quand tu modifies une valeur UM, que se passe-t-il pour tot3, tot2, tot1?

    Ou il y a autre chose...

    pgz

  6. #6
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 154
    Points : 124
    Points
    124
    Par défaut reponse pour pgz
    Resalut,

    en effet txtTotal est le vrai nom de tot2.

    quand à UM c'est le nom d'une colonne calculée d'une requête SQL.

    quand je modifie les valeurs UM, tot3 fais bien la somme correctement, tot2 reflète bien la nouvelle valeur de tot3, quand à tot1 il affiche 0.

    Mon impression, c'est que le mécanisme interne de MS Access n'est pas capable de remonter les changements plus qu'un niveau de formulaire. Si c'est vrai comment corrigé ce "bug".

    Comme solution, on devrait pourvoir capter un événement qui nous indique quand un sous formulaire a été modifié par le programme et non pas par saisie d'un opérateur, mais j'ai pas trouvé.

    CAMIC

  7. #7
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    J'ai fait l'essai et surprise : j'ai eu le même résultat que toi. J'ai appris quelque chose...
    Tel que tu as présenté le pb, il y a une solution, que je te propose aussitôt:
    1) tu laisses Tot2 comme il est
    2) tu modifies la source de tot 1 comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =subForm2.Formulaire!subForm3a.Formulaire!txtTotal + subForm2.Formulaire!subForm3b.Formulaire!txtTotal
    Chez moi ça marche.

    Bon courage,

    pgz

  8. #8
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 154
    Points : 124
    Points
    124
    Par défaut
    Resalut,

    j'ai été aussi tenté de faire comme toi, mais tu ma pris de vitesse, mais ta solution n'est valable que si on ne change pas les formulaires dans les formulaires, car pour simplifier, je ne t'ai pas dit que:
    1) j'ai un Form0 qui contient deux Form1 pour calculer la différence des totaux.
    2) Que Form2 contient pour le moment 4 Form3 mais va rapidement croître.
    3) Que suivant le choix, je change dynamiquement aussi bien les formulaires qui sont contenus dans Form0, Form1, Form2 ...

    Ta solution confirme mes dires, c'est que le mécanisme interne de MS Access ne permet pas de remonté les changement récursivement, mais seulement à un seul endroit grâce à ton code.

    Pour l'instant, s'il n'y a pas d'autres solution plus simple, il va faloir que je fasse du code VBA qui change dynamiquement la source de donnée pour les champs totaux dans tous les niveaux supérieurs, beaucoup de temp perdu pour une fonctionnalité manquante (peut-être dans une nouvelle version !).

    A bientôt

    CAMIC

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Je n'ai pas bien compris mais si ce sont les totaux qui ne se mettent pas à jour, il faut appeler recalc du formulaire parent

  10. #10
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2006
    Messages : 154
    Points : 124
    Points
    124
    Par défaut
    Cher Tofalu,

    Si je place un bouton dans Form2 pour faire un Form2.recalc, le total affiche toujours zéro, la seule possibilité que j'ai trouvé, est de faire non pas comme on pourrait le penser faire un recalc sur tot2, mais un requery sur tot2 !!??

    Pour résoudre mon problème facilement, comment savoir que form3a ou b a un total différent pour lancer un requery sur tot2, puis par le même mécanisme faire un requery sur tot1 suite au changement de tot2 ?.

    CAMIC

Discussions similaires

  1. [AC-2007] Formulaire arborescence (nomenclature)
    Par cfiji dans le forum IHM
    Réponses: 6
    Dernier message: 24/04/2013, 16h43
  2. Image d'un formulaire arborescent
    Par alatox dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 03/06/2010, 17h50
  3. formulaire avec arborescence windows
    Par Gary_Stoupy dans le forum IHM
    Réponses: 4
    Dernier message: 13/02/2007, 08h31
  4. [CR][Access] intégrer un viewer dans un formulaire access
    Par nicolak dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 13/01/2003, 15h52
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 08h09

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