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 :

userform avec plusieurs progressbar


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de allergique
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 151
    Points : 108
    Points
    108
    Par défaut userform avec plusieurs progressbar
    Bonjour,

    j'ai un fichier excel dans lequel à partir de checkbox d'un userform on peut lancer 1 seule ou 2 macros à la suite.
    Je souhaite faire une progressbar, et la difficulté c'est de définir le Vmax pour l'ensemble des 2 macros.


    Je me demandais donc si il est possible de faire la chose suivante:

    Créer un userform avec une progressbar quand on lance 1 macro, ou appeler un userform avec 2 progressbar lorsqu'on lance 2 macros

    - si checkbox1=true et checkbox2=false --> appelle userform1 avec 1 seule progressbar appelée progressbar1
    - si checkbox1=true et checkbox2=true --> appelle userform2 avec 2 progressbar appelées progressbar1 pour Macro1 et progressbar2 pour Macro2

    J'espère avoir été assez explicite...

    Merci pour votre aide

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Oui, c'est possible. Mais commence par utiliser une "ProgressBar". Tu as recherché à ProgressBar sur le forum VBA Excel ? Tu as plusieurs réponses. Déjà ici, "stupid" donne une réponse qui devrait t'aider

  3. #3
    Membre régulier Avatar de allergique
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 151
    Points : 108
    Points
    108
    Par défaut
    Bonjour Ouskel'n'or et merci pour ton aide

    J'ai fait une progressbar que j'ai trouvé sur le net, mais en changent de pc et sans rien modifier au fichier la macro plante où le code est en rouge... (mes 2 pc sont en excel 2003)

    Voici mon 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Sub macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 11/08/2007 par 0
    Dim lngTotal As Long, lngI As Long
    Dim lig As Integer
    Dim cel As Range
    Dim somme As Integer
    
    lngTotal = 5000
    somme = 0
        Load UserForm2
       
        With UserForm2
            .ProgressBar1.Scrolling = ccScrollingSmooth 'ccScrollingStandard ' or ccScrollingSmooth
            .Show False ' set the UserForms ShowModal property to false before running
            ' or .Show False
        End With
        
        UpdateProgressBar 0, "Processing..." ' set initial progress status
        
        For Each cel In Range("A1:B" & lngTotal)
            lig = cel.Row
            somme = somme + 1
            
                'Met à jour progressbar
                UpdateProgressBar cel.Row / lngTotal * 100, "Processing " & Format(cel.Row / lngTotal, "0%") & "..."
            
            'End If
            ' do something, place your code here
            
        Range("A" & lig) = "1"
        Range("B" & lig) = "2"
        Next cel
        
        ' clean up
        UserForm1.Hide
        Unload UserForm2
        Range("A1").Select
            
    End Sub
    ______________________________________________________________
    
    Private Sub UpdateProgressBar(NewValue As Single, Optional NewCaption As String)
    ' Updates the progressbar dialog
        With UserForm2
            If Not IsMissing(NewCaption) Then .Caption = NewCaption
            .ProgressBar1.Value = NewValue
            If NewValue = 0 Then .Repaint
        End With
    End Sub
    J'ai essayé la progressbar que tu m'as donné mais l'affichage de celle-ci est pas constant, lors du repaint la barre disparaît puis réapparaît, et on dirait qu'elle clignotte! Si j'arrive à voir ce qui marche pas avec le nouveau pc, je conserverai le contrôle progressbar donnée par excel.


    Pour l'histoire des 2 userform si je lance 1 ou 2 macros, ce que je ne vois pas trop comment faire c'est de dire à la macro:
    - si 1 macro est lancée prendre l'useformX et progrssbarX
    - si 2 macros lancées prendre userformXX et progressbarXX

    A+

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour ça je ne peux pas t'aider, je n'ai pas les données que tu divises...
    Pour macro 1 ou Macro 2, tu peux démarrer tes progressbar en début de macro. Dans 1 tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Load Userform1
    Userform1.show
    'macro qui lance la progression de progressbar1
    Si c'est macro2 tu l'appelles depuis Userform2, Userform2 qui lance la macro2 à l'init ou dans activate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Load Userform2
    Userform2.show
    Sub Userform2_Activate 'ou Initialize
    Macro2
    'macro qui lance la progression de progressbar2
    En fin de chaque macro, tu fermes l'userform correspondant.
    Ce n'est pas aussi simple mais pour réussir, tu dois lancer tes macros depuis userform1 pour pouvoir fermer l'userform ensuite.
    Juste une idée. Pas le temps pour le code, je cède la place à qui la voudra

    Edit
    J'ai modifié ma réponse et j'ajoute que tu dois fermer Userform2 en fin de macro 2 et Userform1 en fin de macro 1
    Il te restera le pb de fermer Userform1 quand c'est macro 2 qui est lancée mais là, vraiment pas le tps.
    Bonne chance

  5. #5
    Membre régulier Avatar de allergique
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 151
    Points : 108
    Points
    108
    Par défaut
    Je n'ai pas trop compris le raisonnement que tu m'a dit, mais je vais me pencher plus dessus demain.

    Pour définir le progressbar à utiliser, est-ce possible de définir une variable X pour le numéro de la progressbar, puis dans la macro écrire:
    with Userform1
    .ProgressBarX.Scrolling = ccScrollingSmooth

    si je mets Progressbar & X, le code me met une erreur. Il y a peut-être une méthode spéciale pour l'écrire

    Merci
    A+

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par allergique
    si je mets Progressbar & X, le code me met une erreur. Il y a peut-être une méthode spéciale pour l'écrire

    Merci
    A+
    En effet, pour nommer un contrôle, tu dois préciser qu'il s'agit d'un contrôle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Userform1.controls("ProgressBar" & "X") = ccScrollingSmooth
    pas de guillemet si X est une valeur (...)

  7. #7
    Membre régulier Avatar de allergique
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 151
    Points : 108
    Points
    108
    Par défaut
    merci ça fonctionne.

    Par contre, j'aurai 2 autres petites questions également:

    - lorsque je lance Macro1, et à l'intérieur de celle-ci je lance macro2, comment fait-on pour conserver une variable définie dans macro1?
    Quand la macro2 s'exécute, les variables sont toutes supprimées


    - De la même manière que l'on a écrit "UserForm1.Controls("Progressbar" & X) = ccScrollingSmooth", est-ce possible d'appeler un UserForm avec une variable du genre "load UserFormY" ou "UserFormY.Controls("Progressbar" & X) = ccScrollingSmooth"?

    Merci d'avance
    A+

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour l'userform(x), je ne l'ai jamais fait et ignore si on peut le faire. Mais ça ne peut pas fonctionner avec Controls(...)
    Pour les variables, tu as deux solutions :
    - Ou tu les déclares en Public dans le module dans lequel se trouve la macro qui ouvre userform1 (si tu n'en as que quelques-unes c'est envisageable)
    - Ou tu mets tes deux macros dans userform1, tes deux progressbar dans Userform1 et tu fais apparaître progressbar1 si Macro1 est appelée et progressbar2 si Macro2 est appelée. (Ce que je ferais pour me simplifier la vie )
    Tes progressbars ont certainement la propriété Visible.
    Tu dis
    A+

  9. #9
    Membre régulier Avatar de allergique
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 151
    Points : 108
    Points
    108
    Par défaut
    j'ai résolu le problème avec la variable Public.

    Merci pour ton aide

    A+

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

Discussions similaires

  1. backgroundworker avec plusieurs progressbar
    Par tortuegenie dans le forum Windows Forms
    Réponses: 1
    Dernier message: 01/06/2011, 16h54
  2. [XL-2007] userform avec plusieurs commandes
    Par HIGGUINS dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/11/2010, 17h49
  3. Réponses: 2
    Dernier message: 26/09/2003, 15h54
  4. ProgressBar avec plusieurs procédures
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/09/2002, 18h03
  5. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 15h57

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