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 :

Optimisation temps de traitement


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut Optimisation temps de traitement
    Bonjour,

    Je ne suis pas sûr d'être dans la bonne catégorie mais on verra...

    J'ai une base de données dont je souhaite exporter les informations d'une requête vers Excel.

    J'ai essayé deux méthodes:
    La première (DoCmd.TransferSpreadsheet) ne fonctionne pas car le fichier dans lequel je souhaite intégrer les données est au format ".xlsm". Et je n'ai pas trouvé de mode de fonctionnement de la fonction pour ce format.

    La deuxième méthode consiste à copier ligne par ligne les données de ma requête dans la feuille excel.

    J'ai donc rédigé une macro qui fonctionne très bien, seul hic? Mon premier test a été réalisé sur un fichier xlsx en environ 8s. J'ai ensuite testé la même macro sur le même fichier mais en format .xlsm et là j'ai eu le temps de ranger mon appart avant la fin de la macro...

    Quelqu'un peut il me dire où est le problème? Voilà le code:

    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
    Sub Export()
     
    'Ici l'importation se déclenche en cliquant sur le bouton "Commande1"
    'mais on peut aussi mettre ce code à l'ouverture d'un formulaire
    Dim oApp As Excel.Application
    Dim oWkb As Excel.Workbook
    Dim oWSht As Excel.Worksheet
    Dim rs As Recordset
    Dim ColNumDoc As Integer, ColTitreDoc As Integer, ColJalon As Integer, ColPilote As Integer, ColContributeur As Integer
    Dim ColPrevision As Integer, ColReception As Integer,  ColSoumission As Integer
     
     
    'Définition des paramètres de la table et de l'onglet d'import
    StrNomTable = "R_Export"
    StrNomFeuille = "Import MSP"
    StrNomFichier = "C:\Users\...nomfichier"
     
    '''Définition des numéros de colonnes
     
    ColNumDoc = 2
    ColTitreDoc = 1
    ColJalon = 3
    ColPilote = 4
    ColContributeur = 5
    ColSoumission = 8
     
    'Paramétrage des colonnes "Soumissions"
    ColPrevision = 6
    ColReception = 7
     
     
     
    'Définition des applications excel et access
    Set oApp = CreateObject("excel.application")
    Set oWkb = oApp.Workbooks.Open(StrNomFichier) 'mettez ici le chemin vers votre fichier Excel
    Set oWSht = oWkb.Worksheets(StrNomFeuille) 'mettez ici le nom de la feuille qui contient les données à importer
    Set rs = CurrentDb.OpenRecordset("SELECT " & StrNomTable & ".* FROM " & StrNomTable & ";")
     
     
     
    'première ligne ou commence l'import
    i = 2
     
    'pour éviter les messages lors de l'ajout des enregistrements
    'DoCmd.SetWarnings False
     
    'tant qu'on n'est pas arrivés à la ligne 600 du tableur
    Do Until rs.EOF
        'requète SQL (avec en paramètre la ligne i et le numéro de la colonne comme précisé au-dessus)
     
     
     
     
        oWSht.Cells(i, ColNumDoc) = rs("NumDoc")
        oWSht.Cells(i, ColTitreDoc) = rs("TitreDoc")
        oWSht.Cells(i, ColJalon) = rs("Jalon")
        oWSht.Cells(i, ColPilote) = rs("Pilote")
        oWSht.Cells(i, ColContributeur) = rs("Contributeurs")
        oWSht.Cells(i, ColSoumission) = rs("N°Soumission")
     
        'Toutes les dates Soumissions
        oWSht.Cells(i, ColPrevision) = rs("DatePrévisionnelle")
        oWSht.Cells(i, ColReception) = rs("DateRéception")
     
     
        rs.MoveNext
     
     
     
     
    'on incrémente la variable i pour passer à la ligne suivante
    i = i + 1
     
    Loop
     
     
     
    DoCmd.SetWarnings True  'on réactive les messages d'erreurs
    rs.Close
    'oWkb.Close
    oApp.Save
    oApp.Quit
     
    Set rs = Nothing
    Set oWSht = Nothing 'on vide les variables
    Set oWbk = Nothing
    Set oApp = Nothing
     
    End Sub
    Merci d'avance!

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

    cette syntaxe devrait te faire gagner enormement de temps

    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
     
    Sub Export()
     
    'Ici l'importation se déclenche en cliquant sur le bouton "Commande1"
    'mais on peut aussi mettre ce code à l'ouverture d'un formulaire
    Dim oApp As Excel.Application
    Dim oWkb As Excel.Workbook
    Dim oWSht As Excel.Worksheet
    Dim rs As Recordset
    Dim ColNumDoc As Integer, ColTitreDoc As Integer, ColJalon As Integer, ColPilote As Integer, ColContributeur As Integer
    Dim ColPrevision As Integer, ColReception As Integer,  ColSoumission As Integer
     
     
    'Définition des paramètres de la table et de l'onglet d'import
    StrNomTable = "R_Export"
    StrNomFeuille = "Import MSP"
    StrNomFichier = "C:\Users\...nomfichier"
     
     
     
     
    'Définition des applications excel et access
    Set oApp = CreateObject("excel.application")
    Set oWkb = oApp.Workbooks.Open(StrNomFichier) 'mettez ici le chemin vers votre fichier Excel
    Set oWSht = oWkb.Worksheets(StrNomFeuille) 'mettez ici le nom de la feuille qui contient les données à importer
    Set rs = CurrentDb.OpenRecordset("SELECT TitreDoc, NumDoc, Jalon, Pilote, Contributeurs, DatePrévisionnelle, DateRéception, [N°Soumission] FROM " & StrNomTable & ";")
     
        oWSht.Range("A2").CopyFromRecordset rs
     
     
    DoCmd.SetWarnings True  'on réactive les messages d'erreurs
    rs.Close
    oWkb.Save
     
    oApp.Quit
     
    Set rs = Nothing
    Set oWSht = Nothing 'on vide les variables
    Set oWbk = Nothing
    Set oApp = Nothing
     
    End Sub
    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 du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Seulement 15 minutes...

    Si c'est pas de l'efficacité! Merci à toi!

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

Discussions similaires

  1. Optimisation temps de traitement avec pandas (boucle)
    Par meuah dans le forum Général Python
    Réponses: 7
    Dernier message: 27/08/2015, 11h49
  2. Optimiser temps de traitement sur des requêtes simples
    Par yoyo88 dans le forum Langage SQL
    Réponses: 21
    Dernier message: 20/02/2015, 12h35
  3. Optimisation temps de traitement
    Par Alqualonde dans le forum Macro
    Réponses: 11
    Dernier message: 01/08/2012, 16h43
  4. [SQL] Optimisation temps de traitement PROC SQL
    Par amidujour dans le forum SAS Base
    Réponses: 2
    Dernier message: 13/10/2010, 20h16
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 16h08

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