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 :

Texte clignotant pendant traitement


Sujet :

VBA Access

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut Texte clignotant pendant traitement
    Bonjour,
    Malgré mes recherches sur le forum, je n'arrive pas à mettre un texte clignotant. Je m'explique : sur un formulaire, je veux qu'un texte clignote ("Traitement en cours, veuillez patienter") durant le traitement sur évènement 'sur click' d'un bouton.
    J'ai commencé par mettre ma procédure sur évènement minuterie du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Form_Timer()
     
        If Me.msg1.Visible = True Then
            Me.msg1.Visible = False
        Else
            Me.msg1.Visible = True
        End If
     
    End Sub
    J'ai laissé l'intervalle minuterie à 0
    Par contre dans ma procédure sur click de mon bouton je mets la ligne
    puis
    en sortie de procédure

    Et ça ne marche pas !!!
    Merci de votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Par défaut
    peut etre en mettant un refresh à la fin de ton timer???

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut Non, même avec un refresh
    J'ai donc rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.TimerInterval = 100
    Me.Refresh
    Et ça ne fonctionne toujours pas...

  4. #4
    Invité
    Invité(e)

  5. #5
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Bonjour,

    Ta procédure pour le clignotement a l'air correcte (il y'a plus simple, mais bon...)

    Ou places-tu exactement l'instruction de remise à 0 de l'intervalle du timer ?

    Tu pourrais nous mettre le code complet de la procédure ?

    Domi2

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Bonjour les gens,
    exemple : pour l'exemple le bouton s'appelle Bouton1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     Private Sub Bouton1_Click()
      msg1.Visible=True
      Form.OnTimer="[Procédure événementielle]"
      Form.TimerInterval=100
      ..... Traitement  
      Form.Ontimer=""
      msg1.Visible=False
    End sub
     
    Private Sub Form_Timer()
     msg1.visible=Not msg1.Visible
    End sub

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut Voici mon code
    Tout en sachant que :
    L'intervalle de minuterie de mon formulaire est à 0. Je l'alimente dans la procédure de mon bouton

    Le code de mon bouton est le suivant
    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
     Private Sub b_anomalies_Click()
    On Error GoTo b_anomalies_Click_Err
     
        If IsNull(Me.date_debut) Then
            MsgBox "date début non remplie"
            Me.date_debut.SetFocus
            Exit Sub
        End If
     
        If IsNull(Me.date_fin) Then
            MsgBox "date fin non remplie"
            Me.date_fin.SetFocus
            Exit Sub
        End If
     
        '---> réglage minuterie à 1 seconde
        '     pour mettre le message en clignotant
        Me.TimerInterval = 1000
     
        '---> Fonction publique -traitement anomalies- qui se trouve dans module
        Call demarrage_anomalies
     
        '---> Fin réglage minuterie
        '     pour enlever le message en clignotant
        Me.TimerInterval = 0
        msg1.Visible = False
        MsgBox "Traitement terminé"
     
     
    b_anomalies_Click_Exit:
        msg1.Visible = False
        Exit Sub
     
    b_anomalies_Click_Err:
        MsgBox Error$
        Resume b_anomalies_Click_Exit
     
    End Sub
    Vous notez que ma procédure appelle une fonction écrite dans un module (est-ce important ?).
    D'autre part, par rapport au message d'ilank, je ne mets pas la ligne
    car ma procédure sur l'évènement 'sur minuterie' est dans les propriétés du formulaire

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut Texte clignotant : toujours rien, j'insiste
    Bonjour,
    Je me permets d'insister car je n'ai pas résolu mon problème, bien que j'ai une petite idée.
    Je résume : j'ai un texte non visible sur un formulaire que je veux faire clignoter sur l'évènement click d'un bouton. Sur le formulaire, j'ai la propriété "intervalle minuterie" = 0 et la procédure suivante sur "minuterie"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msg1.Visible = Not msg1.Visible
    Sur l'évènement click de mon bouton, j'ai la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     '---> réglage minuterie à 1 seconde
        '     pour mettre le message en clignotant
        Me.TimerInterval = 1000
     
         '---> Fonction traitement anomalies
        Call demarrage_anomalies
     
        '---> Fin réglage minuterie
        '     pour enlever le message en clignotant
        Me.TimerInterval = 0
        msg1.Visible = False
        MsgBox "Traitement terminé"
    Je crois tout simplement que la valeur timerInterval est perdue quend la fonction "demarrage_anomalies" (qui est écrite dans un module) est appelée.
    Qu'en pensez vous ????

  9. #9
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    411
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 411
    Par défaut
    Bonjour,

    comme tout cela ne marche pas, essaies un peu ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Form_Timer()
    Static I as integer
        If I = 0 Then
            Me.msg1.Visible = False
            I=1
        Else
            Me.msg1.Visible = True
            I=0
        End If
     
    End Sub
    Ne mets pas le timing dans le code, places le directement sur la propriété du formulaire.

    Cette procédure n'a pas été testée. Essayez-la.

    bye

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut Ce n'est pas ce que je veux
    Merci
    Je suis d'accord avec vous. ça marchera car le texte clignotera tout le temps. Mais c'est justement ce que je ne veux pas.
    Je veux seulement que le texte clignote dés que l'on clique sur le bouton et que le texte soit non visible dés que le traitement est terminé.

  11. #11
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Bonjour,
    Lucho en ne mettant pas la ligne que je t'ai donné le Timer ne sera jamais lancé. Il faut activer l'événement au moment où tu en as besoin, donc dans la procédure Click du bouton en fin de procédure tu désactives l'événement Timer.
    Donc
    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
     Private Sub b_anomalies_Click()
    On Error GoTo b_anomalies_Click_Err
     
        If IsNull(Me.date_debut) Then
            MsgBox "date début non remplie"
            Me.date_debut.SetFocus
            Exit Sub
        End If
     
        If IsNull(Me.date_fin) Then
            MsgBox "date fin non remplie"
            Me.date_fin.SetFocus
            Exit Sub
        End If
     
        '---> réglage minuterie à 1 seconde
        '     pour mettre le message en clignotant
        If Me.TimerInterval<>1000 Then Me.TimerInterval = 1000
        'Activer l'événement timer du formulaire
        Me.OnTimer="[Procédure événementielle]"   
        '---> Fonction publique -traitement anomalies- qui se trouve dans module
        Call demarrage_anomalies
     
        '---> Fin réglage minuterie
        '     pour enlever le message en clignotant
        'Désactiver l'événement Timer
        Me.OnTimer="" 
        msg1.Visible = False
        MsgBox "Traitement terminé"
     
     
    b_anomalies_Click_Exit:
        msg1.Visible = False
        Exit Sub
     
    b_anomalies_Click_Err:
        MsgBox Error$
        Resume b_anomalies_Click_Exit
     
    End Sub
    et pour que ça marche ne met rien dans la propriété sur minuterie du formulaire, tu ajoutes ceci dans le code du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Timer()
      Me.msg1.visible=not me.msg1.visible
    End sub

  12. #12
    Expert confirmé
    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
    Par défaut
    bjr

    Pour activer/désactiver la minuterie il suffit de modifier l'intervalle.
    Le mettre à 0 désactive la minuterie sans avoir besoin de modifier la propriété onTimer.

    Sinon si la procédure demarrage_anomalies ne débloque pas les événements il ne se produira jamais rien.
    Il faut mettre un doEvents au bon endroit pour déclencher les événements, sinon la procédure ne rend pas la main et l'événement onTimer ne s'exécute pas.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut Peut être la fonction qui bloque tout
    Merci messieurs,
    Je pense que, maintenant, je comprends bien le fonctionnement de la minuterie.
    Après plusieurs essais dont celui d'Ilank, je constate que tout marche bien ... SEULEMENT quand je mets l'appel de ma fonction en commentaire !!!
    On dirait que lorsque le programme est dans la fonction, il traite la fonction mais "oublie" le clignotement. La preuve, c' est que lorsque la fonction se termine le clignotement reprend. Bizarre non ???

    C'est pas dramatique pour mon traitement mais j'aurais aimé comprendre...

  14. #14
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Comme l'a écrit Arkham, la procédure appelée doit rendre la main au système pour que l'événement minuterie puisse être pris en compte.
    Il faut une ou plusieurs instructions DoEvents dans ta procédure.
    Le plus simple serait que tu places le code de la procédure ici; qu'on voit ce qu'il en est.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut Précisions S V P
    Merci Arkham et Ilank,
    Excusez moi de ne pas répondre tout de suite mais je fais 10000 choses en même temps !!!
    Apparemment, d'après ce que vous dites, c'est la fonction demarrage_anomalies qui bloque les évènements car elle ne rend pas la main. Pouvez vous me donner des explications sur les "do events".

    En fait cette "public function" est une suite de requêtes et d'appel d'autres fonctions
    Voici le 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    '----------------------------------------------------------------------------
    ' demarrage_anomalies : PREPARATION DE TOUTES LES TABLES DE BASE DES CALCULS'
    '                                                                           '
    '----------------------------------------------------------------------------
    Public Function demarrage_anomalies()
    On Error GoTo demarrage_anomalies_Err
     
        Dim appel_fonction As Boolean
     
         'dans le module "mo_vidage"
        appel_fonction = vidage()
     
     
     
        'RECHARGE LES TABLES AVEC LES NOUVELLES DATES DE SAISIE
        '------------------------------------------------------
        ' ra_t_GTJOUR
        DoCmd.OpenQuery "ra_t_GTJOUR", acNormal, acAdd
        'MsgBox "Requete ra_t_gtjour finie"
        ' ra_t_GTPRECT
        DoCmd.OpenQuery "ra_t_GTPRECT", acNormal, acAdd
        'MsgBox "Requête ra_t_GTPRECT   finie"
     
        ' ra_t_absjour
        DoCmd.OpenQuery "ra_t_absjour", acNormal, acAdd
        'MsgBox "Requête ra_t_absjour   finie"
     
        ' ra_t_peextend
        DoCmd.OpenQuery "ra_t_peextend", acNormal, acAdd
        'MsgBox "Requête ra_t_peextend   finie"
     
        ' ra_t_peextend_faux
        DoCmd.OpenQuery "ra_t_peextend_faux", acNormal, acAdd
        'MsgBox "Requête ra_t_peextend_faux   finie"
     
        ' ra_t_sans_complement_CH
        DoCmd.OpenQuery "ra_t_sans_complement_CH", acNormal, acAdd
        'MsgBox "Requête ra_t_sans_complement_CH   finie"
     
        ' ra_t_sans_complement_HN
        DoCmd.OpenQuery "ra_t_sans_complement_HN", acNormal, acAdd
        'MsgBox "Requête ra_t_sans_complement_HN   finie"
     
        ' rcreat_t_abs_heure
        DoCmd.OpenQuery "rcreat_t_abs_heure", acNormal, acEdit
        'MsgBox "Requête rcreat_t_abs_heure   finie"
     
        ' ra_T_abs_heure_jour
        DoCmd.OpenQuery "ra_T_abs_heure_jour", acNormal, acAdd
        'MsgBox "Requête ra_T_abs_heure_jour   finie"
     
        ' ra_T_abs_jour_heure
        DoCmd.OpenQuery "ra_T_abs_jour_heure", acNormal, acAdd
        'MsgBox "Requête  ra_T_abs_jour_heure  finie"
     
        ' ra_t_abs_heures_perm
        DoCmd.OpenQuery "ra_t_abs_heures_perm", acNormal, acAdd
        'MsgBox "Requête ra_t_abs_heures_perm   finie"
     
     
        ' ra_t_droit_conges
        '----> Cette requête est supprimée car elle est déjà lancée dans la fonction conges()
        'DoCmd.OpenQuery "ra_t_droit_conges", acNormal, acAdd
        'MsgBox "Requête ra_t_droit_conges   finie"
     
        ' ra_t_AJO
        DoCmd.OpenQuery "ra_t_AJO", acNormal, acAdd
        'MsgBox "Requête ra_t_AJO   finie"
     
        'rcreat_horaire_pompier
        DoCmd.OpenQuery "rcreat_horaire_pompier", acNormal, acAdd
        'MsgBox "Requête rcreat_horaire_pompier   finie"
     
        'rcreat_t_liste_pompier_horaire
        DoCmd.OpenQuery "rcreat_t_liste_pompier_horaire", acNormal, acAdd
        'MsgBox "Requête rcreat_t_liste_pompier_horaire   finie"
     
        'creation liste pompiers ayant modifier changés de calendrier ds période saisie
        DoCmd.OpenQuery "rcreat_t_liste_pompier_horaire_histo", acNormal, acAdd
        'MsgBox "Requête rcreat_t_liste_pompier_horaire_histo   finie"
     
        'invalider les enregistrements suite à ce dernier changt
        DoCmd.OpenQuery "MAJ_t_liste_pompier_horaire_non_valide", acNormal, acAdd
        'MsgBox "Requête MAJ_t_liste_pompier_horaire_non_valide    finie"
     
        'rcreat_t_pompier_I_R70_repos
        DoCmd.OpenQuery "rcreat_t_pompier_I_R70_repos", acNormal, acAdd
        'MsgBox "Requête rcreat_t_pompier_I_R70_repos   finie"
     
        'MsgBox "début des fonctions"
        'APPEL DES FONCTIONS
        '-------------------
        'dans le module "mo_factionnaire"
        appel_fonction = factions()
        'MsgBox "fonction factions   finie"
     
        'dans le module "mo_pointage"
        appel_fonction = pointage()
        'MsgBox "fonction pointage   finie"
     
        'ds le module "mo_pointage_dejeuner"
        appel_fonction = pointage_dejeuner()
        'MsgBox "fonction pointage_dejeuner   finie"
     
        'dans le module "mo_conges"
        appel_fonction = conges()
        'MsgBox "fonction conges   finie"
     
        'dans le module "mo_maladie"
        appel_fonction = maladie()
        'MsgBox "fonction maladie   finie"
     
        'dans le module "mo_heures_negatives"
        appel_fonction = heures_negatives()
        'MsgBox "fonction  heures_negatives  finie"
     
        'dans le module "mo_BOR_RCL_pris"
        appel_fonction = BOR_RCL_pris()
        'MsgBox "fonction BOR_RCL_pris    finie"
     
        'MsgBox "traitement terminé"
     
     
     
     
    demarrage_anomalies_Exit:
        Exit Function
     
    demarrage_anomalies_Err:
        MsgBox Error$
        Resume demarrage_anomalies_Exit
     
    End Function

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut Pas de réponse ???
    Bon, je voulais quelques éclaircissements sur "Doevents" mais je vais pousser mes recherches sur ce domaine.
    En attendant, je vous remercie pour vos éclaircissements, ça m'a bien fait avancer.
    A bientôt

  17. #17
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Bonjour Lucho,
    le DoEvents redonne la main au système pour qu'il puisse prendre en charge les événements en attente. Pendant l'éxécution de ta procédure; en plaçant des Doevents tu permets au système de gérer les événements en attente dont la minuterie.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut
    Donc, d'après ce que j'ai compris, je mets "doEvents" à l'intérieur de la fonction que j'ai appelé de ma procédure (à plusieurs endroits ???)
    Merci Ilank, je teste ça dans l'après midi.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Février 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 25
    Par défaut
    Merci pour vos lumières.

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

Discussions similaires

  1. [VB.NET] Ignorer Clique pendant traitement
    Par b_lob dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/08/2006, 10h14
  2. [TP] Texte clignotant en mode graphique
    Par diden138 dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 21/05/2006, 13h07
  3. [Système] page d'attente pendant traitement system
    Par Squyrrel dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2006, 22h09
  4. [JProgressBar] Mauvaise incrémentation pendant traitement
    Par nicolas.pied dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 16/12/2005, 09h17
  5. [JProgressBar] Afficher barre d'attente pendant traitement
    Par Regis.C dans le forum Composants
    Réponses: 10
    Dernier message: 02/09/2005, 16h43

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