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

VBA Access Discussion :

Plusieurs intervalles de minuterie


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut Plusieurs intervalles de minuterie
    Bonjour,

    Est-il possible en VBA de programmer sur un même formulaire plusieurs intervalle de minuterie ? L'objectif est de simuler un chargement de programme. Par exemple, ma zone de texte Loader par défaut est "Initialisation de la configuration ...". L'intervalle est de 3000, donc ensuite Loader = Mise à jour des paramètres ... puis Loader = Démarrage de l'application .... Pour ça c'est ok.

    Mais entre chaque intervalle, j'aimerai qu'un rectangle de taille 0 grandisse à taille 100 en 3 sec (durée de l'intervalle). Il faudrait donc un second intervalle qui gère la modification du rectangle. Est-ce que je suis assez clair ? est-ce que c'est possible ? Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 266
    Points
    34 266
    Par défaut
    bonjour,
    tu t'en sors avec quelle méthode sur la première partie ? DoEvents ou autre chose ?
    tu utilises Sleep peut-être ?

    Peux-tu nous en dire un peu plus pour qu'on aille dans ton sens.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Ah j'avais mal regardé la FAQ !! Je vais essayer de m'en sortir avec ces nouvelles infos, si je n'y arrive pas, je reviendrai poster mon code ici ...

    Juste un truc, dans le code de la FAQ il est dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if((Sec mod 2)=0) then
     'ici l'action à effectuer toutes les 2 sec
    end if
    Mais ça dépend de l'intervalle principal, comment faire pour que mon intervalle principal ici 2 soit divisé par 100? Merci

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Bon je m'en suis sorti en faisant une bidouille comme ça. J'appelle le timer toutes les 1 ms, et je joue sur le pas de barre pour simuler un chargement plus ou moins rapide selon l'étape :

    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
    Option Compare Database
    Dim numTimer As Integer
    Dim numTimerB As Boolean
    Dim numBarre As Integer
    Dim pasBarre As Integer
     
    Private Sub Form_Load()
        numTimer = 0
        numTimerB = True
        numBarre = 0
        pasBarre = 10
        Me.ProgressBar.Width = 0
    End Sub
     
    Private Sub Form_Timer()
        If numTimerB = True Then
            numTimer = numTimer + 1
            If numTimer = 1 Then
                Me.Loader.Value = "Initialisation de la configuration ..."
                numTimerB = False
                pasBarre = 15
            ElseIf numTimer = 2 Then
                Me.Loader.Value = "Réglage des paramètres ..."
                numTimerB = False
                pasBarre = 5
            ElseIf numTimer = 3 Then
                Me.Loader.Value = "Démarrage de l'application ..."
                numTimerB = False
                pasBarre = 10
            End If
        End If
     
        numBarre = numBarre + pasBarre
        Me.ProgressBar.Width = numBarre
        If numBarre = 2500 Then
            numTimerB = True
            numBarre = 0
        End If
     
        If numTimer = 4 Then
            Me.TimerInterval = 0
            DoCmd.OpenForm "_Interface"
            DoCmd.Close acForm, Me.Name
        End If
     
    End Sub
    Je sais pas si c'est trés propre comme code, mais ça fonctionne. Le seul truc, c'est que ma barre en grandissant n'arrete pas de clignoter, est-ce que c'est possible d'empêcher ça ?

  6. #6
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bonjour,

    J'appelle le timer toutes les 1 ms
    Toutes les ms c'est trop. Je parie que beaucoup d'évenements Timer sont abandonnés. As-tu besoin de rafraichir l'affichage toutes les ms??? (Access y arrive-t-il d'ailleurs?)

    Pour le pasBarre, il est inutile de descendre en dessous de 15 (15 twips = 1 pixel sur la plupart des config écran).
    Sinon tu redessines la barre pour rien.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Points : 146
    Points
    146
    Par défaut
    Alors j'ai changé, j'appelle la fonction toutes les 500 ms, je pars avec un pas initial de 100, puis 400, puis 200, puis 600. Là ma barre ne clignote plus effectivement, mais du coup ça ne donne plus une impression de chargement continu de la barre, mais plutot de grosses étapes. Mais bon c'est déjà ça. Par contre, qu'entends-tu par "je redessine la barre pour rien" ? Tu parles du numBarre = 0 ? Ce que j'essaye d'avoir, c'est que la barre se charge de 0 à 2400 pour chacune des 3 étapes !

  8. #8
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    tu définis la taille de la barre en twips, mais à l'écran tu vois des pixels

    en gros 15 twips = 1 pixel (le plus souvent)

    donc si tu ajoutes 5 twips et que tu redessines la barre, tu ne vois de changement à l'écran qu'une fois sur trois

    il pourrait être judicieux de ne changer la taille de la barre que sur des multiples de 15

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if numBarre mod 15 = 0 then
      Me.ProgressBar.Width = numBarre
    end if

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

Discussions similaires

  1. [XL-2013] Recherche parmi plusieurs intervalles
    Par berapard dans le forum Conception
    Réponses: 6
    Dernier message: 14/05/2014, 11h26
  2. plusieurs valeurs dans un intervalle
    Par marie33000 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/06/2009, 10h30
  3. [2005]découper un intervalle en plusieurs
    Par bilelx2002 dans le forum Développement
    Réponses: 2
    Dernier message: 03/05/2009, 13h39
  4. Réponses: 2
    Dernier message: 28/06/2008, 22h52
  5. plusieurs intervalles dates
    Par grizzz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/12/2006, 11h25

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