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 :

Pouvoir constater la fin des processus dans le sous-formulaire


Sujet :

Access

  1. #1
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut Pouvoir constater la fin des processus dans le sous-formulaire
    Bonjour,

    J'utilise Access 2000.
    J'ai un formulaire A (Mode simple) qui contient le sous-formulaire B (continu)
    Sur l’évènement form_current de B, il y a un long processus qui se déclenche, pour alimenter des zones de textes situées dans le pied de B. Dans le pire des cas, plusieurs secondes sont nécessaires.
    Ces résultats, je les transfère dans des contrôles de A.
    Je voudrais attendre que B ait terminé son processus avant d’opérer mes transferts.
    Je n’ai pas trouvé de solution jusqu’ici pour saisir l’instant où les données de B deviennent disponibles.
    Pour pallier le problème, j’ai inscrit ce transfert dans l’évènement Form_Timer, associé à un intervalle de minuterie de 5 secondes pour avoir une marge de sécurité.
    Je cours maintenant le risque que l’utilisateur passe à l’enregistrement suivant (ou ferme le formulaire) avant que mes zones destinataires n’aient été alimentées.
    L’un de vous a-t-il une (bonne) piste à me suggérer ?
    Merci déjà.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Je déclare dans un module un booleen
    Global OK As Boolean

    au debut du traitement je mets OK=Faux et à la fin OK=Vrai
    et dans la partie de code en attente

    Do Until OK : DoEvents : Loop

  3. #3
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    D'abord merci.
    Au début de form_current de mon sous-formulaire (B) j'ai codé
    et le contraire à la fin.

    Dans le form_current de mon formulaire principal (A) j'ai codé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Do Until OK: DoEvents: Loop
    MsgBox "j'ai fini"
    A l'examen, je crois que le message arrive juste après le traitement du 1er enregistrement affiché pour B et en tout cas, bien avant que les totaux ne s'affichent au pied de B.
    C'est logique, à la fin du traitement de chaque enregistrement du B, "OK" change de valeur et la boucle s'arrête.
    Je vais essayer de provoquer une attente avant de rompre la boucle. Le temps que le traitement suivant ait eu le temps de recommencer un cycle et donc d'avoir repositionné "OK".

    Encore faut-il voir si ce processus va provisoirement empêcher l'accès au bouton "suivant" ou "sortir".

    Je reviens plus tard.

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    J'ai le sentiment que cela ne marche pas.
    Voici ce que j'ai codé
    dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    dans Form_current de A :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For j = 0 To 10 'le nombre maximun d'items de B dans un enregistrement de A
       Do Until OK: DoEvents: Loop
       Sleep 10 '
    Next j
    MsgBox "j'ai fini"
    Ce que je crois observer :
    le message apparaît immédiatement (sans doute après 10 x 10 Millisecondes + le traitement du 1er enregistrement de B)
    et le système attend le click sur le bouton "OK" du message pour continuer le processus sur les enregistrements suivants.
    C'était pourtant bien essayé, merci.

  5. #5
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 797
    Points : 14 863
    Points
    14 863
    Par défaut
    Bonsoir,
    As-tu essayé de mettre au début de ton processus
    Ceci désactive l'écho des commandes et empèche temporairement l'accès au formulaire des clics 'parasites' de l'utilisateur impatient. De plus la mise à jour est ultra rapide car il n'y a pas de rafraichissement à chaque mise à jour d'un élément du recordset (si tu l'utilises) mais une fois le processus terminé.
    Pour réactiver l'écho après ton processus.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    "avant que les totaux ne s'affichent au pied de B"

    c'est un évènement que l'on pourrait intercepter

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Citation Envoyé par tee_grandbois
    As-tu essayé de mettre au début de ton processus Docmd.Echo False
    Merci, je retiens la suggestion.
    Je vais tester :
    - Coder "False" dans form_current de mon formulaire principal et le repositionner à "True" quelques secondes après à l'aide du form_timer.
    - Lorsqu'une intervention de l'utisateur risque de modifier les totaux, provoquer form_current de mon formulaire principal.

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Citation Envoyé par random
    "avant que les totaux ne s'affichent au pied de B"

    c'est un évènement que l'on pourrait intercepter
    Merci mais comment ?
    J'ai essayé ceci sur AfterUpdate du contrôle qui réceptionne le total
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub F_AfterUpdate()
    MsgBox "total A  recevoir à jour"
    End Sub
     
    Private Sub F_Change()
    MsgBox "total A  recevoir à jour"
    End Sub
    Je ne reçois pas le message.
    C'est comme si "Sub F_AfterUpdate" ne se déclenchait pas lorsque la modif ne provient pas directement du clavier.

    source contrôle de F = ' =[C]-[E] ' : qui n'a donc pas formellement pas changé)
    J'ai aussi essayé sur E (' =RechDom("E";"TotauxEA" ')

    Mais sans doute, aviez-vous une autre idée pour déceler que le programme a terminé son calcul ?

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    avec change au lieu de update

  10. #10
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    J'avais déjà essayé : voyez mon post précédent.
    J'ai retenté sans obtenir le résultat escompté.
    Quelque chose doit sans doute m'échapper.
    Quoi qu'il en soit merci

  11. #11
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut Déterminer la fin d'un processus
    Bonjour aux lecteurs,

    J’ai 2 formulaires : A (mode simple) qui contient B (en mode continu).

    Une modification dans B déclenche des calculs parfois longs (5 sec dans les cas les plus complexes) dont le résultat apparaît dans une zone de texte « TotalDeB » située dans le pied de B.
    Je dois transférer TotalDeB dans une zone de texte de A.
    Ce transfert doit évidemment intervenir après que le processus de calcul s’est terminé.
    Pour capter cet instant, j’ai essayé de déclencher le transfert dans l’évènement TotalDeB _AfterUpdate. Sans succès : j’ai l’impression que TotalDeB _AfterUpdate ne se déclenche que si l’update provient du clavier. (idem avec _change).
    Quelqu’un aurait-il une piste ? J’ai constaté que le « bon moment » se concrétise à l’écran : dans la barre inférieure, la mention « traitement ... » redevient « Mode Formulaire ». Y-a-t-il moyen d’accéder à cette information ?

  12. #12
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Déclarer un booleen global (dans un module)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Global OK As Boolean
    sur formulaire A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     Rem Initialisation du drapeau
     OK = False
     
     DoCmd.OpenForm "FormulaireB",acNormal
     
     Rem Cette boucle va attendre la fermeture du formulaireB
     Do Until OK: DoEvents: Loop
    sur formulaire B
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Form_Close()
     OK = True
    End Sub

  13. #13
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Merci.

    J'ai placé le code "sur formulaire A" dans le form_current de A
    Cela a pour effet d'ouvrir une nouvelle "incarnation" du formulaire B (avec tous les records... donc traitement très long)
    NB ce formulaire est déja ouvert en tant que sous-formulaire de A.
    Dans votre code, je ne comprends pas comment la nouvelle incarnation de B va se refermer pour provoquer le OK à True.

Discussions similaires

  1. Mettre des couleur dans un sous-formulaire
    Par seaosiris dans le forum VBA Access
    Réponses: 4
    Dernier message: 26/07/2007, 08h41
  2. ajouter des enregistrement dans un sous-formulaire
    Par polianita dans le forum Access
    Réponses: 3
    Dernier message: 29/08/2006, 16h12
  3. Mettre à jour des champs dans un sous formulaire
    Par Patros dans le forum Access
    Réponses: 3
    Dernier message: 09/08/2006, 15h16
  4. afficher des données dans un sous formulaire
    Par issam16 dans le forum Access
    Réponses: 3
    Dernier message: 26/06/2006, 15h36
  5. comment eviter des doublons dans un sous formulaire ??
    Par azde7015 dans le forum Access
    Réponses: 2
    Dernier message: 21/02/2006, 09h03

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