[VBA] - Temps nécessaire pour l'ouverture d'un gros document .txt

Bonsoir,

J'utilise une macro de ce type pour importer des données depuis un fichier .txt

(Pour info, il s'agit du fichier TAXREF au format .txt que l'on peut télécharger sur le site de l'INPN.) (TAXREFv14)
https://inpn.mnhn.fr/telechargement/referentielEspece/taxref/14.0/menu

Ce fichier fait 630 298 lignes sur 40 colonnes.
Actuellement, l'import se fait en 1 minute 6 secondes. Pensez-vous qu'il soit envisageable d'obtenir une ouverture plus rapide du fichier en travaillant un peu la macro ?

Il faut impérativement se passer de PowerQuery, qui effectivement permettrait d'ouvrir plus rapidement ce fichier, mais qui m'a posé beaucoup trop de souci pour le fonctionnement de mes macros, systématiquement.

Public Sub Import_Data()
Dim wbks As Workbook, wbkc As Workbook, fe$, fich

chk = 0
    Set wbkc = ThisWorkbook: fe = ActiveSheet.Name
    fich = Application.GetOpenFilename("Fichiers Txt,*.txt")
    txnm = fich

    If Not fich = False Then
        Set wbks = Workbooks.Open(fich, local:=1)
        wbkc.Sheets(fe).Cells.Clear
        wbks.ActiveSheet.Cells.Copy wbkc.Sheets(fe).Cells
        wbks.Close 0: Exit Sub
    Else
        MsgBox "Vous n'avez choisi aucun fichier", vbCritical, "Absence de sélection": chk = chk + 1: Exit Sub
    End If
'If Dir(fich) = "" Then MsgBox "Fichier absent" & vbCrLf & fich, vbExclamation: chk = chk + 1: Exit Sub
End Sub

Je vous remercie de votre attention !

Bonne soirée

bonjour,

Au lieu d'ouvrir ton grosdocument.txt avec ta macro, fait un petit travail de préparation :

Ouvre le manuellement puis enregistre le au format .xlsb

Sous ce format le fichier s'ouvre beaucoup plus rapidement chez moi moins de 10"

A+

Bonjour,

L'ouverture du document pour le changer ensuite en .xlsb prend une minute environ.
Ensuite, effectivement, le temps d'ouverture du document est réduit de moitié (30 - 35sec).

En l'occurrence, dans mon cas je ne suis supposé ouvrir ce document .txt qu'une fois pour ensuite, via un UserForm, sélectionner les colonnes et les données dont j'ai besoin pour extraire mes propres bases de données.

L'ouvrir pour le modifier, pour l'ouvrir à nouveau me fera perdre du temps.
En revanche, je vais garder en tête solution car elle risque de m'être très utile pour les sources de données qui je vais devoir ouvrir par la suite (peut-être exporter les bases que je créé en .xlsb ...)

Merci pour cette info !

Bonne journée.

30" me parait vraiment excessif. Sans doute as tu beaucoup de chose en arrière plan qui mobilisent le processeur.

Bref chez moi ça le fais en 8" environ...

A+

Bonjour,

je ne pratique pas vraiment, c'est donc juste une piste de réflexion.

Tu pourrais ouvrir ton fichier sous access pour te créer une base.
Ensuite connecter excel sur cette base *.accdb pour faire tes extractions.

Ou bien travailler entièrement sur access...
eric

Bonjour,
Peux-tu développer ?
<<Il faut impérativement se passer de PowerQuery, qui effectivement permettrait d'ouvrir plus rapidement ce fichier, mais qui m'a posé beaucoup trop de souci pour le fonctionnement de mes macros, systématiquement.>>
Cdlt.

Bonsoir,

Tu pourrais ouvrir ton fichier sous access pour te créer une base.

Ensuite connecter excel sur cette base *.accdb pour faire tes extractions.

Ou bien travailler entièrement sur access...

En effet, je passe par Excel car je ne connais pas Acces, mais aussi parce que j'ai développé un outil qui utilise les infos de différentes petites bdd pour obtenir divers résultats.

pour répondre à la question au sujet de PowerQuery :

J'essais de tout automatiser pour générer des bdd à la demande (nbr de colonnes, types d'infos, etc.). Et sur cet aspect PowerQuery ne permet pas de faire ce que je veux.

Ensuite, ne serait ce que pour l'import, je dois exécuter ".refreshAll" pour relancer la requette. Et là ça ne marche pratiquement jamais car il vient tjr un moment où je supprime les données, ce qui fait qu'Excel ne sait plus où charger les nokuvelles données.

Bonne soirée !

Bonjour,

Peut-être qu'en ouvrant pas le document, cela pourrait mettre un peu moins de temps.

Je vais voir comment faire ça.

Bien évidemment, j'ai suivi un peu ce qui se faisait sur internet, mais j'ai une erreur d'exécution "[Microsoft] [Pilote ODBC Texte] Trop peu de paramètres. 1 attendu.

Sur cette ligne : Rc.Open source:="SELECT * FROM " & fich & _ " WHERE NomChamp = 'x'", ActiveConnection:=cn

Public Sub test()
Dim chemin$, fich$, cn$
Dim Rc As ADODB.Recordset
chemin = Application.GetOpenFilename("Fichiers Txt,*.txt")
If chemin = "Faux" Then MsgBox "Vous n'avez choisi aucun fichier", vbCritical, "Absence de sélection": chk2 = chk2 + 1: Exit Sub

fich = Dir(chemin)
chemin = Replace(chemin, "\" & fich, "") 'Replace(chemin, fich, "")

cn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
        "Dbq=" & chemin & ";Extensions=asc,csv,tab,txt"

Set Rc = New ADODB.Recordset
    Rc.Open source:="SELECT * FROM " & fich & _
        " WHERE NomChamp = 'x'", ActiveConnection:=cn

    'WHERE NomChamp= Eval('Forms.fich'), ActiveConnection:=cn"
    '" WHERE NomChamp = """ & Forms.fich & """, ActiveConnection:=cn

'    If Not Rc.EOF Then
'        For i = 0 To Rc.Fields.Count - 1
'            Cells(1, 1).Offset(0, i) = Rc.Fields(i).Name
'        Next
'        'Range("A2").CopyFromRecordset Rc
'    End If
Rc.Close
End Sub

Vous savez ce qui cause cette erreur ?

Rechercher des sujets similaires à "vba temps necessaire ouverture gros document txt"