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 :

Pause dans l'execution d'une fonction pour rendre la main à l'utilisateur [AC-2007]


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Pause dans l'execution d'une fonction pour rendre la main à l'utilisateur
    Bonjour à tous,

    Dans une fonction de mon projet, j'ouvre un fichier Excel et fait des traitements pour importer les données dans ma base.

    Un de ces traitements est de regarder une valeur dans une cellule d'une colonne d'excel (qui contient le nom d'une entreprise) et de regarder si elle existe déjà dans une table de ma base (celle qui contient les noms des entreprises).

    Si elle n'existe pas, mon objectif est de proposer à l'utilisateur d'utiliser un formulaire (déjà fait) pour créer une nouvelle entreprise. J'utilise un formulaire car en plus du nom, l'utilisateur doit donner d'autres infos (et je dois faire 2-3 trucs via du code au moment de la création).

    j'ai envisagé plusieurs solutions :
    - le plus simple serait de quitter la fonction qui fait les traitements, ouvrir le formulaire, et quand l'utilisateur a fini de créer l'entreprise, relancer la fonction (par un code lié au bouton de confirmation de création). Mais je préfèrerais éviter de quitter la fonction car la fonction d'importation est assez longue (l'utilisateur doit faire pas mal d'actions avant d'arriver à cette étape).

    - une autre serait de séparer la fonction qui fait tous les traitements en plusieurs fonctions qui s’exécutent successivement, mais ca m’embête aussi car les traitements sont dépendants entre eux (et sont contenus dans des boucles for et while...)

    - la meilleure solution (mais que je ne sais pas faire) serait de mettre en pause le code dans ma fonction, de permettre à l'utilisateur d'utiliser mon formulaire de création, et une fois qu'il a fini, de recommencer l’exécution du code précisément à l'endroit ou je l'ai arrêté. Pour mettre en pause, j'ai vu plusieurs solutions :
    - sleep : ca convient pas, l'utilisateur peut mettre plus ou moins de temps pour créer l'entreprise
    - solution bourrin : un booléen que l'on met à faux initialement + une boucle while qui teste si ce booleen est vrai (on met cette boucle à l'endroit ou le code doit être en pause). On ouvre le formulaire de création, et quand l'utilisateur a fini on passe le booléen à vrai. Mais je pense que ca va faire monter le cpu à 100% et faire laguer le pc, et c'est pas très joli.
    - la commande doevents ? j'ai pas bien compris ce qu'elle faisait dans l'aide MS et dans mes recherches. Il est écrit qu'elle rend la main à l'OS.


    Dans ce contexte, je voudrais savoir si il existe une fonction ou une technique qui permette de mettre en pause le code et de laisser l'utilisateur manipuler un formulaire, et de reprendre ensuite.

    Merci d'avance

    edit :j'avais oublié de préciser que je suis sous access 2007

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    As-tu essayé en ouvrant ton formulaire en mode fenêtre modale ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "NomFormulaire", , , , ,acDialog
    Le code est suspendu tant que le formulaire est ouvert.

    Sinon, a titre personnel je privilégie cette solution :
    - une autre serait de séparer la fonction qui fait tous les traitements en plusieurs fonctions qui s’exécutent successivement ...
    En parallèle, je stocke dans une table le numéro de la dernière étape exécutée avec succès.
    De cette manière, la fonction principale sait quelle(s) sous-fonction(s) appeler.

    A+

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Salut,

    merci pour la réponse.

    J'ai essayé de l'ouvrir en fenêtre modale, le problème est que parfois l'utilisateur ouvre un deuxieme formulaire à partir du premier et l'execution du code reprend.

    Finalement j'ai choisi la deuxième solution, j'ai séparé la fonction en sous morceaux. C'est un poil plus long à l’exécution mais c'est pas grave. Au moins ca marche comme je le veux

    merci !

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

Discussions similaires

  1. sizeof dans une fonction pour lire une chaine
    Par Haze. dans le forum Débuter
    Réponses: 11
    Dernier message: 06/11/2007, 12h07
  2. Réponses: 2
    Dernier message: 29/08/2007, 19h43
  3. Mettre une pause dans l'execution
    Par lessoy dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 17/04/2007, 13h14
  4. pause dans l'execution d'une boucle...
    Par MasterOfChakhaL dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/04/2006, 21h55
  5. Pause dans l'exécution d'une fonction
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/06/2005, 07h48

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