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

Macros et VBA Excel Discussion :

Progress bar en boucle pendant exécution de plusieurs macros


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut Progress bar en boucle pendant exécution de plusieurs macros
    Bonjour,

    J'aimerais afficher un userform avec une progress bar qui tourne en boucle pendant que du code s’exécute en arrière plan.
    J'ai une procédure qui en appelle plusieurs autres. J'aimerais que tous le code roule en background mais je n'y arrive pas.

    J'arrive à afficher le userform, mais il est soit tout blanc, soit il se fige... J'ai l'impression qu'il faudrait que je mette "DoEvents" partout mais c'est démesuré de vouloir faire ça.
    J’espère donc avoir votre aide ou un exemple de fichier qui fait ça.

    Merci d'avance.

    Code du userform de progression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub UserForm_Activate()
        UpdateProgressBar
    End Sub
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
            StopProgressBar
    End Sub
    Code dans un module pour le userform :
    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
     
    Option Explicit
     
    Private dtmDate As Date
    Public Counter As Long
     
    Sub UpdateProgressBar()
        Counter = (Counter + 1)
        If Counter > 100 Then Counter = 0
        UsfChargement.ProgressBar1.Value = Counter
        DoEvents
        dtmDate = Now + TimeSerial(0, 0, 1)
        Application.OnTime dtmDate, "UpdateProgressBar"
    End Sub
     
    Sub StopProgressBar()
        Application.OnTime dtmDate, "UpdateProgressBar", , False
    End Sub
    Un exemple succin de code qui appel le Userform
    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
     
    Sub DeplacerFichier()
    Dim CheminSortie, dossiersource As String
    Dim i, j As Integer
     
     
    Application.DisplayAlerts = False
    'Application.ScreenUpdating = False
     
    UsfChargement.Show False
     
    If PresenceDoublons = True Then
        PeuFermer = True
        UsfChargement.Hide
        MsgBox "Erreur, il existe des aubes en doublons dans le dossier : " & Sheets("Formulaire").Range("B1") & Chr(13) & _
        "Arrêt de la procédure. Veuillez supprimer l'un des deux fichiers", vbCritical, "Erreur"
        Exit Sub
    End If
     
    End Sub
     
    Function PresenceDoublons() As Boolean
    Dim requete As String
    Call ConnexionBase(ThisWorkbook.FullName)
    If SheetExists("Doublons") = True Then
        ThisWorkbook.Sheets("Doublons").Delete
    End If
     
    requete = "Select * From (Select Count(NomFichier) as NmbFichiers, NomFichier, Chemin, DateLastModif From [Indexation$] Where NomFichier " & _
              "In(Select UCase(SN) From [ImportPirat$]) Group By NomFichier, Chemin, DateLastModif) Where NmbFichiers>1"
    Rst.Open requete, Cn, adOpenStatic
    If Rst.RecordCount > 0 Then
        ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)).Name = "Doublons"
        With ThisWorkbook.Sheets("Doublons")
            .Range("A1") = "Nmb Doublons"
            .Range("B1") = "Fichier"
            .Range("C1") = "Chemin fichier"
            .Range("D1") = "Date Derniere Modif"
            .Range("A2").CopyFromRecordset Rst
        End With
        PresenceDoublons = True
    Else
        PresenceDoublons = False
    End If
    Call DeconnexionBase
    End Function

  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 595
    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 595
    Points : 34 268
    Points
    34 268
    Par défaut
    Salut,

    regarde l'approche de cette progressbar Pacman
    http://www.developpez.net/forums/d15...ss-bar-pacman/
    ou la solution proposee ici
    http://www.developpez.net/forums/d16...e-progression/
    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
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Merci,
    La deuxième solution n'est pas adaptée, puisqu'il s'agit de faire avancer la progress bar en fonction d'un nombre x de lignes ou de données (dans une boucle).
    J'ai déjà fait des progress bar de ce type, je n'ai jamais eu de problème car on change le statut, puis on lance le code, puis on rechange le statut de la barre, et on lance le code etc etc...

    Mon besoin est d'avoir une boucle qui tourne toute seule afin de modifier le statut de la barre automatiquement afin que la barre reparte à 0 si elle est à 100%, et en même temps, d'exécuter du code en arrière plan.

  4. #4
    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 595
    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 595
    Points : 34 268
    Points
    34 268
    Par défaut
    Oui je comprends bien,
    tu peux tres bien utilise une notion de difference de Now() pour incrementer, avec retour a 0 lorsque tu arrives a 100% par exemple.
    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

  5. #5
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Citation Envoyé par Jean-Philippe André Voir le message
    Oui je comprends bien,
    tu peux tres bien utilise une notion de difference de Now() pour incrementer, avec retour a 0 lorsque tu arrives a 100% par exemple.
    Merci, mais si tu regardes mon code, tu verras que c'est ce que j'essaie de faire.
    Mais soit mon formulaire se bloque en affichage, et la barre ne progresse pas, soit la macro se bloque sur le formulaire et le code ne se déroule pas... J'ai essayé différents trucs, et je n'arrive à rien ça fait longtemp que j'essaie de faire ça, mais je n'y suis jamais arrivé.

  6. #6
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    J'arrive à faire fonctionner mon userform tout seul. Si je l'affiche seul, la barre défile comme je le souhaite.

    Mais si je veux exécuter du code, alors ça plante tout.

  7. #7
    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 595
    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 595
    Points : 34 268
    Points
    34 268
    Par défaut
    Ton code semble marcher tres bien, manque juste le
    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

  8. #8
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    A quel endroit faut-il que je le place STP?

  9. #9
    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 595
    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 595
    Points : 34 268
    Points
    34 268
    Par défaut
    je l'ai place en dessous de ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UsfChargement.ProgressBar1.Value = Counter
    mais d'autes experts en progressbar pourront t'apporter leur avis egalement.
    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

  10. #10
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    J'en ai marre de rien comprendre avec cette progressbar.
    Le Repaint n'y change rien...

    Ça me soul bon sang, ça fait des mois voir des années que je contourne ce problème car je n'arrive jamais à faire marcher cette fichue barre en mode "boucle infinie".

    En bidouillant je peux :
    • Soit afficher le userform avec la barre qui défile, MAIS le code ne s’exécute pas
    • Soit Faire exécuter le code, mais le userform plante et il est tout gris, et je ne vois pas la barre...



Discussions similaires

  1. [XL-2010] Appel d'exécution de plusieurs macros non fonctionnel
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/06/2015, 15h34
  2. [XL-2010] Bloquage de la feuille de calcul pendant exécution de la macro
    Par Tiblar92 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/04/2014, 13h30
  3. Progress bar en boucle
    Par R3d0x dans le forum C++/CLI
    Réponses: 5
    Dernier message: 14/05/2013, 04h22
  4. Réponses: 2
    Dernier message: 21/01/2013, 11h32
  5. ça rentre pas dans la boucle pendant l'exécution
    Par djouahra.karim1 dans le forum Bases de données
    Réponses: 9
    Dernier message: 15/01/2005, 15h41

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