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, wDog66,

Dans le fichier Source.xlsx nommez Tableau la plage que vous voulez récupérer.

Dans le fichier Pilote.xlsm exécutez la macro :
VB:
Sub Copier()
Dim fichier As Variant, form$, nlig&, ncol%
fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx")
If fichier = False Then Exit Sub
form = "'" & fichier & "'!Tableau"
nlig = ExecuteExcel4Macro("ROWS(" & form & ")")
ncol = ExecuteExcel4Macro("COLUMNS(" & form & ")")
Application.ScreenUpdating = False
Cells.Delete 'RAZ
With [A1].Resize(nlig, ncol)
    .FormulaArray = "=" & form 'formule matricielle
    .Value = .Value 'supprime la formule
    .Replace 0, "", xlWhole 'efface les valeurs zéro
End With
End Sub
Le fichier Source est copié sans qu'on l'ouvre.

A+
 

Pièces jointes

  • Pilote.xlsm
    16.8 KB · Affichages: 4
  • Source.xlsx
    9 KB · Affichages: 3

job75

XLDnaute Barbatruc
Si vous ne voulez pas créer le nom Tableau il faut un minimum d'informations :

- le nom de la feuille à copier => "Feuil1"

- le numéro de la ligne des en-têtes => 1

- la nature des valeurs en colonne A ou B (textes ou nombres).

La nouvelle macro :
VB:
Sub Copier()
Dim fichier As Variant, chemin$, feuille$, form$, nlig&, ncol%
fichier = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx")
If fichier = False Then Exit Sub
chemin = Left(fichier, InStrRev(fichier, "\"))
fichier = Mid(fichier, InStrRev(fichier, "\") + 1)
feuille = "Feuil1" 'nom de la feuille à copier
form = "'" & chemin & "[" & fichier & "]" & feuille & "'!"
'nlig = ExecuteExcel4Macro("MATCH(""zzz""," & form & "C1)") 'textes en colonne A
nlig = ExecuteExcel4Macro("MATCH(9^9," & form & "C2)") 'ou nombres en colonne B
ncol = ExecuteExcel4Macro("MATCH(""zzz""," & form & "R1)") 'ligne des en-têtes
Application.ScreenUpdating = False
Cells.Delete 'RAZ
With [A1].Resize(nlig, ncol)
    .FormulaArray = "=" & form & "R1C1:R" & nlig & "C" & ncol 'formule matricielle
    .Value = .Value 'supprime la formule
    .Replace 0, "", xlWhole 'efface les valeurs zéro
End With
End Sub
 

Pièces jointes

  • Pilote.xlsm
    17.6 KB · Affichages: 3
  • Source.xlsx
    9 KB · Affichages: 2

Laurent78

XLDnaute Occasionnel
Bonsoir à Tous,
Petite remarque/complément : la taille des fichiers Excel, depuis Excel 2007, ne veut pas dire grand chose dans la mesure où les données sont compressées (format zip).
Ce qui serait intéressant serait de connaitre la taille du fichier "à plat". Par ailleurs, je ne sais pas si c'est le cas ici, mais certains logiciels exportent au format Excel, mais en fait, il s'agit d'un format texte dont l'extension est xls.
Il pourrait même peut-être être plus performant en exportant du logiciel les données comptable en format texte (csv, etc ...) et faire un test de performance.
Le top serait de fournir ici un fichier anonymisé.
Cdlt
 

Discussions similaires

Statistiques des forums

Discussions
314 723
Messages
2 112 216
Membres
111 466
dernier inscrit
beantheo49