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 :

[E-00] Afficher quelque chose pendant l'exécution de la macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut [E-00] Afficher quelque chose pendant l'exécution de la macro
    Bonjour,
    Je souhaiterai affichier une image( genre sablier qui tourne^^) ou juste un texte pendant que ma macro s'execute pour faire comprendre a l'utilisateur que ca travail et que ca n'a pas planter
    en parcourant le forum, j'ai trouve des truc sur les progress bar, mais je n'ai pas tout compris a comment l'utiliser.

    merci

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Tu peux aussi utiliser la barre d'état. Voir par exemple comment faire une barre de progression dans une bare d'état.
    Bon courage,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    y aura-it quelque chose de plus visible :p
    car , je ne pense pas que tout le monde voie ce qui se passe en bas de l'écran
    (c'est pour éviter que les "boulet" quite la macro et les "boulet" ne regarde pas en bas a gauche )

    sinon c'est pas grave je laisserai ca

    merci

  4. #4
    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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Pour ma part, j'affiche une UserForm qui, elle-même, lance le traitement long.

    Dans ce traitement, je peux modifier le Caption d'un Label (de l'USF) pour indiquer l'état d'avancement.
    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!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    c'est ce que j'avais fais au début, mais comme la macro active a chaque fois plein d'autre classeur ou feuille le useform passe dérière apres l'appui sur le bouton pour lancer la dite macro

  6. #6
    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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Voilà pourquoi il ne faut pas activer les classeurs...
    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!

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 73
    Points : 52
    Points
    52
    Par défaut
    ahh ouaip c'est mieux =)

  8. #8
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Bonsoir,

    moi j'ai fais ce genre de manipulation :
    j'affiche un userform avec juste un message (pas de bouton, juste une étiquette). Le userform lorsqu'il est activé lance une procédure.

    Mon problème est que seul le cadre du userform apparaît, du coup le message pour conforter les utilisateurs du bon déroulement de la procédure n'est pas visible...
    Sigue soñando

  9. #9
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    As-tu essayé en mettant la propriété ShowModal de ton UserForm sur False ?
    .
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  10. #10
    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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    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!

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Je crois pas que la propriété Showmodal ne puisse être modifiée sur E-00: c'est interdit sur E-03.

    Ceci dit, je ne connaissais pas Repaint, mais apparemment ça me fait le même résultat que DoEvents.

    Sachant que perso j'ai déjà eu des bugs avec DoEvents: est-ce mieux d'utiliser Repaint à la place?

  12. #12
    Membre habitué Avatar de ancel17
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Mars 2007
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Mars 2007
    Messages : 312
    Points : 178
    Points
    178
    Par défaut
    Bonjour !

    @decondelite & fring : je suis sur E03, et je peux modifier la propriété ShowModal...
    Ceci dit, cela ne résoud pas le problème !

    @AlainTech : USF.Repaint fonctionne à merveille !

    Merci à tous !!!
    Sigue soñando

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Ah oui tiens j'avais mal lu l'aide: c'est que pour Office 97 que c'est interdit.
    Au temps pour moi: moi qui croyais que c'était interdit sur E-03 me voilà servi.

  14. #14
    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 : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par decondelite Voir le message
    Ceci dit, je ne connaissais pas Repaint, mais apparemment ça me fait le même résultat que DoEvents.
    Les deux sont complémentaire.
    Repaint redessine le Form après modification d'une Caption et DoEvents donne la main au système pour pouvoir (entre autres) raffraîchir l'affichage.

    Citation Envoyé par decondelite Voir le message
    Sachant que perso j'ai déjà eu des bugs avec DoEvents
    Je serais bien curieux de savoir quel genre de bugs...
    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!

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    J'ai déjà fait un truc comme ça. Ça marche c'est l'essentiel !
    J'ai créé une toute petite Userform appelée Form_Info dans mon exemple et dans laquelle je pose un label (Message du style Veuillez patienter SVP...).
    En voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    'Déclarations permettant l'inhibition de la case à cocher "Fermer" de la boîte de dialogue jusqu'à Userform_Initialize()
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    'Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    'ou ça c'est pareil :
    Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Const SC_CLOSE = &HF060&
    Private Const MF_BYCOMMAND = &H0&
     
    Private Sub UserForm_Initialize()
    'Proc d'inhibition de la case à cocher de fermeture
    'de la boîte de dialogue 
    On Error GoTo ErrorHandler
    Dim hSysMenu As Long
    Dim MeHwnd As Long
        MeHwnd = FindWindowA(vbNullString, Me.Caption)
        If MeHwnd > 0 Then
            hSysMenu = GetSystemMenu(MeHwnd, False)
            RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND
        Else
            MsgBox "Handle de " & Me.Caption & "introuvable", vbCritical
        End If
    Exit Sub
     
    ErrorHandler:
    Dim Msg
    If Err.Number <> 0 Then
        Msg = "L'erreur # " & Str(Err.Number) & " a été générée par " _
             & Err.Source & Chr(13) & Err.Description
        MsgBox Msg, , "Erreur : Veuillez prévenir le responsable SVP !" Err.HelpFile, Err.HelpContext
    End If
    End Sub
    Ensuite, dans un module, la Sub suivante dont voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Affiche_Info()
    Dim PauseTime, Start
        PauseTime = 1    ' Définit la durée en seconde(s)
        Start = Timer    ' Définit l'heure de début.
     
        Do While Timer < Start + PauseTime
            Form_Info.Show vbModeless
            DoEvents    ' Donne le contrôle à d'autres processus.
        Loop
     
    Form_Info.Hide
    Unload Form_Info
    End Sub
    Et enfin, dans la Private Sub d'un bouton de commande, par exemple, je fais appel à Affiche_Info() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Private Sub Bt_Lance_Macro_Click()
    On Error GoTo ErrorHandler
     
    Application.ScreenUpdating = False
    Affiche_Info 'Affiche la boîte "Veuillez patienter..."
    Shell "m:\requetes\batch\toto.bat", 1 ' Lance un batch quelconque
    Application.ScreenUpdating = True
    Exit Sub
     
    ErrorHandler:
    If Application.ScreenUpdating = False Then
        Application.ScreenUpdating = True
    End If
    Dim Msg
    If Err.Number <> 0 Then
        Msg = "L'erreur # " & Str(Err.Number) & " a été générée par " _
             & Err.Source & Chr(13) & Err.Description
        MsgBox Msg, , "Erreur : Veuillez prévenir le 25013 SVP !", Err.HelpFile, Err.HelpContext
    End If
    End Sub
    Voilà ! A regarder comme ça, la macro Affiche_Info(), c'est n'importe quoi, je n'ai pas dû en finir le code, mais ça fonctionne très bien, donc je me suis arrêté là ! Faut pas être plus royaliste...

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    752
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 752
    Points : 832
    Points
    832
    Par défaut
    Citation Envoyé par AlainTech Voir le message
    Les deux sont complémentaire.
    Repaint redessine le Form après modification d'une Caption et DoEvents donne la main au système pour pouvoir (entre autres) raffraîchir l'affichage.


    Je serais bien curieux de savoir quel genre de bugs...
    Pour Repaint et DoEvents, ça me fait la même chose: ça me permet d'éviter d'avoir des bouts de formulaire ou le formulaire complet en blanc, et ce utilisés tout seuls.

    Après, le seul formulaire dans le genre que j'ai fait ne contient que des labels: peut-être qu'il y a une différence notable pour les autres contrôles, mais bon je n'ai pas le temps de l'expérimenter pour l'instant.

    Pour le bug, je viens de m'apercevoir que j'ai le même avec Repaint... faut croire que ça ne vient pas de DoEvents... ou alors ça serait les 2 qui provoquent la même chose mais ça faudrait vraiment pas de bol pour que ce soit le cas. Je vais essayer de le résoudre dans mon coin...

Discussions similaires

  1. [MySQL] Afficher quelque chose pendant un laps de temp
    Par black-hat dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/05/2012, 21h38
  2. 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
  3. Réponses: 1
    Dernier message: 17/06/2006, 08h20
  4. Afficher quelque chose grâce à onMouseOver
    Par Michaël dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 30/12/2005, 09h21
  5. Cacher/afficher quelque chose
    Par pirouette_07 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/09/2005, 11h12

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