Extraction fichier compressé en .rar VBA

Bonjour,

Je veux extraire un fichier compressé en .rar dans un dossier réseau sur mon pc, mais je reçois le message d'erreur suivant :

Erreur d'exécution '91':

Variable objet ou variable With non définie

Sub Extraction

Dim CheminRSx As Variant, CheminPC As Variant, AncienDir As Variant, ApplicationArchivage As Object

AncienDir = CheminRSx & "Cibles_*.rar" ' Dossier qui contient le fichier à extraire

CheminRSx = "\\ms\Installations\Pour_Moi\"

CheminPC = "C:\Moi\Mes documents\Suivi\Extraction\Cibles\" ' Dossier qui va accueillir le fichier décompressé

Set ApplicationArchivage = CreateObject("Shell.Application")
ApplicationArchivage.Namespace(CheminPC).CopyHere ApplicationArchivage.Namespace(AncienDir).items
Set ApplicationArchivage = Nothing

End Sub

Merci par avance pour votre aide.

Bonjour Dev007

Pour moi, l'utilisation de Shell ne se fait que pour dézipper, donc avec une extension ".zip"
En revanche tu dois pouvoir lancer un batch en ligne de commande pour ton fichier

De plus ton code n'est pas correcte puisque "CheminPC" ne contient qu'un chemin sans nom d'archive !?

Voir l'article ICI

@+

Bonjour BrunoM45,

Merci pour ta réponse.

Effectivement j'ai suivi cet exemple de Décompresser le contenu d'un archive Zip avec VBA pour adapter mon code.

Pour moi mon code contient bien le fichier archivé (de départ) et le dossier qui va recevoir le fichier décompressé (d'arrivé).

Départ est : AncienDir = CheminRSx & "Cibles_*.rar" ou autrement : AncienDir = "\\ms\Installations\Pour_Moi\Cibles_.*rar" 'l'archive à décompresser

Puisque : CheminRSx = "\\ms\Installations\Pour_Moi\"

Arrivé est : CheminPC = "C:\Moi\Mes documents\Suivi\Extraction\Cibles\" 'le dossier dans lequel les fichiers seront décompressés

Je l'ai bien adapté selon l'article cité ci-dessus dont la partie principale est :

définition des variables
Dim ApplicationArchivage As Object
Dim FichierArchive As Variant
Dim DossierDestination As Variant

'informations sur l'archive et le dossier pour les fichiers décompressés
    FichierArchive = "C:\Test\MonArchive.zip" 'l'archive à décompresser
    DossierDestination = "C:\Test\Decompresse\" 'le dossier dans lequel les fichiers seront décompressés

'Décompression
Set ApplicationArchivage = CreateObject("Shell.Application")
ApplicationArchivage.Namespace(DossierDestination).CopyHere ApplicationArchivage.Namespace(FichierArchive).items
Set ApplicationArchivage = Nothing

Donc l'adaptation à mon avis est correcte.

Re,

Effectivement, je pense aussi

Donc le problème vient du fait que ce soit un ".rar", as-tu essayé ton code avec un zip ?

@+

Re,

Je n'ai pas la possibilité ni de l'avoir ni de l'installer (restriction sécurité).

Donc j'utilise WinRar seulement.

A noter que pour cet article Archiver/compresser un fichier avec VBA j'ai adapté un autre code et ça marche à merveille pour compresser un dossier avec .rar

@+

Re,

Le ZIP est natif sur Windows, pas besoin d'installer quoique ce soit, il faut juste avoir un fichier ".zip" sous la main, c'est ce que je voulais dire

@+

Re,

Oui j'ai bien testé avec un fichier *.zip archivé sous type : Archive WinRAR ZIP et ça fonctionne.

Mais je n'ai pas la possibilité d'archiver avec WinZip puisque WinRar est par défaut.

Comment faire alors STP?

Re,

Je viens de m'apercevoir que dans ton code initial, la variable "AncienDir" n'était pas bien placé, il faut qu'elle soit après "CheminRsx"

Sinon, tu peux essayer ceci

' Selon la version d'office
#If VBA7 Then
Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias _
       "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
       As String, ByVal lpFile As String, ByVal lpParameters _
       As String, ByVal lpDirectory As String, ByVal nShowCmd _
       As Long) As Long
#Else
Declare Function ShellExecute Lib "shell32.dll" Alias _
       "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
       As String, ByVal lpFile As String, ByVal lpParameters _
       As String, ByVal lpDirectory As String, ByVal nShowCmd _
       As Long) As Long
#End If

Sub TestZip()
  Dim CheminRSx As String, CheminPC As String, AncienDir As String
  CheminRSx = "\\ms\Installations\Pour_Moi\"
  AncienDir = CheminRSx & "Cibles_*.rar"
  CheminPC = "C:\Moi\Mes documents\Suivi\Extraction\Cibles\" ' Dossier qui va accueillir le fichier décompressé
  '
  Zippeur = "C:\Program Files\WinRAR\WinRAR.exe"  ' A modifier selon
  ' Extraire l'archive
  ShellExecute 0, "open", Zippeur, "x " & AncienDir & " " & CheminPC, "", vbHide
End Sub

@+

Re,

J'ai le VBA7. Donc j'ai ajouté la première condition du VBA7.

