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 :

Erreur 2427 - attendre l'actualisation d'un sous-formulaire père/fils pour y récupérer une valeur


Sujet :

IHM

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut Erreur 2427 - attendre l'actualisation d'un sous-formulaire père/fils pour y récupérer une valeur
    Bonjour !

    Voici un contexte simplifié qui décrit mon problème :
    - Formulaire principal : 1 champ "Article"
    - Sous-formulaire : 1 champ "Total"
    => Fonctionnement : lorsque je saisis une valeur dans le champ "Article", le sous-formulaire apparaît avec le champ "Total" à jour grâce à la relation père/fils.


    Mon problème : Je souhaite maintenant insérer dans la procédure After_Update du champ "Article" le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub Article_AfterUpdate()
        MsgBox Nz(Me.Ss_Form.Form.Total.Value, 0)
    End Sub
    J'obtiens l'erreur '2427' : 'Expression sans paramètre' car le contrôle n'a pas eu le temps de se mettre à jour.
    Pour y remédier, à l'heure actuelle, j'ai placé un timer d'une 1/2 seconde qui laisse le temps au sous-formulaire de s'actualiser pour être sûr d'obtenir une valeur.

    Auriez-vous une idée pour résoudre ce problème plus "proprement" (en captant le moment où le sous-formulaire est prêt) ?

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

    Regardes du coté de l'instruction DoEvents, cela résout pas mal de conflits de cet ordre.

    Le forum est plein de solutions avec cette instruction.

    Philippe

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par Philippe JOCHMANS Voir le message
    Regardes du coté de l'instruction DoEvents...
    Bonjour,
    justement la seule solution que j'ai trouvée c'est de poser un Timer avec DoEvents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim t1 As Long          'je colle une tempo d'1/2 sec
            t1 = Timer              'pour être sûr de récupérer une valeur
            While Timer - t1 < 0.5  'dans le champ "Total"
                DoEvents            'c'est moche mais je n'ai pas 
            Wend                    'trouvé de parade pour le moment
    Mais ce n'est franchement pas l'idéal... j'aimerais capter l'événement d'actualisation du champ "Total" pour sortirde la boucle d'attente au plus tôt...

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 917
    Points : 4 818
    Points
    4 818
    Par défaut
    Bonjour,
    pour ne pas avoir ce probleme de synchro, je te conseille de faire, dans Article_AfterUpdate , la somme via une requete, via une fonction de domaine par exemple DSum(...)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Citation Envoyé par micniv Voir le message
    Bonjour,
    pour ne pas avoir ce probleme de synchro, je te conseille de faire, dans Article_AfterUpdate , la somme via une requete, via une fonction de domaine par exemple DSum(...)
    Bonjour, dans mon cas réel, je peux effectivement ouvrir un Recordset pour lancer une requête et récupérer la valeur, mais je préfèrerais éviter de le faire alors que ma donnée va apparaître dans le champ "Total".

    D'ailleurs, si on se place dans le cas d'un champ indépendant contenant une valeur volatile ça ne fonctionne pas...

  6. #6
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 917
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 917
    Points : 4 818
    Points
    4 818
    Par défaut
    Oui, tu peux actualiser le champ indépendant Total1
    Dans le module du formulaire, tu fais une procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private sub CalculeTotalLignes()
    if me.form.recordsetclone.recordcount > 0 then
    Me.Total1= dsum("MontantLigne","table_des_lignes", " filtrage adequat")
    else
    Me.Total1= 0
    end if
    End sub
    et tu appelles ce sub dans l'actualisation du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub form_current()
     
        call CalculeTotalLignes
     
    end sub
    Ainsi, chaque fois que tu ouvriras le formulaire ou l'actualiseras (Me.refresh)
    le montant se mettra à jour

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    @ micniv : Merci pour ta réponse mais je précise bien dans le 1er post que je présente un cas simplifié pour que ma demande soit plus facilement compréhensible par les membres du forum.

    En réalité :
    - je consulte les valeurs de plusieurs champs se trouvant dans différents sous-formulaires (d'où le fait que je n'aie pas envie d'ouvrir un recordset pour chaque valeur à récupérer)
    - les valeurs me servent de paramètres pour lancer une fonction publique contenue dans l'un des modules de l'application


    Donc en ce qui concerne les sommes de lignes, merci de ton aide mais ce n'est pas le sujet...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 175
    Points : 129
    Points
    129
    Par défaut
    Ne trouvant pas de solution sur le forum, je me suis dit que je pouvais gérer l'erreur 2427 via le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        If Err.Number = 2427 Then
            DoEvents
            Resume
        End If
    On laisse ainsi l'erreur tourner jusqu'à ce que le sous-formulaire soit actualisé avec une valeur dans le champ "Total".

    Mais dans le cas où il n'y a pas de valeur correspondant à l'article (champ père) dans la source de données du sous-formulaire, alors on se retrouve dans une boucle infinie...

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/01/2010, 16h27
  2. Réponses: 9
    Dernier message: 31/03/2009, 12h06
  3. Actualisation d'un sous-formulaire
    Par Legarraudien dans le forum IHM
    Réponses: 3
    Dernier message: 10/01/2008, 17h50
  4. Pb d'actualisation d'un Sous Formulaire
    Par edonis dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/10/2007, 15h15
  5. Réponses: 3
    Dernier message: 23/04/2007, 11h13

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