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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    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
    Labor omnia vincit improbus (Un travail opiniâtre vient à bout de tout)


    Vous vous posez une question? Quelqu'un se l'est certainement posée avant vous!
    Avant de poster, n'oubliez pas de consulter les FAQ Access et VBA ainsi que les tutoriels.
    Utilisez le champ de recherche sans modération pour fouiller les forums.

  2. #2
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 615
    Billets dans le blog
    67
    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+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

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

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    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?
    Labor omnia vincit improbus (Un travail opiniâtre vient à bout de tout)


    Vous vous posez une question? Quelqu'un se l'est certainement posée avant vous!
    Avant de poster, n'oubliez pas de consulter les FAQ Access et VBA ainsi que les tutoriels.
    Utilisez le champ de recherche sans modération pour fouiller les forums.

  4. #4
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 615
    Billets dans le blog
    67
    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+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

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

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    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.
    Labor omnia vincit improbus (Un travail opiniâtre vient à bout de tout)


    Vous vous posez une question? Quelqu'un se l'est certainement posée avant vous!
    Avant de poster, n'oubliez pas de consulter les FAQ Access et VBA ainsi que les tutoriels.
    Utilisez le champ de recherche sans modération pour fouiller les forums.

  6. #6
    Rédacteur/Modérateur

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 615
    Billets dans le blog
    67
    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+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

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