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

Access Discussion :

Indication d'avancement d'une commande VBA


Sujet :

Access

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut Indication d'avancement d'une commande VBA
    Bonjour,

    J'ai une commande VBA un peu longue, et ce que je voudrais, c'est pouvoir afficher à l'utilisateur quelle est en cours, par exemple par une fenetre avec un sablier ou un compteur.

    Cette indication s'afficherait au début de la commande et s'arreterait à sa fin.

    Connaissez vous une commande de ce type.

    Merci d'avance

    Eddy

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 081
    Points : 24 724
    Points
    24 724
    Par défaut
    Bonjour,

    Techniquement il est impossible de suivre l'avancement d'une commande interne d'ACCESS.

    La seule possiblité est d'avoir une indication du début et de la fin de la commande.

    Pour cela il existe 2 systèmes complémentaires.

    Le sablier
    docmd.hourglass true
    docmd.hourglass false

    et/ou l'ouverture d'un formulaire au debut et la fermeture à la fin.

    Ne pas oublier un doevents juste après l'ouverture du formulaire.

    Cordialement,

  3. #3
    Membre régulier

    Inscrit en
    Août 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 102
    Points : 119
    Points
    119
    Par défaut
    Dans le genre basique mais efficace, tu peux créer un formulaire pop-up sur lequel est écrit un truc du genre "veuillez patienter...": tu ouvres le formulaire au début de ton code et tu le fermes à la fin.
    Pour qqch de plus sophistiqué, recherche :
    "barre de progression" vba
    sur Developpez.com.

  4. #4
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    J'ai intégré ce code trouvé dans la FAQ.


    Seulement, il me renvoie une erreur du type: erreur d'execution 2439 "L'expression comporte une fonction dont le nombre d'arguments n'est pas corrects"

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    Private Sub Commande11_Click()
    SysCmd acSysCmdInitMeter, "Export vers le fichier de traitement en cours. VEUILLEZ PATIENTER...", 100 'Définit le texte à afficher et la valeur maximale de la jauge.
    
    Call Exportation("SYNTHESE_PORT_NAT_HORS_INTRA", "D:\Analyse_Avoirs_(annee_mois_debut)_(annee_mois_fin).xls", "Extraction")
    SysCmd acSysCmdUpdateMeter, "Export vers le fichier de traitement en cours. VEUILLEZ PATIENTER...", 50 'Définit le texte à afficher et la valeur actuelle de la jauge.
    Call Export_AG_EST("Export_Stat_agence_EST", "D:\Analyse_Avoirs_(annee_mois_debut)_(annee_mois_fin).xls", "Référenciel")
    SysCmd acSysCmdRemoveMeter 'Supprime la jauge d'avancement
    
    End Sub
    
    Sub Exportation(requete As String, fichier As String, onglet As String)
    
     Dim xlA As Object, xlW As Object, t As DAO.Recordset
     Dim qdf As DAO.QueryDef
     Dim db As DAO.Database
     Dim i As Integer
     Dim s As String, NumChamp As Long, ligne As Long
     
     Set xlA = CreateObject("excel.application")    'lance Excel
     xlA.Visible = False
     xlA.workbooks.Open (fichier)       'ouvre le fichier
     Set xlW = xlA.activeworkbook
     ligne = 1
     Set db = CurrentDb
     Set qdf = db.QueryDefs(requete)
     For i = 0 To qdf.Parameters.Count - 1
         On Error Resume Next
        qdf.Parameters(i).Value = Eval(qdf.Parameters(i).Name)
        If Err.Number = 2482 Then ' Paramètre non évaluable
            ' Demande la saisie du paramètre dans une inputbox
            qdf.Parameters(i).Value = InputBox(qdf.Parameters(i).Name)
        End If
        On Error GoTo 0
     Next
     Set t = qdf.OpenRecordset    'ouvre la requete
     Do Until t.EOF
       ligne = ligne + 1            'ligne suivante dans la feuille Excel
       For NumChamp = 0 To 10        'pour chaque colonne de la requete
           s = t(NumChamp)       'recupération des données au format Texte
        xlW.Sheets(onglet).cells(ligne, NumChamp + 1) = s 'ecriture dans la cellule
       Next NumChamp
       t.MoveNext                    'enregistrement suivant
      Loop
      t.Close
     Set t = Nothing
     Set qdf = Nothing
     Set db = Nothing
     xlW.Save
     xlA.Quit
     Set xlA = Nothing    ' puis libère la référence.
    
    End Sub
    
    
    Sub Export_AG_EST(requete As String, fichier As String, onglet As String)
    
     Dim xlA As Object, xlW As Object, t As DAO.Recordset
     Dim qdf As DAO.QueryDef
     Dim db As DAO.Database
     Dim i As Integer
     Dim s As String, NumChamp As Long, ligne As Long
     
     Set xlA = CreateObject("excel.application")    'lance Excel
     xlA.Visible = False
     xlA.workbooks.Open (fichier)       'ouvre le fichier
     Set xlW = xlA.activeworkbook
     ligne = 199
     Set db = CurrentDb
     Set qdf = db.QueryDefs(requete)
     For i = 0 To qdf.Parameters.Count - 1
         On Error Resume Next
        qdf.Parameters(i).Value = Eval(qdf.Parameters(i).Name)
        If Err.Number = 2482 Then ' Paramètre non évaluable
            ' Demande la saisie du paramètre dans une inputbox
            qdf.Parameters(i).Value = InputBox(qdf.Parameters(i).Name)
        End If
        On Error GoTo 0
     Next
     Set t = qdf.OpenRecordset    'ouvre la requete
     Do Until t.EOF
       ligne = ligne + 1            'ligne suivante dans la feuille Excel
       For NumChamp = 0 To 1        'pour chaque colonne de la requete
           s = t(NumChamp)       'recupération des données au format Texte
        xlW.Sheets(onglet).cells(ligne, NumChamp + 1) = s 'ecriture dans la cellule
       Next NumChamp
       t.MoveNext                    'enregistrement suivant
      Loop
      t.Close
     Set t = Nothing
     Set qdf = Nothing
     Set db = Nothing
     xlW.Save
     xlA.Quit
     Set xlA = Nothing    ' puis libère la référence.
    
    End Sub
    Pouvez-vous m'aider SVP???

    Merci

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Ok, j'ai trouvé la solution, cela marche très bien.


    J'ai tout simplement enlevé l'argument texte de l'étape intermédiaire.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Commande11_Click()
    SysCmd acSysCmdInitMeter, "Export vers le fichier de traitement en cours. VEUILLEZ PATIENTER...", 100 'Définit le texte à afficher et la valeur maximale de la jauge.
     
    Call Exportation("SYNTHESE_PORT_NAT_HORS_INTRA", "D:\Analyse_Avoirs_(annee_mois_debut)_(annee_mois_fin).xls", "Extraction")
    SysCmd acSysCmdUpdateMeter, 50 'Définit le texte à afficher et la valeur actuelle de la jauge.
    Call Export_AG_EST("Export_Stat_agence_EST", "D:\Analyse_Avoirs_(annee_mois_debut)_(annee_mois_fin).xls", "Référenciel")
    SysCmd acSysCmdRemoveMeter 'Supprime la jauge d'avancement
     
    End Sub
    Merci à tous

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

Discussions similaires

  1. [XL-2013] Comptabiliser deux données textes avec une commande VBA countifs
    Par ju_la dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/04/2015, 19h45
  2. [PPT-2010] Problème avec une commande VBA!
    Par hafkha dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 04/01/2015, 13h30
  3. exécution d'une commande VBA
    Par nidhalkefi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/06/2011, 15h20
  4. [XL-2003] Erreur dans une commande vba
    Par kev159 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/08/2009, 10h57

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