Résolu Autres ouvrir en vba un fichier CSV qui se trouve dans un fichier .zip

Cobra

XLDnaute Nouveau
Bonjour,

je désir ouvrir un fichier CSV que je reçois sous format ZIP pour en extraire les données que j'ai besoin dans excell 2007.
Actuellement je dois le décompressé dans un autre dossier pour faire fonctionner ma macro. (avec "Application.GetOpenFilename" je peux choisir le fichier mais pas de prendre le CSV du fichier ZIP)
est il possible de décompresser le fichier et l'ouvrir directement ?

en vous remerciant d'avance
Cobra
 
Ce fil a été résolu! Aller à la solution…

patricktoulon

XLDnaute Barbatruc
bonjour
il y a plusieur méthode
la plus simple avec FSO c'est d'explorer le zip comme un dossier
faire des recherches il y a moults exemples sur la toile
 

Cobra

XLDnaute Nouveau
Bonjour Patricktoulon,

merci de ta réponse,
cela fait un petit temps que je cherche sur la toile mais . . . je n'ai rien trouvé de concluant :-(
je ne connais pas FSO, je vais chercher

Bonne après-midi
Cobra
 

patricktoulon

XLDnaute Barbatruc
sinon tiens j'ai retrouvé ca dans mes archives vba6 et adapté pour l'occase

VB:
Sub openZIPCSV()
    Dim FSO As Object, fichier As Variant, dossierTemp As Variant, DefPath As String

    fichier = Application.GetOpenFilename(filefilter:="Zip Files (*.zip), *.zip", MultiSelect:=False)
    If fichier = False Then Exit Sub

    DefPath = Mid(Fname, 1, InStrRev(fichier, "\"))

    'création d'un dossier temporaire au meme endroit
    dossierTemp = DefPath & "dézippé\": MkDir dossierTemp

    'copie des fichiers du zip dans le dossier temporaire créé précédemment
    With CreateObject("Shell.Application"): .Namespace(dossierTemp).CopyHere .Namespace(fichier ).items: End With

    'Si on veut extraire un seul fichier, faire ca ( si le nom est connu bien evidement):
    'oApp.Namespace(dossierTemp).CopyHere oApp.Namespace(fichier ).items.Item("test.txt")

    'MsgBox "les fichiers sont ici " & dossierTemp

    If Dir(dossierTemp & "\*.csv") <> "" Then Workbooks.Open Dir(dossierTemp & "\*.csv"),local:=true ' ouvre le premier fichier du ((dir"*.csv"))

    On Error Resume Next
    With CreateObject("scripting.filesystemobject"): .deletefolder Environ("Temp") & "\Temporary Directory*", True: End With

End Sub
tu peux bien évidemment remplacer open opentext faire un text colone etc....
 
Dernière édition:

Cobra

XLDnaute Nouveau
merci Patricktoulon,

je vais essayer d'adapter cela et je reviens avec le résultat

de mon coté j'ai trouvé ceci sur la toile avec FSo (je n'ai pas encore eu le temps de voir si fonctionne)
 

Fichiers joints

Staple1600

XLDnaute Barbatruc
Re

[Pour information]
Si un Maciste venait à passer par ici, il ne pourra pas utiliser Sub openZIPCSV().
Pourquoi?
Parce qu'entre une pomme et une fenêtre, mieux vaut la fenêtre :)
(en tout cas dans le monde de VBA) ;)
(Et parce que Bill était plus gentil que Steve, à ce qu'il parait)
[/Pour informations]

NB: Ce message étant à caractère informatif, il n'est pas nécessaire d'y répondre.
Et seuls les Macistes auront un intérêt à le lire.
 

Staple1600

XLDnaute Barbatruc
Re

•>patricktoulon
Heureusement que j'avais précisé de ne pas répondre
(voir le NB dans le message#9)
Par la fenêtre, tes lunettes aussi, alors ;)
 

Cobra

XLDnaute Nouveau
j'ai un petit problème, (je suis un peu dépassé)

la macro crée le directory "dézippé" dans le dossier ou se trouve Les zip (il y a un seul fichier CSV par zip) puis vient une fenêtre éerreur d'exécution 75 accès chemin/fichier"
dans la macro
dossierTemp = DefPath & "dézippé\": MkDir dossierTemp
"MkDir dossierTemp" est mit en surbriance
je ne comprends pas puisqu'il la crée lui même (le dossier dézippé est vide)
 

Cobra

XLDnaute Nouveau
re,
désolé,
je viens de recopier le sub en point 5
je ne vois pas la différence, le résultat et toujours le même
il bloque a MkDir dossierTemp
 

Cobra

XLDnaute Nouveau
si j'ai bien compris
Mkdir veut dire qu'il crée le directory "dossierTemp" en virtuel qui lui correspond à "dézippé"
si c'est cela je ne comprends pas pourquoi il bloc là ?
 

patricktoulon

XLDnaute Barbatruc
peut être n'est tu pas en mode administrateur dans ton Windows et celui ne t'autorise pas la création de nouveau dossier
ajoute avant mkdir
msgbox dossierTemp
que dit le message?
 

Cobra

XLDnaute Nouveau
je suis administrateur, c'est mon perso,
la macro avait bien crée le directory dézippé
avec l'ajoute de : msbox dossier Temp avant :mkdir dossiertemp,
il y a eu une fenêtre avec dézippé\ et un bouton ok après ok il a de nouveau bloqué au même endroit
 

patricktoulon

XLDnaute Barbatruc
re
je n'avais pas corrigé toutes les coquille
VB:
Sub openZIPCSV()
    Dim FSO As Object, fichier As Variant, dossierTemp As Variant, DefPath As String

    fichier = Application.GetOpenFilename(filefilter:="Zip Files (*.zip), *.zip", MultiSelect:=False)
    If fichier = False Then Exit Sub

    DefPath = Mid(fichier, 1, InStrRev(fichier, "\"))

    'création d'un dossier temporaire au meme endroit
    dossierTemp = DefPath & "dézippé\": MkDir dossierTemp

    'copie des fichiers du zip dans le dossier temporaire créé précédemment
    With CreateObject("Shell.Application"): .Namespace(dossierTemp).CopyHere .Namespace(fichier ).items: End With

    'Si on veut extraire un seul fichier, faire ca ( si le nom est connu bien evidement):
    'oApp.Namespace(dossierTemp).CopyHere oApp.Namespace(fichier ).items.Item("test.txt")

    'MsgBox "les fichiers sont ici " & dossierTemp

    If Dir(dossierTemp & "\*.csv") <> "" Then Workbooks.Open Dir(dossierTemp & "\*.csv"),local:=true ' ouvre le premier fichier du ((dir"*.csv"))

    On Error Resume Next
    With CreateObject("scripting.filesystemobject"): .deletefolder Environ("Temp") & "\Temporary Directory*", True: End With

End Sub
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas