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 :

Afficher un message pendant l'exécution d'une procédure


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut Afficher un message pendant l'exécution d'une procédure
    Bonjour à tous,

    Dans un classeur Excel, j'ai deux tableaux provenant de connexions externes.
    Je ne souhaite pas que ces dernières soient mises à jours à l'ouverture du classeur mais plutôt sur demande de l'utilisateur.
    J'ai donc créé une procédure permettant de faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub updateData()
      shNouveauxDCL.ListObjects(1).QueryTable.Refresh BackgroundQuery:=False
      shRealisationsASS.ListObjects(1).QueryTable.Refresh BackgroundQuery:=False
     
      shMaj.Range("updateDate").Value = "Date des données : " & getUpdateDate()
    End Sub
    Jusqu'ici pas de soucis, le code fonctionne.
    Toutefois, les deux lignes .QueryTable.Refresh peuvent prendre un peu de temps et je souhaiterai afficher un message pendant l'exécution du code.

    J'ai testé 2 solutions :
    1. Via un shape que j'affiche temporairement :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      Sub updateData()
        shMaj.Shapes("loader").Visible = msoTrue
          ' CODE
        shMaj.Shapes("loader").Visible = msoFalse
      End Sub
    2. Via un onglet que j'affiche temporairement :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      Sub updateData()
        shLoader.Select
          ' CODE
        shMaj.Select
      End Sub

    Ces 2 solutions fonctionnent en pas-à-pas mais pas en exécution globale.

    J'ai une 3iem idée en tête consistant à utiliser un userForm (pas encore tester mais ça devrait fonctionner) mais je ne veux pas charger le projet VB inutilement.

    Avez-vous des idées pour m'aiguiller vers une solution ?
    Merci d'avance pour vos retours,

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Bonjour,
    Et en ajoutant un Doevents?

  3. #3
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Et en ajoutant un Doevents?
    Bonjour Thumb down,

    Ça fonctionne en lançant le code depuis le VBE mais pas depuis le bouton dans ma feuille.
    Merci ça fonctionne mais j'ai dû mettre 2 fois la ligne Doevents.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub updateData()
      shMaj.Shapes("loader").Visible = msoTrue
        DoEvents
        DoEvents
        shNouveauxDCL.ListObjects(1).QueryTable.Refresh BackgroundQuery:=False
        shRealisationsASS.ListObjects(1).QueryTable.Refresh BackgroundQuery:=False
     
        shMaj.Range("updateDate").Value = "Date des données : " & getUpdateDate()
      shMaj.Shapes("loader").Visible = msoFalse
    End Sub
    Je passe en résolu mais si l'un de vous sais me dire pourquoi ça fonctionne seulement en doublant la ligne Doevents ?

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

Discussions similaires

  1. [XL-2007] Message restant affiché pendant l'exécution d'une macro
    Par Menhir dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/11/2015, 18h15
  2. [XL-2010] Afficher un message et une image d'attente pendant l'exécution d'une Macro
    Par jérémyp8 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 05/07/2013, 22h38
  3. [XL-MAC 2004] Afficher un message durant l'exécution d'une macro
    Par patyom dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/02/2010, 15h40
  4. [XL-2003] Afficher un message d'attente pendant l'exécution d'une macro
    Par demongin dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/06/2009, 20h54
  5. Afficher un waitbar pendant l'exécution d'une boucle while
    Par LMU2S dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 18/03/2008, 19h22

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