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 : comment ne pas bloquer le code appelant?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Par défaut UserForm : comment ne pas bloquer le code appelant?
    Bonjour.

    Codant du VisualBasic for Applications sous Excel 97 (oui, je sais...), je cherche à indiquer à l'utilisateur la progression du travail, de manière à ce que cet utilisateur ne ferme pas le programme, croyant qu'il est bloqué alors qu'en fait, il carbure à pleins tuyaux.

    Cependant, d'après ce que je viens de lire sur les forums de Developpez.com, Excel 97 ne permet pas de rendre la fenêtre non modale, donc l'affichage de la ProgressBar bloque le code appelant jusqu'à ce que l'utilisateur ferme manuellement la UserForm contenant la ProgressBar...

    Vous me direz que je peux m'en sortir en utilisant la barre de statut de Excel par Application.StatusBar, et c'est vrai, d'ailleurs, j'y suis arrivé. Cependant, ce que je programme sera utilisé par des utilisateurs novices qui ne songeront peut-être pas à regarder la barre de statut, ou ne sauront pas de quoi il s'agit.

    Je préfèrerais donc utiliser une ProgressBar, mais comment faire pour qu'elle ne bloque pas le code appelant?

  2. #2
    Membre confirmé Avatar de PUARAI
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 191
    Par défaut
    Re à tous le forum
    Donne nous un exemple de code si tu peux

  3. #3
    Membre habitué
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Par défaut
    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
    Dim progres As Integer
    Dim Maximum_progressBar As Integer
     
     
    ' Procédure initialisant les valeurs de la barre de progression
    Sub InitialiserProgression(ByVal Maximum As Integer)
        progres = 0
        Progression.ProgressBar1.Min = 0
        Progression.ProgressBar1.Max = Maximum
        Progression.ProgressBar1.Value = 0
        DoEvents
    End Sub
     
    ' Procédure appelée à chaque nouvelle étape, avec en paramètre l'intitulé de la phase de la progression
    Sub IncrementeProgression(ByVal Texte As String)
        progres = progres + 1
        Progression.ProgressBar1.Value = progres
        Progression.ProgressBar1.Max = Maximum_progressBar
        'MsgBox (Progression.ProgressBar1.Value)
        Progression.Statut.Caption = Texte
        Progression.ProgressBar1.Refresh
        Progression.Repaint
        DoEvents
        Progression.Show
    End Sub
     
     
    Sub CreationFichierLots()
        'Appel à garder pendant la phase de développement, à déplacer dans le main
        InitialiserProgression (6)
        Maximum_progressBar = 6
        'Progression.Statut.Caption = "Création du fichier des lots..."
        'Progression.Repaint
        'Afficher la fenêtre de progression
        'Progression.Show
        'DoEvents
        Application.StatusBar = "Création du fichier des lots..."
        'Création du classeur et du fichier associé
        '.............
        IncrementeProgression ("Organisation du classeur...")
     
        'Et appel à IncrementeProgression à chaque nouvelle étape
    End Sub
    J'ai sauté les étapes inutiles à la compréhension du code concernant la ProgressBar.

    J'ai essayé avec Progression.showModals, mais comme je l'ai dit, Excel 97 n'en veut pas.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Essaye comme ceci...
    dans un module général..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public  progres As Integer
    Public  Maximum_progressBar As Integer
    Dans le UF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
        ProgressBar1.Min = 0
        ProgressBar1.Max = Maximum_progressBar 
        ProgressBar1.Value = 0
    End Sub
    et dans la fonction qui appel...
    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
    Sub CreationFichierLots()
        'Appel à garder pendant la phase de développement, à déplacer dans le main
           Maximum_progressBar = 6
           Progression.Show 0
           Progression.Caption = "Création du fichier des lots..."
           'Création du classeur et du fichier associé
           '.............
           progres  = progres + 1
           'Ferme le UF quand terminer.
           If progres > Maximum_progressBar then 
                Unload Progression
           Else
                Progression.ProgressBar1.value = Progres
           End If
    End Sub
    Remarque : c'est le UF que tu doit mettre en non modal avec l'attribut 0
    Mais pour que la progression se fasse il faudrait que ce soit dans une boucle ?
    Tu dis...
    A+

  5. #5
    Membre habitué
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Par défaut
    Désolé, mais il n'aime pas cette instruction : Ce qu'il en pense : "Erreur de compilation : Nombre d'arguments incorrect ou affectation de propriété incorrecte".

  6. #6
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour le fil le forum peut etre!!!
    UserForm1.Show vbModeless
    UserForm1.Repaint

    dans user au debut de ton code

    Private Sub UserForm_Initialize()
    doevents ou repaint
    ect...
    End Sub

Discussions similaires

  1. Réponses: 53
    Dernier message: 05/06/2014, 19h42
  2. Comment ne pas bloquer un tOracleConnection en cas d'erreur
    Par minisys dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 29/04/2011, 17h25
  3. Réponses: 7
    Dernier message: 01/09/2010, 13h27
  4. [HTML] comment bloquer le code source en html
    Par leclone dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/10/2006, 22h17
  5. [API]Comment ne pas bloquer la fenêtre principal...
    Par X-K4l1 dans le forum Windows
    Réponses: 1
    Dernier message: 16/08/2005, 14h10

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