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 :

Formulaire d'attente (progressbar) et export excel [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 20
    Points
    20
    Par défaut Formulaire d'attente (progressbar) et export excel
    Bonjour,

    j'ai dans un de mes formulaires un bouton qui permet d'exporter le résultat d'une recherche vers Excel.
    Jusqu'ici tout va bien, sauf que sur certaines recherches, le traitement est relativement long, et étant donné qu'access ne répond plus pendant ce traitement, j'aimerais afficher un formulaire avec une barre de progression afin que l'utilisateur ne croie pas que le programme a planté.

    J'ai donc tout naturellement atterri sur ce très bon tutoriel :Créez un formulaire d'attente pour les longs traitements

    Sauf qu'en petit débutant que je suis, j'ai certes réussi à recréer le formulaire d'attente dans le cadre de l'exemple donné, mais quand il s'agit de l'appliquer à ma situation, c'est une autre paire de manches!

    Je crois comprendre a peu près la signification des différentes parties du code, mais si tel est le cas, j'en déduis que tout dépend du nombre d'itérations mais je ne sais absolument pas comment connaître ce nombre pour ma procédure (ni si cela s'applique)...

    En clair, j'aimerais savoir si le tutoriel d'Arkham peut s'appliquer à ma procédure d'export et si oui comment?

    Des questions dans ce genre ont été posées dans les commentaires du tutoriel, mais sans réponse à priori..


    N'hésitez pas à me demander si vous voulez que j'éclaircisse un peu ma demande.

    Merci d'avance pour votre aide et vos conseils!

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Petite précision: en fait, ce n'est qu'une petite partie du code d'export qui prend du temps, donc je suppose que je peux appliquer la progressbar uniquement à cette portion (si c'est plus simple).

    L'export excel se déroule comme suit: access crée un fichier excel dans lequel il transfère le résultat d'une requête temporaire. J'ai récupéré ce code sur un forum anglophone et l'ai adapté à ma cause, mais n'ayant pas pu l'adapter exactement comme je le souhaitais, j'ai un peu contourné les problèmes auxquels j'étais confronté (de manière assez peu conventionnelle je pense).

    L'un des contournements implique de créer un deuxieme onglet sur le fichier excel, et dans les cellules (A1, B1, etc.) j'applique par colonne des formules qui vont récupérer les données stockées initialement dans le premier onglet, afin de formater le résultat final comme je l'entends (concaténation, etc..). Et après je souhaite mettre le résultat sous forme de tableau, mais étant donné que le nombre de ligne est variable, j'ai appliqué le principe du "qui peut le plus peut le moins" et dans ma colonne B la formule fait en sorte que lorsque je "déborde" du nombre de lignes initial, les cellules prennent la valeur "deleteit".

    Ensuite j'inscris ce code qui supprime toutes les lignes comprenant "deleteit" afin de pourvoir créer un tableau qui se termine bien au dernier enregistrement effectif:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim i As Long
     
        For i = Range("B30000").End(xlUp).Row To 1 Step -1
            If appExcel.Cells(i, 2) Like "deleteit" Then
                appExcel.Rows(i).EntireRow.Delete
            End If
        Next
    C'est ce code qui prend du temps, et auquel j'aimerais appliquer un formulaire d'attente.


    En espérant que c'est plus clair (je suis parfois un peu brouillon dans mes explications).

    merci encore

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Vous avez votre boucle For, donc il faudrait y intégrer le rafraichissement du formulaire d'attente avec quelque chose du genre :

    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
    Dim i As Long
     
        For i = Range("B30000").End(xlUp).Row To 1 Step -1
    'Partie à adapter selon votre code
        If i Mod 500 = 0 Then
            ' Calcul du pourcentage d'avancement
            lPercent = i / 30000
            ' Met à jour l'étiquette d'avancement
            Forms("FormAttente").lblProgress.Caption = "Traitement en cours ... " & Format(lPercent, "00%")
            ' Met à jour la barre de progression
            Forms("FormAttente").lblProgressBar.Width = Forms("FormAttente").lblProgressBack.Width * lPercent
            ' Repeint le formulaire
            Forms("FormAttente").Repaint
        End If
    
            If appExcel.Cells(i, 2) Like "deleteit" Then
                appExcel.Rows(i).EntireRow.Delete
            End If
        Next
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup pour votre réponse, ça marche! ... mais à l'envers

    C'est peut être moi qui ait mal appliqué, mais le pourcentage commence à 40% et évolue en dégressif, tout comme la barre de chargement!

    Je suppose que c'est dû au fait que mon code traite les lignes excel de bas en haut?

    Je vais voir si je peux corriger ça avec des valeurs négatives...

    Et comment ça se fait que ça démarre à 40%?

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    C'est pas pour rien que j'ai indiqué "à adapter"
    Pour inverser, il faudrait introduire un nouvel index j = 0 à 30000 et qui va s'incrémenter pendant le FOR et faire le pourcentage par rapport à cela.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    Au final j'ai juste modifié la formule du lPercent:

    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
     For i = Range("B30000").End(xlUp).Row To 1 Step -1
        If i Mod 500 = 0 Then
            ' Calcul du pourcentage d'avancement
            lPercent = -((i / 30000) - 1)
            ' Met à jour l'étiquette d'avancement
            Forms("FormAttente").lblProgress.Caption = "Traitement en cours ... " & Format(lPercent, "00%")
            ' Met à jour la barre de progression
            Forms("FormAttente").lblProgressBar.Width = Forms("FormAttente").lblProgressBack.Width * lPercent
            ' Repeint le formulaire
            Forms("FormAttente").Repaint
        End If
            If appExcel.Cells(i, 2) Like "deleteit" Then
                appExcel.Rows(i).EntireRow.Delete
            End If
        Next
    Par contre je ne comprends toujours pas pourquoi ça commence à 60% (maintenant)....

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Mettez un Debug.Print sur les valeurs de i mod 500.
    Peut-être que les valeurs du Range ne commencent pas là où vous le pensez.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 34
    Points : 20
    Points
    20
    Par défaut
    En effet le range n'était pas le même, et j'ai réussi à faire fonctionner la progressbar correctement!

    Sauf qu'au final j'ai trouvé un moyen d'optimiser le temps et de ne pas avoir recours à cette technique de suppression de lignes, et l'export ne dure plus qu'une petite seconde, donc plus besoin de progressbar

    Dommage je la trouvais bien, je vais peut être laisser fictivement le chargement long pour la garder héhé

    Merci en tout cas pour votre aide!!

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,
    La discussion est résolue, mais, si besoin, il existe ce tuto d'arkham46
    L'informatique fait gagner beaucoup de temps. A condition d'en avoir beaucoup devant soi !!!

  10. #10
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Salut Paidge,

    Merci pour l'indication, et effectivement nous et robin148 sommes partis du tuto depuis le début (Cf 1er message)

    Bonne continuation à tous.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

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

Discussions similaires

  1. [AC-2007] Export Excel d'un sous formulaire feuille de données avec filtres
    Par lio33 dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/01/2012, 10h24
  2. [AC-2003] Lancer mon formulaire d'attente (ProgressBar) dans un thread
    Par dut-dut dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/09/2011, 13h31
  3. Exportation excel d'un sous formulaire
    Par obel38 dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/07/2010, 15h13
  4. Réponses: 1
    Dernier message: 23/01/2009, 09h59
  5. Probleme avec le formulaire de recherche (export excel)
    Par Legarraudien dans le forum IHM
    Réponses: 3
    Dernier message: 04/07/2008, 12h47

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