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

Macros et VBA Excel Discussion :

Boucle en background avec vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Par défaut Boucle en background avec vba
    Bonjour a tous,

    J'ai une form qui est alimenté par une base de donnee sql. J'aimerais en vba faire un sorte que la form soit toujours mise a jour. Par contre comme l'update prend une minute il faudrait toujours garder la main sur excel.
    Y a-t-il un moyen de faire du multitache ? ou au moins que excel ne soit pas bloque quand je travail ?
    Merci

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Multitâche, certainement pas.
    Mais, insère dans ta boucle F1
    Arrête momentanément l'exécution afin que le système d'exploitation puisse traiter d'autres événements.

  3. #3
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Ce lient pourra peut etre t'aider
    http://access.developpez.com/sources...acc#creaThread

  4. #4
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Par défaut
    Merci pour le lien , cependant il ne traite que du cas vb.net (je fais du vba ).
    Par contre pour le DoEvent je ne comprend pas le principe , si je met un DoEvent juste apres la connection a la base de donnée, est ce que le traitement des donnée telechargé ce fera en background ou bien est est ce que c'est le systemem qui prend juste une "pause" pour faire une sorte de f9 ?

  5. #5
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Ou as tu vu VB.NET
    Création d'un thread dans access
    Versions : 2000 et supérieures

  6. #6
    Membre averti
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Par défaut
    Ok autant pour moi , par contre c'est pour une base access , la mienne est en sql , j'ai essaye un CreateThread avec vba mais c'est inconnue

  7. #7
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Le vba est le même dans Access et Excel.
    L'endroit ou se trouve tes données n'a pas d'importance.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut Pseudo-multitâche avec Application.OnTime dans Excel VBA
    Citation Envoyé par racoon971 Voir le message
    Y a t'il un moyen de faire du multitâche ? Ou au moins qu'Excel ne soit pas bloqué
    En tâche de fond, Excel peut animer périodiquement une barre de progression dans la barre de status en parallèle de l'exécution de votre macro.

    C'est un pseudo-multitâche correspondant exactement au titre "Boucle en background avec VBA". L'itération de la boucle en arrière-fond efface une des barres de l'animation et affiche le pourcentage d'avancement.

    A vous de voir si on peut adapter ce principe pour mettre à jour périodiquement des données depuis une base SQL en arrière-fond. L'éventuelle difficulté sera la mise à jour de l'interface (GUI : Graphic User Interface) présenté à l'utilisateur s'il s'agit d'accéder à une User Form existante ou non ? Non modale ? Créée par qui ? Persistante ou volatile ?

    Dans l'application de la barre de progression, on a simplifié le problème en choisissant une ressource GUI cible persistante, déjà créée par Excel, accessible globalement par toute macro : c'est la barre de status.

    Pour démarrer la boucle en arrière-fond, le principe est l'appel d'Application.OnTime :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Application.OnTime pBar_timerWakeup, pBar_strSub, , True
    Excel affiche dans la barre de status l'animation : ( 80%) ||||||||

    On peut même lancer cette animation depuis la fenêtre d'Exécution immédiate (Ctrl+G) du VBE via ProgressBarStart(). On peut ensuite exécuter d'autres procédures ou fonctions en parallèle. Typiquement on peut arrêter l'animation ou changer ses paramètres, c-a-d gérer l'animation à distance depuis une autre macro qui s'exécute en parallèle mais avec prise en compte en temps différé, sinon ce serait un vrai multitâche si l'effet était en temps réel.

    Citation Envoyé par racoon971 Voir le message
    exemple simple en vba utilisant un thread stp ?
    Cette barre de progression en VBA est beaucoup plus simple à mettre en œuvre qu'un multitâche avec l'API Win32. On n'utilise que du VBA natif compatible toute version depuis au moins Excel97 sans DLL externe. Grâce à un appel par nom de la procédure qui assure la boucle en arrière-fond, Application.OnTime évalue dynamiquement la procédure à appeler dont le nom se trouve dans la constante String pBar_strSub :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Const pBar_strSub = "ProgressBarUpdate"
    L'exécution est différée à la fin du délai pBar_timerWakeup.
    A ce moment là, ProgressBarUpdate() réarme ou pas le timer pour une itération de plus, c-a-d une animation du pourcentage d'avancement de la barre de progression.
    ___________

    Si la discussion est résolue, vous pouvez cliquer sur le bouton

    En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.

  9. #9
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    D'accord as tu un exemple simple en vba utilisant un thread stp ?
    Non, malheureusement je n'ai pas d'exemple (je n'utilise pas les threads en VBA)

    J'ai été étonné d'ailleur que VBA puisse le faire

Discussions similaires

  1. [AC-2003] Faire une boucle avec VBA
    Par Sympa66 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/06/2010, 13h08
  2. Réponses: 1
    Dernier message: 16/03/2007, 14h26
  3. afficher la barre de menus complète avec vba
    Par jejestyle dans le forum Access
    Réponses: 7
    Dernier message: 07/09/2006, 18h07
  4. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

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