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 d'un export excel


Sujet :

VBA Access

  1. #1
    Membre habitué
    Homme Profil pro
    Ingé. Qualité Sécurité Environnement
    Inscrit en
    Juillet 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingé. Qualité Sécurité Environnement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 135
    Points : 127
    Points
    127
    Par défaut Optimisation d'un export excel
    Bonjour a toutes et a tous
    J'ai un petit module qui me genere un nouvel excel et qui nourrit 3 onglets avec des exports de requetes. Tout fonctionne bien sauf ce que ça demande beaucoup de ressource (j'ai pas une grosse bete mais ca lui demande 2h30 ... ) Je vous propose mon code ci dessous

    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
      Dim db As DAO.Database, rs As DAO.Recordset
      Dim i As Integer, j As Integer
      Dim depart As Double
      Dim departdate As String
     
        Dim sEmplacementInitial As String, sEmplacementFinal As String
      ' Mémoriser l'instant de démarrage pour mesurer la durée du traitement
      depart = Now()
    departdate = Format(depart, "dd-mm-yyyy")
     
      'Cree une copie de extraction CHSCT
    sEmplacementInitial = CurrentProject.Path & "\Extraction SMPR.xlsx"
    sEmplacementFinal = CurrentProject.Path & "\Extractions\Extraction CHSCT.xlsx"
     
     ' Copie du fichier
    FileCopy sEmplacementInitial, sEmplacementFinal
    Name sEmplacementFinal As CurrentProject.Path & "\Extractions\SMPR " & departdate & ".xlsx"
     
     
     
      ' Accéder à la feuille
      Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open(CurrentProject.Path & "\Extractions\SMPR " & departdate & ".xlsx")
      xlApp.Worksheets("QR3 FRONTAL 2").Visible = True
     
      xlApp.Sheets("QR3 FRONTAL 2").Select
      xlApp.ActiveSheet.Range("A2:H10000").Value = ""  'pour réinitialiser la plage
      Set db = CurrentDb
      ' Créer un jeu d'enregistrements avec la table tAExporter
      Set rs = db.OpenRecordset("QR3-Frontal-2")
      ' Copier chaque enregistrement cellule par cellule
      i = 2
      Do Until rs.EOF
        For j = 0 To rs.Fields.Count - 1
            If j < 26 Then
        xlApp.ActiveSheet.Range(Chr(65 + j) & i) = rs(j)
            Else
        xlApp.ActiveSheet.Range("A" & Chr(39 + j) & i) = rs(j)
            End If
        Next j
        i = i + 1
        rs.MoveNext
      Loop
    xlApp.Worksheets("QR3 FRONTAL 2").Visible = False
     
     
      xlApp.Worksheets("DATE - MOIS").Visible = True
      xlApp.Sheets("DATE - MOIS").Select
      xlApp.ActiveSheet.Range("B1") = Me.Texte46
      xlApp.ActiveSheet.Range("B2") = Me.Texte48
      xlApp.Worksheets("DATE - MOIS").Visible = False
     
     
      xlApp.Worksheets("QR7 B3").Visible = True
     
      xlApp.Sheets("QR7 B3").Select
      xlApp.ActiveSheet.Range("A2:H1000").Value = ""  'pour réinitialiser la plage
      Set db = CurrentDb
      ' Créer un jeu d'enregistrements avec la table tAExporter
      Set rs = db.OpenRecordset("QR7-B3")
      ' Copier chaque enregistrement cellule par cellule
      i = 2
      Do Until rs.EOF
        For j = 0 To rs.Fields.Count - 1
            If j < 26 Then
        xlApp.ActiveSheet.Range(Chr(65 + j) & i) = rs(j)
            Else
        xlApp.ActiveSheet.Range("A" & Chr(39 + j) & i) = rs(j)
            End If
        Next j
        i = i + 1
        rs.MoveNext
      Loop
    xlApp.Worksheets("QR7 B3").Visible = False
     
     
      ' Code de fermeture
      xlApp.DisplayAlerts = False 'pour éviter la demande compatibilité
      xlBook.Close (True)
      xlApp.DisplayAlerts = True
      xlApp.Quit
      Set xlSheet = Nothing
      Set xlBook = Nothing
      Set xlApp = Nothing
      rs.Close
      Set rs = Nothing
      Set db = Nothing
      'Message de bonne arrivée
      MsgBox "Durée d'exécution : " & Now() - depart
    End Sub

    Auriez vous une idee de comment procéder pour réduire cet export dans un temps raisonnable ?

    Vous remerciant d'avance

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Novembre 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 904
    Points : 1 229
    Points
    1 229
    Par défaut
    Bonjour

    A première vue, je pense que ce sont les 2 remplissages cellule par cellule qui prennent du temps.
    Il serait intéressant, pour un, que tu en mesures le temps d’exécution.

    Il faudrait utiliser une action plus globale, comme avec TransferSpreadsheet par exemple. (c'est ce que je privilégie pour mes exports Excel)
    Regarde ce qui est possible dans ton cas.

    Titi95
    Un problème bien posé est à moitié résolu

  3. #3
    Membre habitué
    Homme Profil pro
    Ingé. Qualité Sécurité Environnement
    Inscrit en
    Juillet 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingé. Qualité Sécurité Environnement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 135
    Points : 127
    Points
    127
    Par défaut
    Je sais que cet export case à case ralenti l'execution (c'etait le moment pour faire un export "controlé" sans toucher à la mise en forme ou au format de la case qui receptionne)
    je vais regarder du coté d'un transfertspreadsheet
    Merci

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonjour,
    tu peux essayer la méthode CopyFromRecordSet : https://msdn.microsoft.com/fr-fr/vba...t-method-excel
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

Discussions similaires

  1. Optimisation de l'exportation Excel
    Par Dullbrain dans le forum VB.NET
    Réponses: 15
    Dernier message: 18/06/2012, 22h39
  2. Optimiser export Excel
    Par karin.kr1 dans le forum VB.NET
    Réponses: 3
    Dernier message: 30/07/2009, 11h18
  3. [CR] export Excel (plusieurs feuilles)
    Par kaiserben dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 21/11/2005, 15h03
  4. Réponses: 5
    Dernier message: 29/09/2005, 13h55
  5. Export Excel
    Par jfn dans le forum Access
    Réponses: 5
    Dernier message: 15/11/2004, 01h55

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