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 :

Progressbar VBA sur requete enregistrée


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut Progressbar VBA sur requete enregistrée
    Bonjour à tous,

    Ayant eu énormement de mal à recouper toutes les infos pour parvenir à mes fins, je propose ce poste aux débutants comme moi pour décrire la procédure à suivre:

    Données:
    • 1 formulaire
    • 1 requete enregistrée (en l'occurence R_Raz_Temp)
    • 1 bouton qui lance la requete par le code (et non macro!)(ici B_Actualiser)
    • 1 table (ici Temp_Postes_Caff)

    Il s'agit dans mon cas d'une requete de suppression servant à razer la table sur laquelle je travail et voici le code sur l'événement Click du bouton:

    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
    Private Sub B_Actualiser_Click()
        Dim i As Integer
     
        'Desactivation des alertes
        DoCmd.SetWarnings False
     
        '#####################################
        'Raz de la table temporaire
        '#####################################
     
        'Définition des attributs de ma progressbar
        ProgressBar.Visible = True 'On fait apparaitre la progressbar
        ProgressBar.Min = 0 'Valeur mini de la progressbar
        ProgressBar.Max = DCount("*", "Temp_Postes_Caff") 'On compte les enregistrements de la table à effacer
     
        i = 1 'Initialisation de ma boucle de traitement
        TxtTraitement = "RAZ table temporaire" 'Mise à jour de la description de l'action en cours
        'Boucle de traitement
        While i <= ProgressBar.Max
            DoCmd.OpenQuery ("R_Raz_Temp") 'Traitement de la requete enregistrée
            DoEvents 'Liberation du système pour d'autres executions eventuelles
            ProgressBar.Value = i 'Incrementation de la valeur de la progressbar
            i = i + 1 'Incrémentation de la boucle de traitement
        Wend
        'Initialisation de l'affichage en fin de traitement
        ProgressBar.Value = 0
        ProgressBar.Visible = False
        TxtTraitement = ""
    N'étant bien evidement pas un expert en VBA je suis absolument ouvert à toute critique ou correction éventuelle.

    Amicalement

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 383
    Points : 19 805
    Points
    19 805
    Billets dans le blog
    66
    Par défaut
    Salut,

    Dans ton code VBA, tu exécutes la requête "R_Raz_Temp", autant de fois qu'il y a d'enregistrements dans la table "Temp_Postes_Caff"...

    Est-ce conforme avec ce que tu veux faire ?

    A+

  3. #3
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Salut User,

    En effet non! Ce n'est pas du tout ce que je veux faire...
    De plus je viens de constater que les fonctions de domaine tel que "Dcount" ne fonctionne que sur des tables et non sur les requêtes. Elle ne fonctionne plus non plus si le contenu de la table retourne Null.
    En conclusion je fini par me demander si je ne ferais pas mieux d'utiliser un recordset DAO pour faciliter la démarche?

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 383
    Points : 19 805
    Points
    19 805
    Billets dans le blog
    66
    Par défaut
    Salut,

    Les fonctions de domaine comme DCount ne fonctionnent pas avec du sql comme argument, par contre elle fonctionne bien avec le nom d'une requête enregistrée comme argument, à condition que ce ne soit pas une requête paramétrée.

    Que veux-tu dire par:

    Elle ne fonctionne plus non plus si le contenu de la table retourne Null.
    Si la table est vide DCount renvoie 0.

    Par contre si tu as 1 critère comme argument de ta fonction DCount, assure toi qu'il n'y a pas d'erreur dans son expression.

    Remarque sur les fonctions domaines:

    Les fonctions de domaine permettent de simplifier le code VBA, par rapport au recordset, et sont utiles dans le cas ou on a besoin de renvoyer qu'une valeur: somme pour 1 champ, valeur max pour un champ, valeur précise d'1 champ.

    Dans ce cas, elles sont généralement assez performantes dans du code VBA.

    Par contre dans les requêtes les fonctions domaines sont généralement moins performantes qu'une sous-requête mais un peu plus simple à écrire.

    D'autre part comme source d'1 contrôle je ne les utilise pas directement et préfère mettre à jour indirectement le contrôle avec du VBA et éventuellement une fonction domaine utilisée dans le code.

    A+

  5. #5
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Bonjour User,

    Merci de ta réponse.

    Si la table est vide DCount renvoie 0
    En fait il m'arrive la chose suivante: si ma table "Temp_Postes_Caff" est vide mon code génère l'erreur suivante

    Erreur d'exécution '380':
    Valeur de propriété non valide.

    J'ais finalement compris que j'affecte 0 à la propriété max de l'objet ce qui est incorrect. Donc je corrige mon code comme ceci:

    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
    ProgressBar.Min = 0 'Valeur mini de la progressbar
        ProgressBar.Max = DCount("*", "Temp_Postes_Caff") 'On compte les enregistrements de la table à effacer
        If ProgressBar.Max = 0 Then
            GoTo lbl1
        Else
            While i <= ProgressBar.Max
                DoCmd.OpenQuery ("R_Raz_Temp")
                DoEvents
                'SysCmd acSysCmdUpdateMeter, i 'Définit le texte à afficher et la valeur actuelle de la jauge.
                ProgressBar.Value = i
                i = i + 1
            Wend
        End If
        ProgressBar.Value = 0
    lbl1:
        'Initialisation de l'affichage en fin de traitement
        ProgressBar.Value = 0
        ProgressBar.Visible = False
        TxtTraitement = ""
    Dernière question, dois remonter l'instruction au dessus de ma boucle while afin de ne pas la répéter?

    Amicalement.

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 383
    Points : 19 805
    Points
    19 805
    Billets dans le blog
    66
    Par défaut
    Salut,

    Dernière question, dois remonter l'instruction au dessus de ma boucle while afin de ne pas la répéter?
    Oui mais dans ce cas tu ne risques pas d'obtenir le résultat escompté :

    La barre de progression, ne va pas progresser durant l'exécution de la requête, mais après il me semble

    A+

  7. #7
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Re,

    La barre de progression, ne va pas progresser durant l'exécution de la requête, mais après il me semble
    Tu viens donc de lever le doute qui me hanté.
    Vois-tu une autre solution afin de faire progresser ma barre durant l'éxecution de ma requête?

    Amicalement.

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 383
    Points : 19 805
    Points
    19 805
    Billets dans le blog
    66
    Par défaut
    Vois-tu une autre solution afin de faire progresser ma barre durant l'éxecution de ma requête?
    Malheureusement je ne connais pas de solution.

    Remplacer la barre de progression par 1 sablier mais ce n'est pas le but

  9. #9
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    Qq remarques :

    - Il me semble que sur les requêtes longues access met tout seul une progressbar

    - j'utilise syscmd pour afficher une progressbar et si j'essaie de remplacer par la commande progressbar j'ai une erreur de compilation "variable non définie" alors qu'access semble connaitre le mot... Faut-il une déclaration préalable ? J'utilise access 2000...

    - plutot que setwarnings false il vaut mieux récupérer l'erreur et la gérer comme dans l'exemple que je donne dans cette file

  10. #10
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Bonjour nico,

    Merci pour tes précisions, je vais tenter de mieux gérer mes erreurs en suivant tes conseils.

    Amicalement.

  11. #11
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Pour conclure ce poste, je pense que la tache est un peu trop hardu pour moi et qu'il n'existe pas vraiment de solution de remplacement à la barre de progression de la barre d'état access (Toujours en ce qui concerne une requête enregistrée).

    Merci à tous ceux qui on consacré de précieuse minutes à ce poste...

    Amicalement

  12. #12
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 20
    Points
    20
    Par défaut peut être une solution
    Je viens de débuter dans le développement vba/access, donc ma parole n'a pas tant de valeur que cela...

    Mais sans trop m'avancer je pourrais dire, si j'ai bien compris le problème, que si tu réalisais plutot une requête qui supprime la première en entrée de ta table plutôt que supprimer tous les éléments de ta table, l'action ferait progresser ta "progressbar" avec la supression des entrées pour être complète lorsque toutes tes entrées sont supprimées.

    non?

Discussions similaires

  1. [XL-2007] Erreur VBA sur requete SQL
    Par guigui69 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/08/2013, 08h44
  2. Erreur VBA sur Clonage enregistrement
    Par egman dans le forum IHM
    Réponses: 8
    Dernier message: 06/10/2010, 10h37
  3. Requete sur plusieurs enregistrements !
    Par Mathelec dans le forum Langage SQL
    Réponses: 14
    Dernier message: 12/03/2006, 14h27
  4. requete via VBA sur different schema oracle
    Par FO dans le forum Access
    Réponses: 3
    Dernier message: 19/01/2006, 15h40
  5. Requete sur un enregistrement
    Par Fooshi dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/01/2006, 14h05

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