OVH Cloud OVH Cloud

Importation de code dans un classeur Excel

2 réponses
Avatar
jmr31
Bonjour,

J'ai quelques soucis avec l'importation de code dans un
fichier Excel.

Voil=E0, je souhaite faire un "merge" de 2 fichiers excel
similaires mais non identiques :
- le premier me fournit les donn=E9es (feuilles excel
export=E9es sans leur code)
- le deuxi=E8me me fournit le code (exportation des
composants vb ".bas", ".cls", ".frm").

Quand je r=E9importe le code :
- les modules ".cls" sont plac=E9s dans le r=E9pertoire
"Modules de Classe" du projet VBA et non pas dans le
r=E9pertoire "Microsoft Excel Objects" o=F9 ils =E9taient au d=E9part.
- les modules ".bas" sont dupliqu=E9s (par exemple
Gestion_Cellules et Gestion_cellules1
- les modules ".frm" g=E9n=E8rent une erreur lors de l'importation.

J'ai cherch=E9 sur le web mais je n'ai rien trouv=E9 sur
l'importation de code et la (re) cr=E9ation de fichier excel
=E0 partir de fichiers export=E9s.

Avez-vous des id=E9es pour r=E9soudre ce probl=E8me ?

Merci
JMR

2 réponses

Avatar
Frédéric Sigonneau
Bonsoir,

Issue d'un échange datant de juin dernier, cette procédure permet d'exporter
tout le code d'un classeur dans une autre. A l'origine il s'agissait d'appliquer
une cure de minceur à des fichiers qui prennent de l'embonpoint à la suite de
nombreuses séances de travail dans l'éditeur VBE, d'où le nom de la procédure.
Elle devrait pouvoir te rendre service :

'=========================== 'exporte tout le code d'un classeur dans un autre

Sub CureMinceur()
'JF et fs, mpfe
Dim oldnom, newnom As String

oldnom = "ClasseurAExporter.xls" 'à adapter
newnom = "monnouveauclasseur" 'juste un nom, sans extension ni chemin complet

Dim Wbk As Workbook, Chemin$
Dim Projet, i&, Module$
Dim m

On Error Resume Next
Set Wbk = Workbooks(oldnom)
On Error GoTo 0
'dossier temporaire pour l'exportation des modules de code
Chemin = Wbk.Path & "tempExport"
MkDir Chemin: Chemin = Chemin & ""
'export des modules
Set Projet = Wbk.VBProject
With Projet
For i = 1 To .VBComponents.Count
Select Case .VBComponents(i).Type
Case 1:
.VBComponents(i).Export Chemin & .VBComponents(i).Name & ".bas"
Case 2:
.VBComponents(i).Export Chemin & .VBComponents(i).Name & ".cls"
Case 3:
.VBComponents(i).Export Chemin & .VBComponents(i).Name & ".frm"
End Select
Next
End With
'export des feuilles dans un nouveau classeur
Wbk.Sheets.Copy
ActiveWorkbook.SaveAs Wbk.Path & "" & newnom
'réimport des modules dans le nouveau classeur
Module = Dir(Chemin & "*.*")
Do While (Len(Module) > 0)
On Error Resume Next
ActiveWorkbook.VBProject.VBComponents.Import(Chemin & Module).Name = Module
On Error GoTo 0
Kill Chemin & Module
Module = Dir()
Loop
'met à jour le module ThisWorkBook
With Workbooks(oldnom).VBProject.VBComponents("thisworkbook").CodeModule
newcode = .Lines(1, .CountOfLines)
End With
newnom = ActiveWorkbook.Name
With Workbooks(newnom).VBProject.VBComponents("thisworkbook").CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString newcode
End With
'enregistrement et nettoyage
ActiveWorkbook.Save
RmDir Chemin

End Sub
'===========================
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Bonjour,

J'ai quelques soucis avec l'importation de code dans un
fichier Excel.

Voilà, je souhaite faire un "merge" de 2 fichiers excel
similaires mais non identiques :
- le premier me fournit les données (feuilles excel
exportées sans leur code)
- le deuxième me fournit le code (exportation des
composants vb ".bas", ".cls", ".frm").

Quand je réimporte le code :
- les modules ".cls" sont placés dans le répertoire
"Modules de Classe" du projet VBA et non pas dans le
répertoire "Microsoft Excel Objects" où ils étaient au départ.
- les modules ".bas" sont dupliqués (par exemple
Gestion_Cellules et Gestion_cellules1
- les modules ".frm" génèrent une erreur lors de l'importation.

J'ai cherché sur le web mais je n'ai rien trouvé sur
l'importation de code et la (re) création de fichier excel
à partir de fichiers exportés.

Avez-vous des idées pour résoudre ce problème ?

Merci
JMR


Avatar
JMR31
Bonjour,

Suite à vos mails (de la part de Zon et F. Sigonneau) sur
les forums Excel-Downloads et Microsoft, j'ai fini par
développer 2 solutions différentes :

- la première "light" : le code n'est pas exporté sous
forme de fichiers. Le fichier contenant les données est
"nettoyé" de son code, lequel est récupéré dans le deuxième
fichier excel.

- la seconde plus lourde : les données sont exportées dans
un fichier excel "nettoyé" de son code, le code est exporté
sous forme de fichiers .bas, .frm, .frx et .fxl (format
"maison"). Le code est ensuite réimporté, une partie des
modules se retrouve dans les modules de classes, lesquels
sont ensuite copiés dans les modules de code liés aux
feuilles excel. Cette solution est certes assez lourde mais
permet une éventuelle gestion de configuration sur les
différents modules de code et données.

Merci pour votre aide.
Jean-Michel