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 :

barr de progression évolution d'une macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Par défaut barr de progression évolution d'une macro
    bonjours tout le monde,


    alors j'ai une macro qui est relativement longue


    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
    Sub actualisation()
    T = Timer
    Call concat
    Call Balayage
    Call direction
    Call heure
    Call suppressionbis
    Call compteur
    Call transfert_feuille
    Call dedoubcol
    Call CompteSiDoublonsBis
    Call gestion_doublons
    Call gestion_doublons2
    Call poid
    Sheets("TABLEAU DE BORD").Select
    Call total
    Call totalbis
    Call totalter
    Call export
    msgbox "Terminé en " & Timer - T & " secondes."
    End Sub
    ce que j'aimerai c'est de mettre une une barre de progression qui suit l'evolution de la macro

    donc alors j'ai crée un userform et j'ai mis une barre de progression déjà installé dans windows

    le code du userform est le suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_activate()
    For i = 1 To 100000
    ProgressBar1 = i / 1000
    Next
    End Sub
    et lorsque je veux visualiser l'evolution de la macro

    je rajoute les instruction


    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
    Sub actualisation()
    T = Timer
    userform1.show
    Call concat
    Call Balayage
    Call direction
    Call heure
    Call suppressionbis
    Call compteur
    Call transfert_feuille
    Call dedoubcol
    Call CompteSiDoublonsBis
    Call gestion_doublons
    Call gestion_doublons2
    Call poid
    Sheets("TABLEAU DE BORD").Select
    Call total
    Call totalbis
    Call totalter
    Call export
    userform1.hide
    msgbox "Terminé en " & Timer - T & " secondes."
    End Sub

    mais la barre d'avancement progresse avant l'exection de la macro

    voilà merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Par défaut
    Bonjour,

    ce que tu peux faire, c'est afficher un Userform non-modal pendant l'execution de ta macro

    Pour ca tu ecris dans "ThisWorkBook"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Workbook_Open()
     
    Load WaitBox 'on charge le formulaire en mémoire
     
    End Sub
    Ensuite tu créer un Userform que tu appelle Waitbox avec un label "zt_progression" par exemple

    Puis dans ton module
    Sub actualisation()
    tu marque :

    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
     
     
    Application.Cursor = xlWait   'affiche le sablier
    WaitBox.Show vbModeless   'affiche la waitbox mais continu le traitement
    WaitBox.Repaint
     
    'tu insère ici ton traitement à effectuer (donc tout tes call programme)
     
    WaitBox.zt_progression.Caption = "Traitement effectuer à " & Int(i / 1000
    ) & " %" 'tu place cette étape là ou tu veux que la Waitbox s'actualise avec le bon pourcentage...
    WaitBox.Repaint
     
     
    WaitBox.Hide  'masque la waitbox quand tu as fini l'execution de ta macro
    Application.Cursor = xlDefault 'remet le curseur par défaut
    N'oublie pas de décharger la Waitbox en fermant le classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub WorkBook_BeforeClose(Cancel As Boolean)  'dans module thisWorkbook
     
    Unload WaitBox  'decharge la waitbox de la mémoire
     
    End Sub
    Si je n'ai pas été assez clair n'hésite pas à demander plus de précision

    Cdlt

    DoDo

  3. #3
    Expert confirmé
    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
    Par défaut
    Salut,pourquoi pas qqch de plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.StatusBar = .........

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Par défaut
    Bonjour kiki,
    personnelement je trouve cette barre particulièrement "pas belle et très discrète"

    Pour un utilisateur qui ne prend pas l'habitude de regarder en bas a gauche de son ordinateur, elle ne verra pas l'état d'avancement de la macro, c'est pour ça que je préfère l'utilisation d'un Userform...

    Après c'est chacun sa préférence...

  5. #5
    Expert confirmé
    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
    Par défaut
    Re,sur le site de J Walkenbach il y a, il me semble,un exemple de ProgressBar insérée dans la StatusBar
    Sinon l'avantage c'est que cela aurait déjà été règlé depuis longtemps

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Par défaut
    salut , alors merci pour les réponses mais malheureusement elles ne marches pas , je trouve que le formulaire est plus agréable

    comme c'est une enorme macro qui dure environs 2 minutes , je veux juste trouver un moyen pour empecher l'utilisateur de faire un ctrl+alt+sup

    voilà merci d'avance

  7. #7
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Par défaut
    Bonjour l'huitre

    Pour bloquer clavier et souris,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long
     
    Private Sub tout bloquer()
      DoEvents
      BlockInput True
    End Sub
    mais attention avec ce code, car une fois lancer, tu peux vraiment plus rien contrôler ... donc si tu l'utilise essaye de voir si tu pêux utilisé un timer pour le débloquer ^^
    ou le débloquer a la fin de l'utilisation



    Pour ton problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    WaitBox.zt_progression.Caption = "Traitement effectuer à " & Int(i / 1000
    ) & " %" 'tu place cette étape là ou tu veux que la Waitbox s'actualise avec le bon pourcentage...
    WaitBox.Repaint
    tu peux le placer à plusieur endroit, et adapter le calcul d'avancement en fonction du resultat obtenu

    Pour un exemple simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    For i = 1 to 10 000
    cells(i,2)=cells(i,1)
     
    WaitBox.zt_progression.Caption = "Traitement effectuer à " & Int(i / 1000
    ) & " %" 'tu place cette étape là ou tu veux que la Waitbox s'actualise avec le bon pourcentage...
    WaitBox.Repaint
    next i
    A toi d'essayé de placer l'actualisation de ta Waitbox, là ou tu veux donné un état d'avancement

    Tu peux également écrire un texte simple pur et dur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WaitBox.zt_progression.Caption = "L'opération risque de durer plusieurs minutes," & bbnewline & "Merci de patientez"
    WaitBox.Repaint
    Après je sais pas comment fonctionne ta macro donc c'est à toi d'essayé de la placer comme il faut pour indiquer au mieux a l'utilisateur

    Cdlt
    DoDo

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

    Informations professionnelles :
    Activité : Engineering

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

    Ci-joint un petit exemple basique en reprenant l'appel de tes 16 procédures
    Fichiers attachés Fichiers attachés

  9. #9
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2010
    Messages : 229
    Par défaut
    j'aime beaucoup cette idée fring,

    manque un piti pourcentage pour que ca soit perfect

    mais j'aime beaucoup et je garde en note

    Merci
    cdlt
    DodO

  10. #10
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Par défaut
    la procédure marche nickel merci pour votre aide

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

Discussions similaires

  1. [XL-2013] Affichage des étapes d'une macro de longue durée + Barre de progression si possible
    Par Henri1830 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/12/2014, 21h07
  2. [XL-2007] Je voudrais créer une barre de progression, comme j'ai une vingtaine de macros
    Par ChNoirhomme dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/07/2014, 22h22
  3. Réponses: 13
    Dernier message: 03/04/2014, 22h00
  4. Calcul de commissions évolutives avec une macro
    Par Tiblar92 dans le forum Général VBA
    Réponses: 0
    Dernier message: 27/03/2014, 11h29
  5. Barre de progression d'une macro qui n'est pas dans un module
    Par Boris_Gem dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/10/2010, 11h47

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