Bonjour,

Excusez-moi, c'est un peu long à expliquer au départ. Voici mon problème.

J'ai un classeur Excel qui a des centaines de feuilles, avec des données dedans, et aussi il y a des macros dans ces feuilles. Les utilisateurs modifient constamment les données des feuilles. Moi, je dois faire évoluer les macros.

Alors je prends une copie du classeur, je modifie les macros, et après quelques jours je demande le classeur aux utilisateurs pour mettre à jour les macros. Evidemment ma copie n'est plus à jour par rapport aux données, donc je ne peux pas leur fournir ma copie. Il faut que je mets à jour les macros dans leur classeur.

Comme il y en a beaucoup de feuilles, faire ça à la main avec copie/coller c'est pas génial. Alors je voulais faire ça avec Export/Import. Je fais donc un Export des macros de mon classeur avec le code suivant (que j'ai trouvé sur internet et qui marche très bien):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub ExporterFrmEtModules()
    ' Pour que ça marche, faire Excel/Outils/Options/Sécurité/Sécurité des macros/Faire confiance au projet Visual Basic
    Dim rep1 As String
    rep1 = "MesMacros"
    rep1 = ThisWorkbook.Path + Application.PathSeparator + rep1 + Application.PathSeparator
    Dim LeFich
    For Each LeFich In ThisWorkbook.VBProject.VBComponents
        Select Case LeFich.Type
        Case 1
            ThisWorkbook.VBProject.VBComponents(LeFich.Name).Export rep1 & LeFich.Name & ".bas"
        Case 2
            ThisWorkbook.VBProject.VBComponents(LeFich.Name).Export rep1 & LeFich.Name & ".cls"
        Case 3
            ThisWorkbook.VBProject.VBComponents(LeFich.Name).Export rep1 & LeFich.Name & ".frm"
        Case 100
            ThisWorkbook.VBProject.VBComponents(LeFich.Name).Export rep1 & LeFich.Name & ".cls"
        End Select
    Next
End Sub
Ce code produit des fichiers comme Feuil1.cls, ThisWorkbook.cls, Module1.bas, UserForm1.frm, UserForm1.frx.

Le problème est comment faire l'import ? En fait je veux fair un Update des macros de mes feuilles et modules. J'ai essayé de mettre dans le classeur cible le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub ImporterFrmEtModules()
    Dim NomFich
    Dim rep1 As String
    rep1 = "MesMacros"
    rep1 = ThisWorkbook.Path + Application.PathSeparator + rep1 + Application.PathSeparator
    NomFich = Dir(rep1 + "*.*")
    Do While NomFich <> ""
        NomFich1 = rep1 + NomFich
        'MsgBox NomFich1
        Application.VBE.ActiveVBProject.VBComponents.Import (NomFich1)
        NomFich = Dir
    Loop
End Sub
Les noms des fichiers sont bien récupérés, pas de pb de ce coté là.

Le problème est qu'il ne fait pas la liaison entre le nom du fichier importé et le nom de mon objet Excel. Il fait les imports comme s'il s'agissait de nouveaux objets, en donnant de nouveaux noms à ces objets. En plus mes feuilles ont des noms comme par ex. Feuil1(Accueil), tandis que dans les fichiers exportés le nom "Accueil" n'apparait même pas.

Avez-vous une suggestion svp ?