Erreur 429: un composant activeX ne peut pas créer d'objet
Bonjour,
Je tente de réaliser une macro qui dezippe un dossier et sous-dossier dans un autre dossier, mais j'ai une erreur sur la création d'objet. (J'ai récupérer cette macro sur le forum).
erreur 429: un composant ActiveX ne peut pas créer d'objet
J'ai déjà eu cette erreur par le passé avec une macro qui me permettait de récupérer tout les fichier Excel dans plusieurs sous-dossier d'un dossier (plus précisément sur l'objet FileSystemObject).
En revanche, la je bloque sur la création d'un objet Shell.. J'ai tenté de la contourner de la même manière en créant Shell32.shell mais cela n'a pas fonctionné car Excel ne reconnait pas l'objet..
Toutes propositions de solutions est la bienvenue. Je poste ma macro juste en dessous.
Merci d'avance.
Sub Unzip()
Dim FSO As Object
Dim ShApp As Object
Dim dossier As Object, fichier As Object
Dim répertoire_zip As String, répertoire_unzip As Variant
'// Assignation des répertoires
répertoire_zip = "C:\Users\XXX\Documents\ELM_Qualimetry\test_zip_file.zip"
répertoire_unzip = "C:\Users\XXX\Documents\ELM_Qualimetry\test_unzip_file"
'// Assignation Application Shell et Objet gestion de fichiers
Set ShApp = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
'// Balayage des fichiers .zip se trouvant dans le répertoire et dézippage
Set dossier = FSO.GetFolder(répertoire_zip)
For Each fichier In dossier.Files
If FSO.GetExtensionName(fichier.path) = "zip" Then
ShApp.Namespace(répertoire_unzip).CopyHere ShApp.Namespace(fichier.path).Items
End If
Next
End SubSalut,
1) Sur qu'elle création cela bloque FSO ou ShApp
2) As-tu des références de cochées dans Outils/Références ?
Salut,
Pardon pour le délai.
1 - Le problème se trouve sur ShApp, je ne sais pas pour FSO car le programme plante avant...
J'avais déjà eu ce type de problème justement avec un FileSystemObject sur une boucle de parcours de dossier et sous-dossier, mais je l'avais contourné en déclarant FSO de cette manière :
Dim FSO as FileSystemObject
Set FSO = New FileSystemObject
J'ai essayé une combine un peu pareil pour ShApp mais sans succès. (Shell32.Shell)
2 - Oui, j'en ai 6 de cochées : VBA for Application, Microsoft Excel 16.0 Object Library, OLE Automation, Microsoft Office 16.0 Object Library, Microsoft Forms 2.0 Object Library et Microsoft Scripting Runtime
Salut,
Je rectifie mon message car pas bien tout lu.
Teste en déclarant tes références dans outils/Références,
Et en passant les accents sont à proscrire en VBA
Ok trouvé !
J'ai coché "Microsoft Shell Controls and Automation" dans Outils/Références et j'ai utilisé de l'early binding, plus d'erreur à ce niveau la.
J'ai une erreur de "chemin d'accès introuvable" mais je devrais pouvoir régler ce problème sans trop de soucis.
Merci encore
Le code :
Sub Unzip()
Dim FSO As Scripting.FileSystemObject
Dim ShApp As Shell32.IShellDispatch4
Dim dossier As Object, fichier As Object
Dim repertoire_zip As String, repertoire_unzip As Variant
'// Assignation des répertoires
repertoire_zip = "C:\Users\XXX\Documents\ELM_Qualimetry\test_zip_file.zip"
repertoire_unzip = "C:\Users\XXX\Documents\ELM_Qualimetry\test_unzip_file"
'// Assignation Application Shell et Objet gestion de fichiers
Set ShApp = New Shell32.Shell
Set FSO = New Scripting.FileSystemObject
'// Balayage des fichiers .zip se trouvant dans le répertoire et dézippage
Set dossier = FSO.GetFolder(repertoire_zip)
For Each fichier In dossier.Files
If FSO.GetExtensionName(fichier.path) = "zip" Then
ShApp.Namespace(repertoire_unzip).CopyHere ShApp.Namespace(fichier.path).Items
End If
Next
End Sub