Je viens de tester mais j'ai une fenêtre avec des messages d'erreur WinRAR : Messages de diagnostique

Il n'arrive pas à ouvrir "C:\Moi\Mes documents\Suivi\Extraction\Cibles\" pour chemin d'accès spécifié est introuvable or c'est correct ou le fichier spécifié est introuvable or le fichier existe.

J'ai même fait un copier/coller des chemins depuis la session Windows.

La dernière ligne d'erreur est : La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte. or le chemin est bien correcte pour départ et arrivé.

Désolé une autre fois pour le dérangement.

Re,

Si je vais sur le site WinRAR
Syntaxe commune de ligne de commande (winrar-france.fr)

Pour décompresser l'archive Info.rar dans le dossier d:\data

WinRAR x Info.rar d:\data\

Donc il faut décompresser les fichier RAR 1 par 1, ce qui donne un truc du style :

Option Explicit

' Selon la version d'office
#If VBA7 Then
Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias _
       "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
       As String, ByVal lpFile As String, ByVal lpParameters _
       As String, ByVal lpDirectory As String, ByVal nShowCmd _
       As Long) As Long
#Else
Declare Function ShellExecute Lib "shell32.dll" Alias _
       "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation _
       As String, ByVal lpFile As String, ByVal lpParameters _
       As String, ByVal lpDirectory As String, ByVal nShowCmd _
       As Long) As Long
#End If

Sub TestZip()
  Dim CheminRSx As String, CheminPC As String, sNomFic As String
  Dim Zippeur As String
  ' Initialisation
  CheminRSx = "\\ms\Installations\Pour_Moi\"
  CheminPC = "C:\Moi\Mes documents\Suivi\Extraction\Cibles\" ' Dossier qui va accueillir le fichier décompressé
  '
  Zippeur = "C:\Program Files\WinRAR\WinRAR.exe"  ' A modifier selon
  ' Récupérer le nom complet du fichier avec extension RAR
  sNomFic = Dir(CheminRSx & "*.rar")
  ' Si non vide
  Do While sNomFic <> ""
    ' On extrait l'archive
    ShellExecute 0, "open", Zippeur, "x " & CheminRSx & sNomFic & " " & CheminPC, "", vbHide
    ' Fichier suivant
    sNomFic = Dir
  Loop
End Sub

@+

Bonjour BrunoM45,

Dsl pour le retard,

J'ai testé mais ça ne fonctionne pas,

Je sais pas si le code doit se refaire ou c'est sûrement moi qui s'est mal exprimé,

De toute façon je laisse tomber ma tête commence à tourner,

Merci beaucoup

Bonjour BrunoM45,

Après avoir pris mon café je viens de tester ce matin,

En premier lieu j'ai bien pu copier le fichier "Fichier.rar" d'un dossier à autre mais pour le décompresser rien ne se passe et je me trouve avec le message "Aucune archive trouvée".

Ce que je cherche est simple, j'ai un fichier .csv compressé sous .rar C:\Moi\Mes documents\Fichier.rar et je veux le décompresser dans le même dossier C:\Moi\Mes documents\Fichier.csv

Dim CheminPC As String, sNomFic As String

CheminPC = "C:\Moi\Mes documents\"

Zippeur = "C:\Program Files (x86)\WinRAR\WinRAR.exe"

sNomFic = Dir(CheminPC & "Fichier.rar")

ShellExecute 0, "open", Zippeur, "x " & sNomFic & " " & CheminPC, "", vbHide

End Sub

Merci par avance pour ton aide

Salut Dev007

Je pense avoir commis une erreur dans mon code initial (corrigé)

Pour l'archive source, il faut le chemin complet avec le nom, ce qui donne donc

ShellExecute 0, "open", Zippeur, "x " & CheminPC & sNomFic & " " & CheminPC, "", vbHide

A tester

@+

ReBonjour,

Toujours mm msg d'erreur "Aucune archive trouvée". Dsl

Re,

Dans ton dossier "C:\Moi\Mes documents\" tu as bien un ou des fichiers ".rar"

Si tu mets un point d'arrêt (F9) sur la ligne

sNomFic = Dir(CheminPC & "Fichier.rar")

Que te donne la valeur de "sNomFic" ?

@+

Re,

Oui j'ai bien mon "Fichier.rar" puisque juste après la ligne : sNomFic = Dir(CheminPC & "Fichier.rar") j'ai ajouté la ligne : MsgBox "Fichier compressé est : " & sNomFic et qui me donne bien la boite de message : Fichier compressé est : Fichier.rar

Re,

Je suis vraiment navré, mais je n'utilise pas "Winrar" donc j'y vais à l'aveugle

En regardant ICI : https://www.winrar-france.fr/aide_winrar/source/html/helpcommands.htm

Je vois qu'on peut utiliser "e" à la place de "x", à tester

@+

Re,

C'est qui est DSl de t'avoir dérangé...

Toujours rien

Re,

J'essaierai de regarder ça chez moi ce soir, tu m'obliges à installer WinRAR

@+

Re,

Merci bien BrunoM45 et désolé encore une autre fois pour cette corvée

@+

Rechercher des sujets similaires à "extraction fichier compresse rar vba"