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 non modal


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Par défaut Userform non modal
    Bonjour,
    Je suis bloqué sur un problème de VBA sur Excel (Excel 2007). Impossible de trouver sur le net la solution, à croire que personne n'a jamais eu ce problème ! Le sujet c'est l'utilisation d'une boite de dialogue non modale.
    J'ai fait un programme qui marche bien mais qui est un peu long (1 à 2 minutes). Aussi je voudrais "habiller" le déroulement du programme en indiquant dans une boite de dialogue qui restera ouverte durant out le temps du programme, les principales étapes sont :
    a) Le programme démarre et charge une certaine variable (XXX).
    b) Une boite de dialogue s'ouvre avec un message disant "Bonjour, bla bla bla XXX" (où XXX est la variable qu'il vient de charger).
    c) Le programme continue à se dérouler sans que l'on ait besoin de cliquer sur la boite de dialogue.
    d) La boite de dialogue, toujours affichée à l'écran, affiche régulièrement des messages du type : "Je suis en train de traiter la ligne AAA" (où AAA est une variable issue du programme).
    e) Le programme arrive à son terme. La boite de dialogue (toujours ouverte) affiche un message du type "J'ai fini de traiter les données, le résultat est BBB, CCC, DDD" (où BBB, CCC et DDD sont des variables captées dans le programme).
    f) à ce moment là, l'utilisateur clique sur un bouton de la boite de dialogue "fermer" qui vient d'apparaître et tout s'arrête !
    Trois semaines que je cherche la solution !

  2. #2
    Invité
    Invité(e)

  3. #3
    Membre averti
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Avril 2015
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Avril 2015
    Messages : 39
    Par défaut et pour revenir à la Userform ?
    Merci Rdurupt pour cette magnifique barre de défilement qui fonctionne très bien ! Bravo !
    J'avais toutefois déjà trouvé cette solution et ton post.
    Cela règle une partie du problème (à savoir le "patientez ...") mais cela ne fournit pas la possibilité de mettre des messages personnalisés et encore moins celle de faire apparaître dans ces messages la valeurs de variables issues du programme en cours d'exécution.
    Y a-t-il donc une solution à travers l'utilisation des userform ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'apporte ma maigre contribution à cette superbe proposition de rdurupt

    j'ai téléchargé son classeur démo
    j'ai remplacé le texte "Veuillez patienter :" par un label

    et j'ai mis un affichage dynamique des étapes, en modifiant le caption du label à chaque étape de sa boucle de démonstration :

    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
     
    Public Sub BarreVal(Nb As Long, Sur As Long)
    Dim v As Long
    v = (Me.BarreEnv.Width * ((1 / Sur)) * Nb) - 2
    If v < 1 Then v = 1
    Me.Barre.Width = v
    Me.Label2.Caption = "Etape" & v & " sur " & Sur
    DoEvents
    Me.Show
    End Sub
     
     
    Private Sub UserForm_Initialize()
    Me.Barre.Width = 1
    Me.Label2.Caption = "Initialisation"
    End Sub
    A toi maintenant d'adapter cet affichage dynamique en fonction de tes souhaits

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Merveilleux joe,mais tu pouvais passer le caption en paramètre du Public Sub BarreVal!

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Tu as entièrement raison, ceci assouplira grandement sa gestion des affichages, dans la mesure où ton code n'étant qu'une boucle à traitement unitaire ... ma solution fonctionne mais risque d'être peu pratique à transposer pour des procédures à traitements différents !

    J'opte pour un argument Optionel, ce qui permet de conserver le caption précédent si le traitement suivant ne nécessite pas de mise à jour
    Code dans le Userform
    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
     
     
    Public Sub BarreVal(Nb As Long, Sur As Long, Optional AfficheEtape As String)
    Dim v As Long
    v = (Me.BarreEnv.Width * ((1 / Sur)) * Nb) - 2
    If v < 1 Then v = 1
    Me.Barre.Width = v
    If AfficheEtape <> "" Then
        Me.Label2.Caption = AfficheEtape
    End If
    DoEvents
    Me.Show
    End Sub
     
     
    Private Sub UserForm_Initialize()
    Me.Barre.Width = 1
    End Sub

    Et le code du module, avec un exemple trivial qui n'est pas un traitement uniforme
    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 test()
    Dim i As Long
    Dim Inter As Long
     
    For i = 0 To 9999
        BarreDefilement.BarreVal i, 50000, "Fait une boucle de 0 à 9999"
    Next i
     
    Inter = 9999
    For i = 0 To 19999
        'ici si je met pas de valeur pour mon caption, il restera à la valeur précédente
        BarreDefilement.BarreVal i + Inter, 50000
    Next i
     
    Inter = Inter + 19999
    For i = 0 To 19999
        BarreDefilement.BarreVal i + Inter, 50000, "Fait une troisième boucle de 0 à 19999"
    Next i
     
    Unload BarreDefilement
     
    MsgBox "Terminé!"
     
    End Sub

    c'est vraiment pour la démonstration ... ça reste à adapter.
    la partie qui gère les affichages de caption et la mise à jour de la barre peut également être optimisé, là c'est un peu bourrin

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

Discussions similaires

  1. [XL-2007] Userform non modale vide !
    Par Gloubi99 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/04/2010, 18h40
  2. Pb référence / userform non-modal
    Par DARKALANE dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/09/2009, 21h03
  3. [Toutes versions] Userform non modal = plantage d'excel
    Par youn1096 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/05/2009, 16h39
  4. [E-02] Comment garder un Userform non Modal affiché ?
    Par Frutchy dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 23/12/2008, 02h36
  5. UserForm non modal mais arrêtant la macro
    Par oohcalme dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2008, 11h11

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