IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Lire un fichier .bz2 en VBA


Sujet :

VBA

  1. #1
    Membre confirmé Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Par défaut Lire un fichier .bz2 en VBA
    Bonjour à tous,
    Je suis sous WIndows 10, avec Excel 2013 et j'ai besoin de lire plusieurs fichiers dont deux sous compressés au format .bz2 dans une application en VBA.
    Actuellement, je suis obligé de demander aux utilisateurs de décompresser ces fichiers pour pouvoir ensuite les traiter.

    J'aimerais savoir s'il existe un moyen d'ouvrir directement ces fichiers .bz2 pour récupérer le fichier qui y est contenu et qui est lui en format texte donc lisible. Et si ce moyen existe, pourriez-vous me donner les explications nécessaires (via un exemple ou du code par exemple).

    Si quelqu'un pouvait m'aider, cela me permettrait d'offrir une utilisation bien plus "pro" de l'outil que je suis amené à developper.

    Cordialement,

    Jean-Luc

  2. #2
    Membre confirmé Avatar de jlvalentin
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 133
    Par défaut
    J'ai essayé le code suivant, trouvé après de longues recherches.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub Ouverture_bz2()
    'définition des variables
        Dim FSO As Object
        Dim ApplicationArchivage As Object
        Dim FichierArchive As Variant
        Dim DossierDestination As String
     
    'informations sur l'archive et le dossier pour les fichiers décompressés
        FichierArchive = "C:\Temp\ENVIRON_20170926_084504.zip" 'l'archive à décompresser
        DossierDestination = "C:\Temp\Data\" 'le dossier dans lequel les fichiers seront décompressés
        
    'vérification du format du chemin du dossier de destination
        If Right(DossierDestination, 1) <> "\" Then DossierDestination = DossierDestination & "\"
     
    'Décompression
        Set ApplicationArchivage = CreateObject("Shell.Application")
        ApplicationArchivage.Namespace(DossierDestination).CopyHere ApplicationArchivage.Namespace(FichierArchive).items
        Set ApplicationArchivage = Nothing
        
    'Message final
        MsgBox "L'archive a été décompressé..."
    End Sub
    Mais ca plante sur la ligne en rouge (Run-time error '91' : Object variable or With block variable not set)...
    Je suppose qu'il faut rajouter une référence mais laquelle ???
    Une idée ?

  3. #3
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 130
    Par défaut
    Salut, via l'installation de 7Zip, puis la solution VBA explications et code, qui adaptée vite fait au contexte fonctionne ici en 2 passes.
    Images attachées Images attachées  

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 130
    Par défaut
    Re,
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    serait il possible d'avoir une fichier exemple .bz2 je voudrais tester quelque chose
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 430
    Par défaut
    Bonjour à tous.

    Je viens de récupérer tous les départements du Cadastre, j'ai donc des répertoires pour chaque département avec en sous répertoire les communes, qui contient plusieurs fichiers .bz2.

    J'ai tenté ce code mais aucune décompression ne se fait.

    Quelqu'un a réussi à faire fonctionner ce code ?

    J'ai écris ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        LignXls = 1: ColXls = 1
        Do While ActiveSheet.Cells(LignXls, 1).Value <> ""
            nf = Dir(ActiveSheet.Cells(LignXls, 1).Value & "\" & "*.*")    ' premier
            n = 0
            Do While nf <> ""
                Chemin = ActiveSheet.Cells(LignXls, ColXls).Value & "\"    '& nf
                Fichier = ActiveSheet.Cells(LignXls, ColXls).Value & "\" & nf
     
               ShellStr = ThisWorkbook.Path & "\" & "7z.exe" & " e " & Fichier
                Call Shell(ShellStr, vbHide)
                nf = Dir
            Loop
            LignXls = LignXls + 1
        Loop
    Sachant que mon fixhier Excel est construit comme ça :
    .....
    A6-> C:\Cadastre_Test\CC\dep15\15046
    A7-> C:\Cadastre_Test\CC\dep15\15090
    A8-> C:\Cadastre_Test\CC\dep15\15133
    A9->C:\Cadastre_Test\CC\dep15\15176
    ....

  7. #7
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 430
    Par défaut
    Re.

    J'ai trouvé, mais je n'ai pas tout compris...

    Voici le code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
        LignXls = 1: ColXls = 1
        Do While ActiveSheet.Cells(LignXls, 1).Value <> ""
            Nf = Dir(ActiveSheet.Cells(LignXls, 1).Value & "\" & "*.bz2")    ' premier
            n = 0
            Do While Nf <> ""
                Chemin = ActiveSheet.Cells(LignXls, ColXls).Value & "\"    '& nf
                Fichier = ActiveSheet.Cells(LignXls, ColXls).Value & "\" & Nf
                FichierBz2 = Left(Fichier, Len(Fichier) - 3) & "bz2"
                FichierTar = Left(Fichier, Len(Fichier) - 4)
     
                ShellStr = ThisWorkbook.Path & "\7z" & " x " & FichierBz2 '& Chr(34) & " -o" ' & Chr(34) ' & Chemin & Chr(34)' & " " & "*.*"
                RetVal = Shell(ShellStr, 4)
                ShellStr = ThisWorkbook.Path & "\7z" & " x " & FichierTar '& Chr(34) & " -o" ' & Chr(34) ' & Chemin & Chr(34)' & " " & "*.*"
                RetVal = Shell(ShellStr, 4)
                Nf = Dir
            Loop
            LignXls = LignXls + 1
        Loop
    Mais un problème subsiste... 7zip me demande confirmation à chaque remplacement de fichier, et je n'ai pas trouvé comment le faire automatiquement...

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    Par défaut
    Salut,

    s'il s'agit d'un problème lors du remplacement, c'est que le fichier destination existe déjà, uassi il te suffit de faire un test d'existence et de le détruire le cas échéant

    Tu peux passer par Dir() et Kill
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Membre éclairé Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 430
    Par défaut
    Salut Jean-Philippe, et merci pour cette réponse.

    C'est bien ça...

    J'ai opté pour l'écrasement du fichier s'il existe avec "-r" dans la ligne de commande de la décompression... Et ça fonctionne nickel...

    Encore merci...

Discussions similaires

  1. [AC-2010] Est-il possible de lire un fichier afp via VBA?
    Par informer dans le forum VBA Access
    Réponses: 4
    Dernier message: 09/03/2017, 14h30
  2. Lire un fichier PDF avec VBA
    Par machipot dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/08/2016, 15h47
  3. Lire un fichier WAV en VBA
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/11/2012, 13h11
  4. [VBA] comment lire un fichier Excel en VBA
    Par mdmdmd dans le forum SDK
    Réponses: 1
    Dernier message: 17/07/2007, 16h19
  5. Lire un fichier XML avec VBA
    Par Mouse dans le forum Général VBA
    Réponses: 1
    Dernier message: 15/06/2006, 19h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo