Import VBA

14 réponses
Avatar
Brat'ac
Bonjour,
Je n'arrive pas Í  comprendre pourquoi je me ramasse un - Impossible de
charger le fichier "nom du fichier" -
alors que si je regarde les fichiers passer avec une Msgbox je les vois
bien

Sub Import_VBA()

Chemin = "C:\Users\Michel\Desktop\macro_vba\"
Fichier = Dir(Chemin)

Do While Fichier <> ""
Fichier = Dir
'MsgBox Fichier
Application.VBE.ActiveVBProject.VBComponents.Import (Fichier)
Loop
End Sub

Merci

10 réponses

1 2
Avatar
Geo
De Brat'ac, le 29/01/2022 :
Bonjour,
Je n'arrive pas Í  comprendre pourquoi je me ramasse un - Impossible de
charger le fichier "nom du fichier" -

Problème probablement lié au contenu du fichier Í  importer.
Avatar
Brat'ac
Geo a émis l'idée suivante :
De Brat'ac, le 29/01/2022 :
Bonjour,
Je n'arrive pas Í  comprendre pourquoi je me ramasse un - Impossible de
charger le fichier "nom du fichier" -

Problème probablement lié au contenu du fichier Í  importer.

Non, puisque si je les importe un Í  un comme cela c'est bon
Chemin = "C:UsersMichelDesktopmacro_vba"
Application.VBE.ActiveVBProject.VBComponents.Import (Chemin &
"Module1.bas")
Avatar
db
Le 29/01/2022 Í  09:13, Brat'ac a écrit :
Bonjour,
Je n'arrive pas Í  comprendre pourquoi je me ramasse un - Impossible

de charger le fichier "nom du fichier" -
alors que si je regarde les fichiers passer avec une Msgbox je les

vois bien
Sub Import_VBA()
Chemin = "C:UsersMichelDesktopmacro_vba"
Fichier = Dir(Chemin)
Do While Fichier <> ""
Fichier = Dir
'MsgBox Fichier
Application.VBE.ActiveVBProject.VBComponents.Import (Fichier)
Loop
End Sub

Peut-être en respectant le fonctionnement du do while :
Fichier = Dir(Chemin)
Do While Fichier <> ""
'MsgBox Fichier
Application.VBE.ActiveVBProject.VBComponents.Import (Fichier)
Fichier = Dir
Loop
db
Avatar
Brat'ac
db avait écrit le 29/01/2022 :
Le 29/01/2022 Í  09:13, Brat'ac a écrit :
Bonjour,
Je n'arrive pas Í  comprendre pourquoi je me ramasse un - Impossible
de charger le fichier "nom du fichier" -
alors que si je regarde les fichiers passer avec une Msgbox je les
vois bien
Sub Import_VBA()
Chemin = "C:UsersMichelDesktopmacro_vba"
Fichier = Dir(Chemin)
Do While Fichier <> ""
Fichier = Dir
'MsgBox Fichier
Application.VBE.ActiveVBProject.VBComponents.Import (Fichier)
Loop
End Sub

Peut-être en respectant le fonctionnement du do while :
Fichier = Dir(Chemin)
Do While Fichier <> ""
'MsgBox Fichier
Application.VBE.ActiveVBProject.VBComponents.Import (Fichier)
Fichier = Dir
Loop
db

DéjÍ  essayé et lÍ  je me ramasse "fichier introuvable"
Avatar
MichD
Le 29/01/22 Í  12:15, Brat'ac a écrit :
Application.VBE.ActiveVBProject.VBComponents.Import (Chemin & "Module1.bas")

Dans une fenêtre VBA, tu as des modules standards, des modules de
classe, des formulaires.
Chaque type de module a son extension de fichier.
A ) Module standard : .bas
B )
Module de classeur qui comprend tous les modules des feuilles de calcul,
le Thisworkbook ou les modules de classeur que l'on peut ajouter : .Cls
C ) Les formulaires : .Frm
Chaque objet importé ne peut pas avoir le même nom qu'un objet déjÍ 
présent dans le projetVBA.
Par conséquent, si tu boucles sur les fichiers d'un répertoire, si tu as
différents types de fichiers, tu vas avoir de la difficulté Í  les
différencier des uns des autres.
L'adresse donnée contient un exemple complet quant Í  la manière de procéder.
Tant mieux pour toi, si tu as trouvé une manière plus simple de résoudre
la difficulté.
MichD
Avatar
Geo
De Brat'ac, le 29/01/2022 :
DéjÍ  essayé et lÍ  je me ramasse "fichier introuvable"

Vous donnez si peu d'informations qu'on ne peut qu'imaginer ce qui se
passe.
La moindre des choses serait de dire sur quelle ligne ? A quelle
itération.
Au lieu d'un msgbox mettre un debug.print pour avoir une idée.
LÍ  on n'a aucune info.
Avatar
Brat'ac
Le 29/01/2022, Geo a supposé :
Vous donnez si peu d'informations qu'on ne peut qu'imaginer ce qui se passe.
La moindre des choses serait de dire sur quelle ligne ? A quelle itération.
Au lieu d'un msgbox mettre un debug.print pour avoir une idée.
LÍ  on n'a aucune info.

Bonjour,
Avec le code suivant
--------------------------------------------------------------------------------------
Sub Import_VBA2()
Chemin = "C:UsersMichelDesktopmacro_vbanouveau dossier"
Fichier = Dir(Chemin)
Do While Fichier <> ""
Debug.Print Chemin & Fichier 'Option qui n'apporte rien de
visible sur l'erreur
Application.VBE.ActiveVBProject.VBComponents.Import (Chemin &
Fichier)
Fichier = Dir
Loop
End Sub
------------------------------------------------------------------------------------------
C'est sur les fichiers "frx" qu'il y a un probléme
j'ai l'erreur suivante qui s'affiche Í  l'exécution de la macro
Impossible de charger C:UsersMichelDesktopmacro_vbaTable.frx
Le fichier du code du formulaire (.frm) lui est bien chargé sans erreur
MAIS ...... le formulaire est bien chargé quand même !!!!!
Dans le fichier log qui est cré j'ai ceci
"Le nom Table de la feuille ou de la feuille MDI est déjÍ  utilisé ;
impossible de charger cette feuille."
J'ai résolu le PB avec On Error Resume Next
Mais pourquoi ?
Avatar
Geo
De Brat'ac, le 30/01/2022 :
J'ai résolu le PB avec On Error Resume Next
Mais pourquoi ?

MichD vous a donné l'explication :"Chaque objet importé ne peut pas
avoir le même nom qu'un objet déjÍ  présent dans le projetVBA".
Donc l'import n'a pas pu se faire, le On error a fait ignorer l'erreur
et a continué sans faire l'import.
Avatar
Brat'ac
MichD a présenté l'énoncé suivant :
Le 29/01/22 Í  12:15, Brat'ac a écrit :
Application.VBE.ActiveVBProject.VBComponents.Import (Chemin &
"Module1.bas")

Dans une fenêtre VBA, tu as des modules standards, des modules de classe, des
formulaires.
Chaque type de module a son extension de fichier.
A ) Module standard : .bas
B )
Module de classeur qui comprend tous les modules des feuilles de calcul, le
Thisworkbook ou les modules de classeur que l'on peut ajouter : .Cls
C ) Les formulaires : .Frm
Chaque objet importé ne peut pas avoir le même nom qu'un objet déjÍ  présent
dans le projetVBA.
Par conséquent, si tu boucles sur les fichiers d'un répertoire, si tu as
différents types de fichiers, tu vas avoir de la difficulté Í  les
différencier des uns des autres.
L'adresse donnée contient un exemple complet quant Í  la manière de procéder.
Tant mieux pour toi, si tu as trouvé une manière plus simple de résoudre la
difficulté.
MichD

Bonjour,
J'ai donné les détails dans ma réponse a Geo
Dans répertoire il n'y a aucun fichier qui on le même nom, dans le
classeur non plus
Avatar
MichD
Le 30/01/22 Í  06:38, Brat'ac a écrit :
MichD a présenté l'énoncé suivant :
Le 29/01/22 Í  12:15, Brat'ac a écrit :
Application.VBE.ActiveVBProject.VBComponents.Import (Chemin &
"Module1.bas")

Dans une fenêtre VBA, tu as des modules standards, des modules de
classe, des formulaires.
Chaque type de module a son extension de fichier.
A ) Module standard : .bas
B )
Module de classeur qui comprend tous les modules des feuilles de
calcul, le Thisworkbook ou les modules de classeur que l'on peut
ajouter : .Cls
C ) Les formulaires : .Frm
Chaque objet importé ne peut pas avoir le même nom qu'un objet déjÍ 
présent dans le projetVBA.
Par conséquent, si tu boucles sur les fichiers d'un répertoire, si tu
as différents types de fichiers, tu vas avoir de la difficulté Í  les
différencier des uns des autres.
L'adresse donnée contient un exemple complet quant Í  la manière de
procéder.
Tant mieux pour toi, si tu as trouvé une manière plus simple de
résoudre la difficulté.
MichD

Bonjour,
J'ai donné les détails dans ma réponse a Geo
Dans répertoire il n'y a aucun fichier qui on le même nom, dans le
classeur non plus

L'exemple de Ron de Bruin est plus complet :
https://www.rondebruin.nl/win/s9/win002.htm
Mais je t'ai créé une procédure, qui te permet d'exporter et d'importer
Í  l'intérieur de la même procédure.
Pour ton information :
Les modules de classe comprennent : les modules "feuille", ThisWorkbook"
et les modules de classe s'il y en a. Leurs fichiers d'exportation ont
tous l'extension ".cls". Les modules standards, l'extension ".bas" et
les formulaires ".frm".
'------------------------------------------------
Sub Test()
Dim Ext As String, Fichier As String
Dim Wk As Workbook, A As Long
'le fichier d'o͹ tu veux extraire les objets de la fenêtre VBA
Fichier = "f:TéléchargementsCompilation.xlsm"
'ouverture du fichier
Set Wk = Workbooks.Open(Fichier)
'avec le projetVBA du fichier que tu viens d'ouvrir
With Wk.VBProject
'une boucle sur tous les composants (feuille, module, Thisworkbook
For A = 1 To .VBComponents.Count
'détermine le type de composant pour attribuer la bonne extension
'de fichier selon leur type
Select Case .VBComponents(A).Type
Case 1 ' Module standard
Ext = ".bas"
Case 2 'module de classe
Ext = ".cls"
Case 3 'formulaire
Ext = ".frm"
End Select
'Chaque composant est rebaptisé avec le nom "toto" et suivi de
l'index
'de la boucle. Tu peux remplacer toto par l'expression de ton choix
x = "toto" & A
.VBComponents(A).Name = x
'Exportation du composant dans le répertoire de ton choix
Wk.VBProject.VBComponents(A).Export "f:Téléchargementstest"
& x & Ext
'importation du composant dans le fichier o͹ est cette macro
ThisWorkbook.VBProject.VBComponents.Import
"f:Téléchargementstest" & x & Ext
'Si besoin , suppression du fichier représenté le component qui
vient d'être
'Importé
Kill "f:Téléchargementstest" & x & Ext
Next
'Fermetur du fichier Excel que tu as ouvert
Wk.Close False
End With
End Sub
'------------------------------------------------
MichD
1 2