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
 
Solution
puré tu lis pas les messages toi c'est pas possible
REGARDE LE POST 22!!!!!!!

et pour le plantage du a l'existence du dossier
on contrôle son existence et suppression si il existe
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é\":
    If Dir(dossierTemp) <> "" Then Kill (dossierTemp)
    MkDir dossierTemp
    'copie des fichiers du zip dans le dossier temporaire...

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
 

Cobra

XLDnaute Nouveau
ok, merci merci pour ta patience,

j'ai un peu bricoler avec les deux,
en utilisant (décompression archive) tu vas y retrouvé des codes à toi
actuellement je bug sur l'ouverture du fichier CSV, le fichier CSV est bien dans le dossier "dézippé"
au niveau de "Workbooks.Open Dir(DossierDestination & "\*.csv")"
le fichier CSV est bien arrivé dans le dossier "dézippé"
Pourrais tu a l'occation y jeter un coup d'œil

merci
 

Pièces jointes

  • ouvrir un zip.xlsm
    16.9 KB · Affichages: 8

patricktoulon

XLDnaute Barbatruc
re
dis moi un peu il n'y a pas quelque chose qui te derange là
'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("C:\Users\Christian\Dropbox\cobra\viapass\2020\dézippé").CopyHere ApplicationArchivage.Namespace(FichierArchive).items
Set ApplicationArchivage = Nothing

'Message final
' MsgBox "La décompression a été lancée.."

If Dir(DossierDestination & "\*.csv") <> "" Then Workbooks.Open Dir(DossierDestination & "\*.csv"), local:=True ' ouvre le premier fichier du ((dir"*.csv"))
On Error Resume Next

LOL ;)
 

Cobra

XLDnaute Nouveau
Bonjour Patricktoulon,

encore merci pour ton aide et ta patience,

Après avoir dormit dessus, j'ai compris pourquoi ta macro begait sur "mkd dossier temps" !
vu que la macro n'avait jamais terminé, le directory était déjà crée !
après avoir effacer le directory "dézipé" elle fonctionne correctement jusque
1585563787305.png

dans le dossier se trouve bien le fichier qui à le bien nom exacte !
je ne comprends pas pourquoi il ne l'ouvre pas
 

patricktoulon

XLDnaute Barbatruc
puré tu lis pas les messages toi c'est pas possible
REGARDE LE POST 22!!!!!!!

et pour le plantage du a l'existence du dossier
on contrôle son existence et suppression si il existe
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é\":
    If Dir(dossierTemp) <> "" Then Kill (dossierTemp)
    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
 
Dernière édition:

datahawk

XLDnaute Nouveau
bonjour , j'ai eu besoin de ce bout de code mais il y'avait des buggs a corriger
version qui fonctionne chez moi



Sub CommandButton1_Click()

Dim FSO As Object, fichier As Variant, dossierTemp, dossiertemp1 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é\":
dossiertemp1 = (dossierTemp) & Dir(dossierTemp)


MsgBox (dossiertemp1)

If Dir(dossierTemp) <> "" Then
' MsgBox (dossierTemp)
Kill (dossiertemp1)
' MsgBox " kill dossiertemp1"
RmDir (dossierTemp)
' MsgBox " rmdir dossiertemp"
End If
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")


If Dir(dossierTemp & "*.csv") <> "" Then
' MsgBox "fichier a ouvrir " & dossiertemp1
dossiertemp1 = (dossierTemp) & Dir(dossierTemp)
Workbooks.Open (dossiertemp1), local:=True ' ouvre le premier fichier du ((dir"*.csv"))
End If

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

End Sub
 

Discussions similaires