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 :

barre de progression


Sujet :

Macros et VBA Excel

  1. #21
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    @franc, j'aimerais avoir un timer qui me m'indique le temps d'exécution de la macro

    @jurassic pork, ton code me semble un peu compiqué à mettre ne place car mon code vba lance une procédure stockée. Et je ne serais comment m 'y prendre pour inserer "la fonction SQL postgreSQL pg_sleep(10)" dans ma procédure stockée.
    De plus je ne connais pas cette fonctionnalité sur sql server

  2. #22
    Membre expérimenté
    Inscrit en
    Décembre 2002
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 908
    Points : 1 414
    Points
    1 414
    Par défaut
    Salut, voici le timer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Chrono()
     
    Dim timerDebut As Double
    Dim timerFin As Double
     
    timerDebut = Timer
     
    'ici tu appelles la macro à tester ou n'importe quelle portion de code
     
    timerFin = Timer
    MsgBox "Traitement terminé en " & Format(timerFin - timerDebut, "0.000") & " secondes !"
     
    End Sub

  3. #23
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    @Franc ; c'est super ce petit code . Mais ne peut on pas, pendant l'exécution du code, rajouter un message du style "veuillez patientiez" et ensuite afficher ton message box lorsque le code est exécuté.

  4. #24
    Membre expérimenté
    Inscrit en
    Décembre 2002
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 908
    Points : 1 414
    Points
    1 414
    Par défaut
    tu peux mettre le message juste après timerDebut = Timer

  5. #25
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 102
    Points : 9 598
    Points
    9 598
    Par défaut
    Hello,
    Citation Envoyé par facteur Voir le message
    @jurassic pork, ton code me semble un peu compiqué à mettre ne place car mon code vba lance une procédure stockée. Et je ne serais comment m 'y prendre pour inserer "la fonction SQL postgreSQL pg_sleep(10)" dans ma procédure stockée.
    cette fonction n'est pas du tout obligatoire, moi elle me sert à simuler une requête sql qui dure longtemps (10 secondes dans le cas présent) car mon select est trop rapide pour une barre de progression.
    L'équivalent en MS SQL SERVER de pg_sleep(10) est :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WAITFOR DELAY '00:00:10';

    Ami calmant, J.P

  6. #26
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    @Franc, je me rend compte que ce n'est pas un msgbox qui il faut. C'est un message qui s'affiche d l'exécution de la macro. Car pour le Msgbox , je dois appuyer sur OK pour que ma macro continue à s'exécuter.

    @jurassic pork: cette ligne de code WAITFOR DELAY '00:00:10'; permet simplement de lancer le code sql après 10 secondes. Ce que je souhaite c'est voir la progression de l'exécution du code comme dans ta demo

  7. #27
    Membre expérimenté
    Inscrit en
    Décembre 2002
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 908
    Points : 1 414
    Points
    1 414
    Par défaut
    La seule solution que je vois, c'est de créer un userform sur lequel tu poses un label avec le message que tu veux afficher. Ensuite, tu le rends visible avant l'exécution de la macro, et invisible juste après.

  8. #28
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 102
    Points : 9 598
    Points
    9 598
    Par défaut
    Hello,
    n'importe comment si tu veux faire quelque chose en VBA pendant l'exécution de ta requête, il faut lancer la requête en asynchrone ce qui n'est actuellement pas le cas.
    Ami calmant, J.P

  9. #29
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    @Franc , je vais créer un userform et je vais voir si c'est intéressant

    @jurassic pork comment puis je transformer ma requête en requête asynchrone.

  10. #30
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 102
    Points : 9 598
    Points
    9 598
    Par défaut
    Citation Envoyé par facteur Voir le message
    @jurassic pork comment puis je transformer ma requête en requête asynchrone.
    Il faut créer un module de classe. Exemple pour exécuter une procédure stockée dans une base de données postgresql avec un paramètre en appel.
    Module de classe clsAsync :
    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
    Option Explicit
    Private WithEvents conn As ADODB.Connection
    Private Sub conn_ExecuteComplete(ByVal RecordsAffected As Long, _
                                     ByVal pError As ADODB.Error, _
                                     adStatus As ADODB.EventStatusEnum, _
                                     ByVal pCommand As ADODB.Command, _
                                     ByVal pRecordset As ADODB.Recordset, _
                                     ByVal pConnection As ADODB.Connection)
        Dim ws As Worksheet
        Dim iCols As Integer
        StopChrono
        Set ws = Worksheets("Feuil2")
        'MsgBox "Execution completed"
        For iCols = 0 To pRecordset.Fields.Count - 1
            ws.Cells(1, iCols + 1).Value = pRecordset.Fields(iCols).Name
        Next
        ws.Range(ws.Cells(1, 1), _
        ws.Cells(1, pRecordset.Fields.Count)).Font.Bold = True
        ws.Range("A2").CopyFromRecordset pRecordset
     
    End Sub
     
     
    Sub execSPAsync()
    Dim strSQL As String, i As Integer, cm As Object
    Const adOpenStatic = 3, adOpenKeyset = 1, adUseClient = 3
    Const adLockReadOnly = 1, adAsyncExecute = 16, adExecuteNoRecords = 128
    Const adCmdText = 1, adCmdStoredProc = 4
    Set conn = Nothing: Set cm = Nothing
    Set conn = CreateObject("ADODB.Connection")
    Set cm = CreateObject("ADODB.Command")
    Dim sconnect As String
    sconnect = "Driver=PostgreSQL ODBC Driver(ANSI);User ID=test;Password=test;" & _
               "Host=localhost;Port=5432;Database=Northwind;Pooling=true;" & _
               "Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;"
    ' OPEN CONNECTION
    conn.Open sconnect
    With cm
        .ActiveConnection = conn
        .CommandText = "select mystoredproc(5);"
        .CommandTimeout = 0
        .CommandType = adCmdText
    End With
     
     
    ' OPEN RECORDSET
    'conn.Execute strSQL, adExecuteNoRecords, adAsyncExecute
    cm.Execute , , adAsyncExecute
    End Sub
    Appel à partir d'un module standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private clsTest As clsAsync
    Sub AsyncExec()
        Worksheets("Feuil2").Range("A1:S20").ClearContents  
        Set clsTest = New clsAsync
        Call clsTest.execSPAsync
        'StartChrono 10
    End Sub

  11. #31
    Membre actif
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Points : 213
    Points
    213
    Par défaut
    @jurassic pork : merci pour ce code. je vais essayer de l'appliquer à ma macro

Discussions similaires

  1. Indy FTP (idFTP) faire une barre de progress de transfert
    Par Harry dans le forum Web & réseau
    Réponses: 4
    Dernier message: 09/07/2004, 14h15
  2. [VB.NET] Pb avec le bouton Annuler d'1 barre de progression
    Par dada1982 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2004, 10h56
  3. Réponses: 12
    Dernier message: 27/05/2004, 01h13
  4. [DEBUTANT] Barre de progression
    Par pupupu dans le forum MFC
    Réponses: 4
    Dernier message: 18/01/2004, 17h47
  5. [web] Barre de Progression ASCII
    Par Red Bull dans le forum Web
    Réponses: 13
    Dernier message: 05/06/2003, 13h56

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