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

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

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