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 MsgBox sans Bouton pendant l'exécution d'une macro [XL-2007]


Sujet :

Macros et VBA Excel

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 51
    Points : 43
    Points
    43
    Par défaut Afficher un MsgBox sans Bouton pendant l'exécution d'une macro
    Bonsoir à tous,

    J'ai un UserForm1, avec 1 Bouton qui lance une macro qui s'exécute pendant une vingtaine de secondes.
    Pendant ce temps je voudrais un MsgBox sans bouton qui s'affiche, et qui me dit : "Patientez..." et ensuite qui se ferme automatiquement quand la macro est terminée.

    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut


    Bonjour,

    un MsgBox suspend l'exécution du programme, à oublier donc !

    Une possibilité via un UserForm non modal affichant un simple message (consulter l'aide de sa méthode Show) …
    Encore plus simple est d'afficher un message dans une cellule de la feuille active !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Marc-L Voir le message


    Bonjour,

    un MsgBox suspend l'exécution du programme, à oublier donc !


    Une possibilité via un UserForm non modal affichant un simple message (consulter l'aide de sa méthode Show) …
    Encore plus simple est d'afficher un message dans une cellule de la feuille active !
    Merci Marc
    J'ai utilisé un UserForm2 avec un Label "Patientez..."
    l'UserForm2 s'affiche bien pendant le temps d'exécution de la macro et se ferme automatiquement en fin d'exécution.
    - Problème : c'est que le Label n'affiche rien ou est invisible.

    Je vais continuer à chercher la solution mais vu l'heure, ce ne sera que demain...

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut





    Après UserForm2.Show insérer la fonction DoEvents dans le code …


    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonsoir,

    Quid de la barre de status?
    Si ça peut aider, je classe/transferts qutodiennement des dizaines de GO de data par un wbk + VBA, et j'ai qquchose du style (gauge de progrès dans la status bar)

    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
    33
    34
    35
    36
    37
    38
    39
    40
     
    If FilesCnt > 50 Then
     
            Msganswer = MsgBox(FilesCnt & " files to transfer from " & FSOLFoldC.Count & " directories" & vbCrLf & "It could be long" & vbCrLf & _
                "Please, check the excel status bar (Cancel to stop the transfer)", vbInformation + vbOKCancel, Subname)
            If Msganswer = vbCancel Then Exit Sub
     
        End If
     
        ' Status bar
                        If Format(FileTrsCnt / FileCnt, "0%") <> TrsfInd Then
                            TrsfInd = (FileTrsCnt / FileCnt) * 100
     
                            If TrsfInd >= TrsfIndOld + 1 Then
     
                                TrsfIndOld = TrsfInd
                                Call UpdateStatusBar(Funcname & " " & TrsfMode & " - Progress: " & FileTrsCnt & " of " & FileCnt & ": " & Format(TrsfInd / 100, "0%") & " " & String(Int(TrsfInd), "|"), True)
     
                            End If
     
                        End If
    (....)
    Sub UpdateStatusBar(StBarMsg As String, Optional KeepDispl As Boolean = False)
     
    Dim StBarOld As Boolean
    Dim StBar As Boolean
     
     
    StBarOld = Application.DisplayStatusBar
     
    Application.DisplayStatusBar = True
    Application.StatusBar = StBarMsg
    DoEvents
     
    If KeepDispl = False Then
        Application.StatusBar = False
        Application.DisplayStatusBar = StBarOld
    End If
     
    End Sub
    Bonne soirée
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  7. #7
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonsoir a tous

    Il y a beaucoup plus simple !

    Moi, pour ce genre de problème, j'utilise la barre d'état et on peut voir l'état d'avancement du traitement !

    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
    Sub Attente_Msg()
        'Sauvegarder la barre d'état en place
        Barre_Actuelle = Application.DisplayStatusBar
        Application.DisplayStatusBar = True
     
        'affichage de la barre avec le message
        Application.StatusBar = "Macro en cours d’exécution, veuillez patienter"
     
        'Traitement à faire
        For i = 1 To 100000
            'message de l'état d'avancement du traitement
            Application.StatusBar = "Macro en cours d’exécution, Traitement en cours " & i & "/100000"
        Next
     
        'message de fin
        Application.StatusBar = "Traitement fini, Merci de votre patience"
     
        '3 secondes d'attente
        Application.Wait Now + TimeValue("00:00:03")
     
        'restauration de l'état de départ
        Application.StatusBar = False
        Application.DisplayStatusBar = Barre_Actuelle
     
    End Sub
    Tester moi ça et dites moi ce que vous en pensez !!


    PS : Je vois que VincBilb a eu la même ideé que moi mais en plus évoluée
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Citation Envoyé par Igloobel Voir le message
    PS : Je vois que VincBilb a eu la même ideé que moi mais en plus évoluée
    .... hhhu évolué? J'en ai pas mal bavé pour faire une gauge 0-100% (pas trop difficile) mais qui ne ralentisse pas trop le traitement ....
    Bonne soirée
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  9. #9
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, et un de plus .... ici

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 51
    Points : 43
    Points
    43
    Par défaut
    Merci à Marc-L et à Igloobel

    Vos deux solutions DIFFERENTES fonctionnent très bien, j'ai une préférence pour la solution de Marc, car plus conviviale avec l'UserForm,
    L'affichage de Marc dans la barre d'état est très bien aussi..., j'ai remplacé la boucle i par la macro à exécuter.

    Merci et bonne journée

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

Discussions similaires

  1. [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
  2. [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
  3. [XL-2003] Masquer l'ouverture de fichiers pendant l'exécution d'une macro
    Par thibane dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/04/2009, 08h10
  4. Affichage d'un message d'attente pendant l'exécution d'une macro
    Par shadok6 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/10/2008, 14h49
  5. Intercepter un clic dans un userform pendant l'exécution d'une macro
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 05/04/2008, 14h40

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