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 :

Ajouter une progress bar ou simple fenetre indicateur de macro en cours


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut Ajouter une progress bar ou simple fenetre indicateur de macro en cours
    Bonjour,
    j'ai une macro qui prend du temps à s'executer.
    Je voudrais informer l'utilisateur que la macro est en train de jouer, puis fini.
    L'utilisateur doit attendre.

    j'ai trouvé le code suivant qui fonctionne mais pas chez moi
    j'obtiens une erreur 424, objet recquis sur UserForm1
    mais c'est quoi ce userform1 ? le nom de ma feuille ?
    question basique desolee, mùais je ne comprend pas ?

    merci d'avance

    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
     
    'Pour Barre de progression
    Public xCompteurX As Variant
    Public xPour100X As Single
     
    sub magrossemacro()
        UserForm1.Show vbModeless 'Affiche Barreprogression dans état modeless
        xCompteurX = 0
     
    'dans ma boucle
         Call BarreDeProgression
    'fin ma boucle
     
    End Sub
     
    Sub BarreDeProgression()
        Application.ScreenUpdating = False
        xCompteurX = xCompteurX + 5 'Le nombre est à régler en fonction de votre routine. De la durée de votre routine
                                    'En lieu et place de 5 vous pouvez mettre 1 ou 2 ou 3.5 ou 12 ou 7.1 ou 20 etc..
        xPour100X = xCompteurX / 100
        With UserForm1
            .FrameProgress.Caption = Format(xPour100X, "0%")
            .LabelProgress.Width = xPour100X * (.FrameProgress.Width - 10)
        End With
        DoEvents 'L'instruction DoEvents est responsable de la mise à jour de l'Userform
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    merci patricktoulon bien ta progress bar, mais trop pour moi.

    le truc est que j'essaie de laisser mon code le plus simple possible, de coder le moins possible et d'utiliser du natif.
    Si j'arrivais simplement a comprendre ce que UserForm1 est, je n'aurai qu'une ligne à adapter, et beaucoup moins de code.
    je continue mes recherches mais merci de ton idée.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    soit comme tu veux
    peut etre que cet exemple t'apportera la lumiere
    il y a 2 userfoms en exemple
    l'un avec un label qui me sert de progressbar
    et l'autre avec un vrai control progressbar
    ya pas plus simple comme code
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    merci.
    ton code marche bien dans ton fichier.
    J'ai copié ta sub TESTBARRE1 dans mon fichier, et je l'appelle depuis ma fonction, et là pareil, erreur 424 sur
    "With UserForm1
    .Show 0"

    dois je initialiser ce UserForm1, c'est quoi ? mon fichier ? ma feuille ? c'est très abstrait pour moi..
    désolée, ce doit être basique mais je bloque :'(

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,

    tiens un peu de lecture sur les UserForm devrais t'aider :

    http://silkyroad.developpez.com/VBA/UserForm/

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    dois je initialiser ce UserForm1, c'est quoi ? mon fichier ? ma feuille ? c'est très abstrait pour moi..
    désolée, ce doit être basique mais je bloque :'(
    dans ce cas la je rejoint bill il faut commencer par le debut

    d'autant plus que a ce que je constate tu n'est pas nouveau sur le forum
    Inscrit en:avril 2010
    Messages:90
    Points:43
    depuis partiquement 5 ans tu devrais savoir ce qu'est un userform au moins
    je soupconne une legere attitude flegmatique de ta part dans le cas contraire un serieux handicap cérébral au quel cas je ne peut rien pour toi

    je te laisse toi meme apporté une réponse a cette question
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    je programme en java d'habitude et je ne me revendique pas pro excel du tout du tout ....

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Un exemple avec deux Labels créés dynamiquement sur la feuille et supprimés ensuite. Pour faire le test, tu colle le code dans un module standard, tu ajoute un bouton "Formulaire" (Contrôles de formulaire) sur la feuille à qui tu attaches la macro "ProgressBar". Il faudra adapter à ton code en ce qui concerne la progression. Si tu n'y arrives pas, poste ton code et on verra ce qu'il est possible de faire :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    Sub ProgressBar()
     
        Dim Fe As Worksheet
        Dim Ctrl As OLEObject
        Dim LblProgress As MSForms.Label
        Dim LblFond As MSForms.Label
        Dim LargeurLabel As Integer
        Dim HauteurLabel As Integer
        Dim Max As Long
        Dim R As Single
        Dim I As Long
        Dim J As Long
     
        Set Fe = Worksheets("Feuil1")
     
        'défini les dimensions
        LargeurLabel = 500
        HauteurLabel = 20
        Max = 1000 '<-- pour le test...
     
        With Fe
     
            Application.ScreenUpdating = False
     
            'crée le label servant de fond
            Set Ctrl = .OLEObjects.Add("Forms.Label.1")
     
            'passe l'objet à la variable afin d'utiliser les propriétés des labels
            Set LblFond = Ctrl.Object
     
            'défini certaines de ces dernières
            With LblFond
                .Name = "LblFond"
                .Caption = ""
                .BackColor = &HC0FFFF
                .BorderStyle = fmBorderStyleSingle
                .Left = Application.UsableWidth / 2 - LargeurLabel / 2
                .Top = Application.UsableHeight / 2
                .Width = LargeurLabel
                .Height = HauteurLabel
            End With
     
            'crée le label servant de barre de progression
            Set Ctrl = .OLEObjects.Add("Forms.Label.1")
     
            'idem que plus haut
            Set LblProgress = Ctrl.Object
     
            With LblProgress
                .Name = "LblProgress"
                .Caption = ""
                .BorderStyle = fmBorderStyleSingle
                .BackColor = &H800000
                .ForeColor = &HFFFFFF
                .Left = Application.UsableWidth / 2 - LargeurLabel / 2
                .Top = Application.UsableHeight / 2
                .Width = 0
                .Height = HauteurLabel
                .TextAlign = fmTextAlignCenter
            End With
     
            Application.ScreenUpdating = True
     
            'rapport
            R = LargeurLabel / Max
     
            '####################################################################
            'ici se fait la progression ...
            'il faut adapter au code...
            For J = 1 To Max
     
                LblProgress.Width = J * R
                DoEvents
                LblProgress.Caption = Format(J / Max, "#0%")
     
            Next J
            '####################################################################
     
            'suppression des labels
            On Error Resume Next
            .OLEObjects("LblProgress").Delete
            .OLEObjects("LblFond").Delete
     
        End With
     
    End Sub

  10. #10
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Sans barre de progression et avec une copie de l'aide de VBA:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Paresseux()
        oldStatusBar = Application.DisplayStatusBar
        Application.DisplayStatusBar = True
        Application.StatusBar = "Je travaille longtemps pour vous"
        MsgBox ("Regardez dans la barre d'état")
        Application.StatusBar = False
        Application.DisplayStatusBar = oldStatusBar
    End Sub

Discussions similaires

  1. Ajout d'une progress bar lors d'un rafraichissement
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 16/04/2008, 15h01
  2. [winAPI] Comment créer une progress bar ownerdraw ?
    Par kidpaddle2 dans le forum Windows
    Réponses: 1
    Dernier message: 01/08/2006, 11h02
  3. [MFC] Utilisation d'une progress bar
    Par nmarf dans le forum MFC
    Réponses: 2
    Dernier message: 12/09/2005, 10h42
  4. [VB.NET] Mise en place d'une progress bar
    Par Hoegaarden dans le forum Windows Forms
    Réponses: 14
    Dernier message: 19/10/2004, 09h23

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