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 :

Update userform temps réel [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut Update userform temps réel
    Bonjour le forum, cela fait quelques temps que je n'avais pas poser de questions.

    ALors vilà ce que j'aimerais faire.
    J'ai dans une application un userform qui me sert de timer ou dans un autre cas d'indicateur de température.
    Bref là n'est pas l'important.
    Toujours est il qe pendant un temps donné ce userform est affiché et il faut qu'un de ces labels soit mis à jour en fonction d'une valeur externe.

    J'avais trouvé donc cette solution

    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
    Public Function compte_a_rebours(Duree)
     
    debut = Timer
     
    fin = Duree + debut
    tim.Show vbModeless
     
    For i = 0 To Duree
     
    t = Timer - debut
    While Not t >= i
    t = Timer - debut
    Wend
    t = Duree - t
    t = SecondeEnHeure(t)
    tim.Label2.Caption = t: DoEvents
    tim.Repaint
    Next i
     
    Unload tim
     
    End Function
    Qui fait ce que je lui demande a ceci prêt que je suis obligé de mettre mon userform en non modal et la ca m'embete !
    Je voudrais que mon userform soit modal ou tout du moins que la personne n'est pas accès à la feuille Excel (enfin tout du moins qu'il ne puisse aps interagir avec)

    Si quelqu'un à une idée je suis preneur

  2. #2
    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,
    Comprend pas, pourquoi ça ne va pas en Modal, puisque tu ne veux pas que l'utilisateur puisse agir ?
    A+

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    le problème du modal c'est que le label ne se met pas a jour ...
    Et je ne voi pas pourquoi d'ailleurs

  4. #4
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Sans analyser le fond, pour répondre à ta question , tu peux peut-être regarder du côté de la propriété Interactive de l'objet Application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Interactive = False  ' True
    vois l'aide vba....

    cordialement,

    Didier

  5. #5
    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
    Tu peu tester ce 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
    'Duree en seconde
    Public Sub Delais(Duree As Integer)
    Dim S As Integer
    Dim debut As Integer, fin As Integer
        S = Second(Now)
        Label2.Caption = Duree
        Do
            If S <> Second(Now) Then
                Duree = Duree - 1
                Label2.Caption = Duree
                S = Second(Now)
            End If
            DoEvents
        Loop While Duree > 0
    End Sub
    A+

  6. #6
    Membre éprouvé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    toujours le meme problème a savoir qu'il faut mettre l'usf en modeless pour que ca marche

    Mais c'est pas grave je vais utiliser ta solution ca mine de rien c'est moins gourmand en ressources et a coté de ca je vais mettre le application.interaction à false ce qui semble convenir

    Merci à vous deux je test et je mets résolu ensuite

  7. #7
    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
    Mais pas du tout, j'ai mis la sub dans l'UF et ouvert l'UF en modal et le label se rafraichi.
    Ton label, il est sur l'UF ?

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    1) désolé pour le double post ca fait up en meme temps

    2) Petite question à Le forestier :
    As tu testé ce code ou non pour savoir si c'est moi qui bidouille mal ou pas
    et tu me conseilles de le mettre où ? dans un module classique ou dans le code de l'usf ?

    edit bon j'ai écris en meme temps que ton dernier message ...
    je savais que je merdais quelque part

    et tu la met ou dans l'UF ?
    uf_initialise ?

  9. #9
    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
    non, tu copie la sub comme elle est dans le module de l'UF.
    et dans Activate tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Delais 20 'par exemple pour 20 seconde
    si tu met dans initialise l'UF ne s'affiche jamais.
    C'est probablement pour ça que tu ne voyais pas ton label.
    A+

  10. #10
    Membre éprouvé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    oui j'ai fait les test et je m'en suis rendu compte
    au passage si tu mets dans initialise le delais 20 ca s'affiche mais au bout des 20 secondes

    et merci hein

  11. #11
    Membre éprouvé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    J'ai enlevé la balise résolue car je viens de découvrir un nouveau petit problème.
    En effet en utilisant la fonction de notre cher ami forestier , il se pose un problème certes pas très important mais tout de meme :

    Quand on clique sur le userform (tout en maintenant appuyé) le compteur s'arrète gentiment de tourner et lorsqu'on le lache il ne rattrape pas le temps passé

    Impossible de mettre enabled à false car sinon le label ne se met plus à jour
    l'astuce du application.interactive ne marche pas non plus.

    Et là j'avoue je sèche ...
    Bon évidemment dans l'absolu faut que le user aille faire ca et donc il est pas bien malin s'il le fait et ca ne va pas décaller de beaucoup mais je suis tatillon

    quelqu'un a une idée ?

    edit : quand je dis cliquer sur le userform je parle de sa barre de titre bien entendu !

  12. #12
    Membre éprouvé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    bon j'ai trouvé une solution qui fait ce que je veux
    je la poste demain la j'ai pas le temps je décolle

  13. #13
    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
    Si tu a trouver une solution c'est OK, sinon regarde dans cette contrib, tu peu tout simplement enlever la barre de titre, comme ça l'User (comme tu dis) ne pourra même pas déplacer l'UF.
    A+

  14. #14
    Membre éprouvé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    j'ai fait l'équivalent
    mais je testerais ta solution qui est peut etre encore mieux

    Voici celle que j'ai trouvé en farfouillant sur le world wide web :

    Décalrations :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Declare Function FindWindowA& Lib "user32" _
    (ByVal lpClassName$, ByVal lpWindowName$)
    Private Declare Function GetSystemMenu& Lib "user32" _
    (ByVal hWnd&, ByVal bRevert&)
    Private Declare Function RemoveMenu& Lib "user32" _
    (ByVal hMenu&, ByVal nPosition&, ByVal wFlags&)
    Private Declare Function DrawMenuBar& Lib _
    "user32" (ByVal hWnd&)
    Code dans initialise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Initialize()
    Dim hWnd&, hSysMenu&
    hWnd = FindWindowA(vbNullString, Me.Caption)
    hSysMenu = GetSystemMenu(hWnd, 0)
    RemoveMenu hSysMenu, &HF060, 0
    RemoveMenu hSysMenu, &HF010, 0
    DrawMenuBar hWnd
    End Sub
    et avec ca pas de possibilité de toucher a la barre de titre

    Edit : ta fonction est testée et elle me sera sans doute très utile (et bizarrement j'en avais cherché une du type et j'avais fait choux blanc !)
    Merci de tes contrib comme d'habitude !!!

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

Discussions similaires

  1. Calculs en temps réel dans un userform
    Par stagmaj dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 09/07/2014, 17h11
  2. Update temps réel d'un formulaire
    Par wboulifa dans le forum VBA Access
    Réponses: 3
    Dernier message: 23/01/2013, 07h14
  3. Voir requête éxécuté en temps réel ?
    Par [DreaMs] dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/01/2004, 15h52
  4. cubes temps réel en ROLAP
    Par Guizz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 09/07/2003, 17h36
  5. Durée d'un traitement temps réel
    Par Almex dans le forum C
    Réponses: 5
    Dernier message: 29/03/2003, 15h15

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