Microsoft 365 Ouvrir un fichier Excel rapidement en VBA

  • Initiateur de la discussion Initiateur de la discussion iliess
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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""...
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

Dernière édition:
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
45
M
Réponses
9
Affichages
769
Maikales
M
Retour