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 :

Message informatif "permanent"


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut Message informatif "permanent"
    Bonjour à tous

    Je réalise un calcul qui dure entre 30 secondes et 3 minutes.
    Pour que l'utilisateur ne plante pas Excel pendant ce temps, je souhaite afficher un message qui reste tout le long de l'opération.

    Je ne souhaite pas afficher un msgbox avec un timer... ce qui serait bien trop gourmand en mémoire je pense... et ralentirait bcp le programme...

    Y aurait-il une méthode simple svp?

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Il te suffit d'un label disant " OPERATION EN COURS POUVANT DURER 3 MINUTES - PATIENTEZ S'IL VOUS PLAIT..." placé dans un container (Frame ou Userform) rendu visible au début de l'opération et invisible à la fin ...

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    Je viens d'essayer.

    J'ai crée un userform (wait), j'y ai mis le label, et lorsque je lance mon calcul, j'ai écris:

    wait.show

    Mais du coup, pour lancer le calcul, je dois cliquer sur la croix (fermer) de ce userform...

    Tu disais de faire ca? Si oui, cela ne convient pas, je souhaite qu'un message s'affiche et que le calcul se déroule

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Déjà :

    appeler un objet Wait n'est pas très astucieux ...

    Ensuite :

    c'est au début de ton calcul, que tu dois montrer l'autre userform (sans décharger le tien !). Ton calcul va se poursuivre...
    Et c'est à la fin de ton calcul, que doit figurer une instruction (Hide ou unload) déchargeant le userform qui affiche ton message d'attente !

    on récapitule :

    depuis userform1 :

    1) lancer le calcul
    2) montrer userform2 et le mettre en 1er plan (zorder)
    3) à la fin du calcul : userform2.hide ou (mieux) Unload UserForm2

  5. #5
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    1) Je lance userform1 pour sélectionner un mois de départ pour le calcul
    2) Quand OK alors je lance un module pour démarrer le calcul
    3) DANS ce module, avant de faire les calculs, j'ai mis:
    wait.show (vaut mieux mettre un nom simple et compréhensible... plutot qu'un userform1,2,3... non ?)
    4) Mais du coup, mon userform s'affiche... il y a bien le label, MAIS je dois cliquer sur FERMER pour continuer... ==> Le problème est bien là

    Pour le décharger pas de soucis, mais comment continuer mon calcul sans cliquer sur fermer wait... ?

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    1) trouve un autre nom que Wait (celà t'évitera un jour des plantages si tu utilises un jour une certaine fonction de l'Api de Windows ...) ...

    Chépamoa ... Attente, Patience, toto, bidule, ... mais évite Wait


    2) où et comment as-tu mis le code de déchargement de ton userform d'attente ?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,

    1/ 3 minutes de traitement cela me semble unpeu long !
    as tu optimisé ton code ?

    2/ si les calculs sont effectués sur une feuil, il faut que tu ouvres la userform en mode non modal (pour permettre le travail sur les feuilles si celles_ci sont activées ou selectionnées)
    voir la propriété ShowModal dans l aide

  8. #8
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 25
    Par défaut
    Effectivement, j'ai vu qu'il y avait un application.wait, donc j'ai changé, mais on ne peut pas le deviner si on ne le connait pas avant ^^

    Je m'en sors avec le SHOWMODAL en fait (recherche sur un de vos tutos...).

    Mon userform s'appelle "attente":

    Par contre... mon label ne s'affiche pas!
    Du coup, le seul texte lisible est celui du titre de la fenêtre...

    Je fais avec, mais si quelqu'un a la solution, je suis preneur

    PS: j'avoue que 2 minutes c'est long... mais mon code fait 865 lignes, le tout divisé en 3-4 fonctions, sachant que je n'ai pas de répétition, mon calcul se fait suivant beaucoup de paramètres différents

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Pour ma part, lorsque j'ai ce genre de besoin, je crée un form avec un label et un bouton (Stop) pour arrêter le traitement, si nécessaire.
    Dans l'événement Initialize ou Activate, je mets un appel à la routine de traitement.
    Dans la routine appelée, je mets à jour le label du form (ne pas oublier un Repaint du form pour rafraichir l'affichage).
    Le bouton Stop ne fait que changer la valeur d'une variable booléenne globale qui est testée dans le traitement principal.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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