Microsoft 365 Ouvrir un fichier Excel rapidement en VBA

iliess

XLDnaute Occasionnel
Je suis actuellement chargé de la gestion comptable sur un logiciel de comptabilité qui me donne la capacité de générer des états financiers sous forme de fichiers Excel. Cependant, un inconvénient notable est la lenteur d'ouverture de ces rapports.
Est-il possible de réduire le temps d’ouverture du classeur en VBA en important, par exemple, l’intégralité de la feuille 1 sans ouvrir le fichier source pour un traitement personnalisé ?
Cordialement.

1712352797545.png


Est-il possible de joindre mon fichier de démonstration qui fait 12 Mo en taille ?
 
Dernière édition:
Solution
Voici un code ("Power Query") avec un temps de 6,48 secondes.
VB:
sub Macro1()
Dim t
t = Timer
    ActiveWorkbook.Queries.Add Name:="JournalAuxExcel", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Excel.Workbook(File.Contents(""C:\Users\ilies\Desktop\JournalAux.xlsx""), null, true)," & Chr(13) & "" & Chr(10) & "    JournalAuxExcel_Sheet = Source{[Item=""JournalAuxExcel"",Kind=""Sheet""]}[Data]," & Chr(13) & "" & Chr(10) & "    #""Type modifié"" = Table.TransformColumnTypes(JournalAuxExcel_Sheet,{{""Column1"", type any}, {""Column2"", type any}, {""Column3"", type text}, {""Column4"", type" & _
        " text}, {""Column5"", type text}, {""Column6"", type text}, {""Column7"", type text}, {""Column8"", type text}, {""Column9"", type any}, {""Column10""...

job75

XLDnaute Barbatruc
Bonjour iliess, le forum,

A priori Power Query n'est pas nécessaire, ADO suffit.

Merci de tester cette macro sur votre fichier de 207 791 lignes :
VB:
Sub Copier()
Dim fichier As Variant, t, feuille$, plage As Range, cn As Object, rs As Object
fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx")
If fichier = False Then Exit Sub
t = Timer
feuille = "JournalAuxExcel" 'feuille à copier
Set plage = [A1:K210000] 'plage maximum à copier
Set cn = CreateObject("ADODB.Connection")
cn.Open = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fichier & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
Set rs = cn.Execute("SELECT * FROM [$" & plage.Address(0, 0) & "]")
plage.CopyFromRecordset rs
rs.Close
cn.Close
MsgBox "Durée " & Format(Timer - t, "0.00 \sec")
End Sub
Est-ce plus rapide que Power Query ?

A+
 

Pièces jointes

  • Pilote.xlsm
    18.4 KB · Affichages: 3
Dernière édition:

job75

XLDnaute Barbatruc
Chez moi avec la plage A1:K1048576 c'est même un peu plus rapide :
VB:
Sub Copier()
Dim fichier As Variant, t, feuille$, plage As Range, cn As Object, rs As Object
fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx")
If fichier = False Then Exit Sub
t = Timer
feuille = "JournalAuxExcel" 'feuille à copier
Set plage = [A1:K1048576] 'plage maximum à copier
Set cn = CreateObject("ADODB.Connection")
cn.Open = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & fichier & ";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;"""
Set rs = cn.Execute("SELECT * FROM [$" & plage.Address(0, 0) & "]")
plage.CopyFromRecordset rs
rs.Close
cn.Close
MsgBox "Durée " & Format(Timer - t, "0.00 \sec")
End Sub
 

Pièces jointes

  • Pilote.xlsm
    18.4 KB · Affichages: 5

iliess

XLDnaute Occasionnel
Svp monsieur @Cousinhub une dernière question
le nom de l'onglet est différent, et qu'il n'y a qu'un seul onglet. Comment dans cette ligne
VB:
.CommandText = Array("SELECT * FROM [JournalAuxExcel]")
Je change le nom de la feuille. Sachant que c'est toujours la première feuille.
 

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 191
Membres
112 679
dernier inscrit
Yupanki