(VBA) Exportation Modules et Feuilles

Hello le forum,

J'ai récupéré un code sur le forum, pour exporter un module de mon classeur actif vers un ou plusieurs autres classeurs du répertoire.

J'ai retouché le code pour exporter tous les modules que je souhaite.

Maintenant, je veux faire la même chose mais pour les feuilles de calcul (.cls) sans trop toucher au code.

Par exemple boucler sur mes modules et ensuite boucler sur mes feuilles.

Pouvez-vous m'apporter vos lumières ?

Merci à vous.

139exportation1.xlsm (24.78 Ko)

Bonjour,

il faut mettre la ligne Dim Cls As Workbook

en haut du module pour la rendre disponible pour tout les code du module (à l'extérieur de la macro)

et juste avant la ligne Cls.Close True ajouter la ligne suivante

Call copy_onglet

la macro copy_onglet

Sub copy_onglet()
For Each f In ThisWorkbook.Worksheets
 If f.Name <> iciSheet Then
   f.Copy After:=Cls.Sheets(Sheets.Count)
 End If
Next
End Sub

Hello i20100,

Tout d'abord merci pour ta réponse

J'ai dû mal m'exprimer, je ne veux pas copier les feuilles dans mes autres classeurs, je veux copier le code qu'il y a à l'intérieur de mes feuilles.

Tout ce qui est événement vba (change, selectionchange ...)

Je veux que mon fichier à terme soit un fichier de suivi de toutes mes MAJ de macros (Modules, code dans les feuilles, userforms ...)

Pour le moment je n'ai que des modules et des événements à MAJ.

J'ai pensé à indiquer en colonne A le nom de mes modules et comme ça je boucle sur tous mes modules.

Pourquoi ne pas faire la même chose avec les feuilles ?

Exemple :

  • Mettre le nom des feuilles en colonne B
  • refaire une autre boucle sur le code des feuilles (événements)

Je fais appel à vous car je n'ai pas trouvé grand chose sur l'exportation du code à l'intérieur des feuilles

Si vous savez comment faire la même procédure que j'ai actuellement mais pour le code des feuilles ça serait top (et aussi les USERFORMS par la suite !

Merci pour votre aide.

Sub ImportModuleDansClasseurs()

    Dim Cls As Workbook
    Dim TestMod As Object
    Dim Tbl
    Dim Chemin As String
    Dim NomModule As String
    Dim I As Integer
    Dim Nb_Mod As Byte
    Dim Der_Lin As Byte

Nb_Mod = Range("A1").End(xlDown).Row

For j = 1 To Nb_Mod
    NomModule = Cells(j, 1).Value 'adapter le nom du module à exporter dans le dossier du classeur contenant cette macro

    'le module est exporté dans le dossier contenant tous les classeurs (y compris celui contenant cette macro)
    Chemin = ThisWorkbook.Path & "\" & NomModule & ".bas"

    'exporte le module
    ThisWorkbook.VBProject.VBComponents(NomModule).Export Chemin

    'récupère le chemin et nom des différents classeurs .xls et .xlsm
    'les classeurs sont dans le même dossier que le classeur contenant cette macro
    Tbl = RecupFichiers(ThisWorkbook.Path & "\", ThisWorkbook.Name)

    'évite les éventuelles boites de message
    Application.DisplayAlerts = False

    'ouvre les classeur
    For I = 1 To UBound(Tbl)

        Set Cls = Workbooks.Open(Tbl(I))

        'teste si le module est déjà présent dans le classeur ou si un module porte déjà ce nom
        On Error Resume Next

        Set TestMod = Cls.VBProject.VBComponents(NomModule)

        'si pas d'erreur, le module existe demande alors si on veux le remplacer
        'dans la négative, il sera renommé en "MonModule1" ou "MonModule2" etc...
        'sinon, le module existant sera supprimé et remplacé par le nouveau
        If Err.Number = 0 Then

            If MsgBox("Le module '" & NomModule & "' existe déjà dans le classeur '" & Cls.Name & "' !" _
                      & vbCrLf _
                      & vbCrLf _
                      & "Voulez-vous le remplacer ?", _
                      vbQuestion + vbYesNo) = vbYes Then

                Cls.VBProject.VBComponents.Remove TestMod

            End If

            Err.Clear

        End If

        Cls.VBProject.VBComponents.Import Chemin 'importe
'        Call copy_onglet
        Cls.Close True 'enregistre et ferme

    Next I
Next j
    Set MonficgierSuppr = CreateObject("Scripting.filesystemobject")
    MonficgierSuppr.deletefile (ThisWorkbook.Path & "\" & "*.bas")
    'rétabli
    Application.DisplayAlerts = True

End Sub

Function RecupFichiers(Chemin As String, NomClasseur As String) As String()

    Dim TableauFichiers() As String
    Dim Fichier As String
    Dim I As Integer

    Fichier = Dir(Chemin & "*.xls*")

    Do While (Len(Fichier) > 0)

        If Right(Fichier, 5) <> ".xlsx" And Fichier <> NomClasseur Then 'évite les ".xlsx et ce classeur"

            I = I + 1

            ReDim Preserve TableauFichiers(1 To I)

            TableauFichiers(I) = Chemin & Fichier

        End If

        Fichier = Dir()

    Loop

    RecupFichiers = TableauFichiers()

End Function

'Sub copy_onglet()
'For Each f In ThisWorkbook.Worksheets
' If f.Name <> iciSheet Then
'   f.Copy After:=Cls.Sheets(Sheets.Count)
' End If
'Next
'End Sub

Bonjour,

Ce code me parle surtout ma fonction "RecupFichiers()"

Je ne vois pas trop ce que tu souhaites faire et pourquoi exporter et importer les mêmes procédures qui vont se trouver en doublons, triplons, etc pour chaque modif !

Ici un code pour connaître le type de module et leur extensions. voir dans la fenêtre de débogage (Ctrl+G) :

Sub test()

    Dim Cls As Workbook
    Dim mModule As Object

    Set Cls = ThisWorkbook

    With Cls.VBProject

        For Each mModule In .VBComponents

        Select Case mModule.Type

            Case 1: Debug.Print "Module standard avec extension '.bas'"; " --> "; mModule.Name; " -- "; mModule.Type
            Case 2: Debug.Print "Module de classe avec extension '.cls'"; " --> "; mModule.Name; " -- "; mModule.Type
            Case 3: Debug.Print "Module d'UserForm avec extension '.frm'"; " --> "; mModule.Name; " -- "; mModule.Type
            Case 100: Debug.Print "Module du classeur et des feuilles avec extension '.cls"; " --> "; mModule.Name; " -- "; mModule.Type

        End Select

        Next mModule

    End With

 End Sub

Hello Theze,

Il doit surement être de toi

Ce que je veux faire est simple. Actuellement mon code exporte ou remplace tous les modules dont le nom est indiqué en colonne A (dans le classeur j'en ai 2 => cellule A1 et A2). Jusque là pas de soucis.

Maintenant, j'ai du code dans ma feuil1 :

Private Sub Worksheet_Change(ByVal Target As Range)

    MsgBox "vous avez changé une cellule"

End Sub

Je veux faire la même chose que pour les modules, c'est à dire :

1- Mettre le nom (Feuil1) dans la cellule B1

2 - le code récupére ce nom et copie le code ci-dessus dans la feuille du même nom d'un autre classeur.

Je pensais peut-être à ça ?

Sub ImportModuleDansClasseurs()

    Dim Cls As Workbook
    Dim TestMod As Object
    Dim Tbl
    Dim Chemin As String
    Dim NomModule As String
    Dim NomFeuille As String
    Dim I As Integer
    Dim j As Integer
    Dim k As Integer
    Dim L As Integer
    Dim Nb_Mod As Byte
    Dim Der_Lin As Byte
    Dim Nb_Feui As Byte

Nb_Mod = Range("A1").End(xlDown).Row
Nb_Feui = Range("B1").End(xlDown).Row

For j = 1 To Nb_Mod
    NomModule = Cells(j, 1).Value 'adapter le nom du module à exporter dans le dossier du classeur contenant cette macro

    'le module est exporté dans le dossier contenant tous les classeurs (y compris celui contenant cette macro)
    Chemin = ThisWorkbook.Path & "\" & NomModule & ".bas"

    'exporte le module
    ThisWorkbook.VBProject.VBComponents(NomModule).Export Chemin

    'récupère le chemin et nom des différents classeurs .xls et .xlsm
    'les classeurs sont dans le même dossier que le classeur contenant cette macro
    Tbl = RecupFichiers(ThisWorkbook.Path & "\", ThisWorkbook.Name)

    'évite les éventuelles boites de message
    Application.DisplayAlerts = False

    'ouvre les classeur
    For I = 1 To UBound(Tbl)

        Set Cls = Workbooks.Open(Tbl(I))

        'teste si le module est déjà présent dans le classeur ou si un module porte déjà ce nom
        On Error Resume Next

        Set TestMod = Cls.VBProject.VBComponents(NomModule)

        'si pas d'erreur, le module existe demande alors si on veux le remplacer
        'dans la négative, il sera renommé en "MonModule1" ou "MonModule2" etc...
        'sinon, le module existant sera supprimé et remplacé par le nouveau
        If Err.Number = 0 Then

            If MsgBox("Le module '" & NomModule & "' existe déjà dans le classeur '" & Cls.Name & "' !" _
                      & vbCrLf _
                      & vbCrLf _
                      & "Voulez-vous le remplacer ?", _
                      vbQuestion + vbYesNo) = vbYes Then

                Cls.VBProject.VBComponents.Remove TestMod

            End If

            Err.Clear

        End If

        Cls.VBProject.VBComponents.Import Chemin 'importe
'        Call copy_onglet
        Cls.Close True 'enregistre et ferme

    Next I
Next j

For L = 1 To Nb_Feui
    NomFeuille = Cells(L, 2).Value 'adapter le nom du module à exporter dans le dossier du classeur contenant cette macro

    'le module est exporté dans le dossier contenant tous les classeurs (y compris celui contenant cette macro)
    Chemin = ThisWorkbook.Path & "\" & NomFeuille & ".cls"

    'exporte le module
    ThisWorkbook.VBProject.VBComponents(NomFeuille).Export Chemin

    'récupère le chemin et nom des différents classeurs .xls et .xlsm
    'les classeurs sont dans le même dossier que le classeur contenant cette macro
    Tbl = RecupFichiers(ThisWorkbook.Path & "\", ThisWorkbook.Name)

    'évite les éventuelles boites de message
    Application.DisplayAlerts = False

    'ouvre les classeur
    For k = 1 To UBound(Tbl)

        Set Cls = Workbooks.Open(Tbl(I))

        'teste si le module est déjà présent dans le classeur ou si un module porte déjà ce nom
        On Error Resume Next

        Set TestMod = Cls.VBProject.VBComponents(NomFeuille)

        'si pas d'erreur, le module existe demande alors si on veux le remplacer
        'dans la négative, il sera renommé en "MonModule1" ou "MonModule2" etc...
        'sinon, le module existant sera supprimé et remplacé par le nouveau
        If Err.Number = 0 Then

            If MsgBox("La Feuille '" & NomFeuille & "' existe déjà dans le classeur '" & Cls.Name & "' !" _
                      & vbCrLf _
                      & vbCrLf _
                      & "Voulez-vous le remplacer ?", _
                      vbQuestion + vbYesNo) = vbYes Then

                Cls.VBProject.VBComponents.Remove TestMod

            End If

            Err.Clear

        End If

        Cls.VBProject.VBComponents.Import Chemin 'importe
'        Call copy_onglet
        Cls.Close True 'enregistre et ferme

    Next k
Next L

    Set MonficgierSuppr = CreateObject("Scripting.filesystemobject")
    MonficgierSuppr.deletefile (ThisWorkbook.Path & "\" & "*.bas")
    'rétabli
    Application.DisplayAlerts = True

End Sub

Personne ne sait pour l'exportation du code des événements Worsheet ??

Bonjour,

Je ne saisis toujours pas trop ce que tu veux mais voilà ce que j'en ai compris !

Tu veux exporter les modules des feuilles, pour ça voici le code :

Sub Exporter()

    Dim Cls As Workbook
    Dim mModule As Object
    Dim Chemin As String

    Set Cls = ThisWorkbook

    With Cls.VBProject

        For Each mModule In .VBComponents

            If mModule.Type = 100 Then

                'seulement les modules de feuilles et ceci, dans le même dossier que celui du classeur
                If mModule.Name <> "ThisWorkbook" Then

                    Chemin = Cls.Path & "\" & mModule.Name & ".cls"
                    Cls.VBProject.VBComponents(mModule.Name).Export Chemin

                End If

            End If

        Next mModule

    End With

End Sub

Ensuite je suppose que tu veux pouvoir ré-importer ces modules dans le classeur (ou un autre) mais dans ce cas, il te faut savoir que les modules de feuilles et classeur sont des modules de classe et donc, ils ne seront pas directement importés dans le module de la feuille correspondante ou du classeur mais dans la collection des modules de classe et pour mettre le code dans le module visé (module d'une feuille ou du classeur) il faut faire une petite gymnastique en supprimant les lignes du module puis en important celles du module de classe, une fois ceci fait, supprimer le module de classe devenu inutile, pour ça, voici le code :

Sub Importer()

    Dim Cls As Workbook
    Dim mModule As Object
    Dim ModFeuille As Object
    Dim Fe As Worksheet
    Dim Chemin As String

    Set Cls = ThisWorkbook
    Set Fe = Cls.Worksheets("Feuil1")

    Set ModFeuille = ThisWorkbook.VBProject.VBComponents(Fe.Name).CodeModule

    Chemin = Cls.Path & "\" & ModFeuille.Name & ".cls"

    'importe le module, ce dernier étant un module de classe, il est ajouté à la collection des module de classe
    'et non directement dans le module de la feuille concerné
    Set mModule = Cls.VBProject.VBComponents.Import(Chemin)

    'si le module de classe n'est pas vide de ligne...
    If mModule.CodeModule.CountOfLines > 0 Then

        'supprime toutes les lignes du module de la feuille et importer les lignes du module de classe
        With ModFeuille

            .DeleteLines 1, .CountOfLines
            .InsertLines .CountOfLines + 1, mModule.CodeModule.Lines(1, mModule.CodeModule.CountOfLines)

        End With

    End If

    'supprime le module de classe devenu inutile
    Cls.VBProject.VBComponents.Remove mModule

    'supprime le fichier sur le disque
    'Kill Chemin

End Sub

Hello Theze,

Oui c'est exporter les modules de feuille, dsl je connais pas tous les termes encore

J'ai essayé d'importer le module de feuille et je me suis aperçu qu'il s'exportait en module de classe ...

Du coup j'ai fouiné un peu partout et j'ai trouvé un autre moyen pour faire cette exportation, en créant un fichier texte, exporter le code du module de feuille dans ce fichier txt et ensuite importer ce code dans le bon classeur.

Mais je vais tester aussi ta méthode

La + rapide et la + simple pour toi c'est laquelle ?

Merci à toi.

Bonjour,

La + rapide et la + simple pour toi c'est laquelle ?

Un module, qu'il soit de classe ou standard ou même d'UserForm n'est ni plus ni moins qu'un fichier texte, pour t'en convaincre, clic droit sur le module dans l'explorateur et ouvrir avec le bloc notes.

Maintenant, pour dire quelle procédure est la plus rapide vraiment, je n'ai pas testé mais l'exportation se faisant en une seule commande, j'en déduis que ce doit être elle !

Hello Theze,

Je reviens vers toi car je suis perdu ... et surtout je n'arrive pas à adapter ton code...

Je joins un fichier à ma demande :

Le principe de ce fichier est de faire un suivi de mes mise à jour de macro. Ce fichier sera exactement le même que les fichiers dans mes repertoires avec cette feuille "Exportation" en +.

J'ai trois répertoires composés de fichiers xlsm et xlsx. Pour les fichiers xlsm ils sont tous conçu pareil.

Je veux exporter et importer les macros de mon fichiers "Exportation_macros" dans tous les fichiers xlsm des mes 3 répertoires (je veux que les fichiers xlsm aient les meme macros que le fichier "Exportation_macros". )

Dans mon fichier "Exportation_macros", j'ai les colonnes "Modules à exporter";"Fichiers traités";"Statut"

Dans la colonne "Modules à exporter" je veux indiquer le nom du ou des modules à exporter (ça peut être des nom de feuilles aussi, userform...),

Dans la colonne "Fichiers traités" je veux le nom des fichiers qui ont été traités,

Dans la colonne "Statut" je veux savoir si le fichier lors de son ouverture était en lecture seule ou non ou si il y a eu une autre erreur ... (exemple : OK ou NOK en lecture seule ou NOK et autre erreur)

Ce fichier est vraiement destiner à me simplifier la vie concernant les MAJ de macros car je suis confronté au lectures seule car plusieurs utilisateurs peuvent etre sur les fichiers.

Du coup j'oublie, de MAJ des macros ...

Merci pour ton aide ...

Bonjour,

Voici un premier jet concernant l'import / export des modules avec les spécificités de chacun (principalement les modules de feuilles et celui du classeur).

Pour le test, tu crées un dossier où tu mets ton classeur (Exportation_Macros.xlsm) avec le code ci-dessous dans un module standard et tu crées un second classeur en .xlsm qui va recevoir les modules, il doit être enregistré dans le même dossier. Tu lances la Sub "ImportModuleDansClasseurs()" , elle va, dans un premier temps, exporter les modules qui sont indiqués dans ton tableau en stockant leur noms et chemins dans un tableau à deux dimensions, ceci pour simplifier la suite du code. Une fois l'exportation fini, le classeur (pour l'instant il doit y en avoir qu'un pour le test enfin, c'est ce que je te conseille) devant recevoir les modules précédemment exportés est ouvert et l'importation se fait directement pour les modules standards, d'UserForm et de classes et avec suppression des anciennes lignes de code puis insertion des nouvelles lignes de code dans les modules de feuilles et celui du classeur. Comme ces derniers sont des modules de classe (.cls) il n'est pas possible, à ma connaissance, de les importer directement, ensuite, le module est supprimé. Il est impératif que les noms des modules de feuilles aient comme préfixe "Feuil" sinon, adapter dans le code.

Je n'ai pas utiliser pour l'instant les chemins indiqués dans la colonne D de ton tableau mais le chemin du classeur d'où l'importance que les classeurs soient dans le même dossier. Pour savoir si le classeur est en lecture seule ou non, j'utilise la fonction "GetAttr()" mais je ne sais pas si elle retourne le bon résultat quand le classeur cible est sur un réseau et ouvert par un autre utilisateur et comme je n'ai pas de réseau pour tester, je t'en laisse le soin :

Sub ImportModuleDansClasseurs()

    Dim Cls As Workbook
    Dim TestMod As Object
    Dim mModule  As Object
    Dim TblMod() As String
    Dim Tbl() As String
    Dim Chemin As String
    Dim I As Integer
    Dim J As Integer

    'le module est exporté dans le dossier contenant tous les classeurs (y compris celui contenant cette macro)
    Chemin = ThisWorkbook.Path & "\"

    With ThisWorkbook.Worksheets("Exportation")

        'parcours les 12 lignes du tableau
        For I = 2 To 12

            'si pas vide, stocke dans un tableau à deux dimensions
            If .Cells(I, 1).Value <> "" Then

                'si c'est un module de feuille ou celui du classeur
                If ThisWorkbook.VBProject.VBComponents(.Cells(I, 1).Value).Type = 100 Then

                    J = J + 1: ReDim Preserve TblMod(1 To 2, 1 To J)
                    TblMod(1, J) = .Cells(I, 1).Value
                    TblMod(2, J) = Chemin & .Cells(I, 1).Value & ".cls"

                'les autres
                Else

                    J = J + 1: ReDim Preserve TblMod(1 To 2, 1 To J)
                    TblMod(1, J) = .Cells(I, 1).Value
                    TblMod(2, J) = Chemin & .Cells(I, 1).Value & Choose(ThisWorkbook.VBProject.VBComponents(.Cells(I, 1).Value).Type, ".bas", ".cls", ".frm")

                End If

            End If

        Next I

    End With

    'exporte les modules
    If Not (Not TblMod) Then

        For I = 1 To UBound(TblMod, 2): ThisWorkbook.VBProject.VBComponents(TblMod(1, I)).Export TblMod(2, I): Next I

    End If

    'récupère le chemin et nom des différents classeurs .xls et .xlsm
    'les classeurs sont dans le même dossier que le classeur contenant cette macro
    Tbl = RecupFichiers(ThisWorkbook.Path & "\", ThisWorkbook.Name)

    'si le tableau a bien été initialisé...
    If Not (Not Tbl) Then

        For I = 1 To UBound(Tbl)

            'vérifie qu'il ne soit pas en lecture seule
            If GetAttr(Tbl(I)) And vbReadOnly <> 0 Then

                'ouvre le classeur en cours
                Set Cls = Workbooks.Open(Tbl(I))

                For J = 1 To UBound(TblMod, 2)

                    'teste si le module est déjà présent dans le classeur ou si un module porte déjà ce nom
                    On Error Resume Next
                    Set TestMod = Cls.VBProject.VBComponents(TblMod(1, J)).CodeModule

                    'si pas d'erreur, le module existe donc, le supprime si ce n'est pas un module de feuille ou celui du classeur
                    If Err.Number = 0 Then

                        If Left(TblMod(1, J), 5) <> "Feuil" And TblMod(1, J) <> "ThisWorkbook" Then

                            Cls.VBProject.VBComponents.Remove Cls.VBProject.VBComponents(TblMod(1, J))
                            Err.Clear

                        End If

                    End If

                    'importe le module
                    Set mModule = Cls.VBProject.VBComponents.Import(TblMod(2, J))

                    '...si c'est un module de feuille ou celui du classeur :
                    'le module étant un module de classe, il est ajouté à la collection des modules de classe
                    'et non directement dans le module de la feuille concerné ou celui du classeur
                    If Left(TblMod(1, J), 5) = "Feuil" Or TblMod(1, J) = "ThisWorkbook" Then

                        'si le module de classe n'est pas vide de ligne...
                        If mModule.CodeModule.CountOfLines > 0 Then

                            'supprime toutes les lignes du module de la feuille ou du classeur et importe les lignes du module de classe...
                            With TestMod

                                .DeleteLines 1, .CountOfLines
                                .InsertLines .CountOfLines + 1, mModule.CodeModule.Lines(1, mModule.CodeModule.CountOfLines)

                            End With

                        End If

                        '...puis supprime le module de classe devenu inutile
                        Cls.VBProject.VBComponents.Remove mModule

                    End If

                Next J

                Cls.Close True 'enregistre et ferme

            Else 'GetAttr

                'si en lecture seule, l'indique en colonne C
                ThisWorkbook.Worksheets("Exportation").Cells(I, 3).Value = "Lecture seule"

            End If 'GetAttr

        Next I

    End If 'Not (Not Tbl)

End Sub

Function RecupFichiers(Chemin As String, NomClasseur As String) As String()

    Dim TableauFichiers() As String
    Dim Fichier As String
    Dim I As Integer

    Fichier = Dir(Chemin & "*.xls*")

    Do While (Len(Fichier) > 0)

        If Right(Fichier, 5) <> ".xlsx" And Fichier <> NomClasseur Then 'évite les ".xlsx et ce classeur"

            I = I + 1

            ReDim Preserve TableauFichiers(1 To I)

            TableauFichiers(I) = Chemin & Fichier

        End If

        Fichier = Dir()

    Loop

    RecupFichiers = TableauFichiers()

End Function

Hello Theze,

Tout d'abord je te remercie pour le boulot et pour ton aide

Ton code est top !

Par contre il y a une question que e me pose c'est :

Pourquoi tu passe par des tableaux concernant les fichiers à traiter ???

J'arrive pas à comprendre...

Merci.

Bonjour,

Pourquoi tu passe par des tableaux concernant les fichiers à traiter ???

Comme je l'ai dis dans mon précédent message, plus facile à mon sens pour la suite du code !

Dans la "colonne" 1 du tableau "TblMod()" je stocke le nom du module et dans la seconde, je stocke le chemin complet et l'extension appropriée et ensuite, dans la boucle principale et les instructions quelle contient, il suffit juste de savoir à quoi on veux faire référence, le nom ou le chemin.

Maintenant, tu peux l'éviter, il te faut alors faire référence à la colonne A pour les noms et la colonne D pour les chemins. J'ai préféré utilisé un tableau pour encapsuler ça avec ces instructions :

If ThisWorkbook.VBProject.VBComponents(.Cells(I, 1).Value).Type = 100 Then

    J = J + 1: ReDim Preserve TblMod(1 To 2, 1 To J)
    TblMod(1, J) = .Cells(I, 1).Value
    TblMod(2, J) = Chemin & .Cells(I, 1).Value & ".cls"

'les autres
Else

    J = J + 1: ReDim Preserve TblMod(1 To 2, 1 To J)
    TblMod(1, J) = .Cells(I, 1).Value
    TblMod(2, J) = Chemin & .Cells(I, 1).Value & Choose(ThisWorkbook.VBProject.VBComponents(.Cells(I, 1).Value).Type, ".bas", ".cls", ".frm")

End If

on isole du reste du code ce type de test pour plus de compréhension !

Autre chose qu'il te faut savoir concernant les UserForm, durant l'exportation, le compilateur, contrairement aux autres objets, crée deux fichiers, le .frm qui est le fichier contenant les propriétés (certaines) du l'UserForm avec le code que contient le module et le .frx qui contient les objets posés sur l'UserForm avec leur propriétés, d'où la nécessité d'utiliser l'export et l'import plutôt que des fichiers .txt comme tu as fait état dans un de tes posts car si tu fais une modif graphique sur l'UserForm, elle sera aussi reportée lors de l'importation.

Hello thèse,

Ok très bien !

Ok pour les userforms et merci de l'info car je ne savais pas.

Je vais en créer d'ici quelques semaines et du coup en exporter par la même occasion.

Merci pour ton aide et tes infos.

content de t'avoir aidé

Rechercher des sujets similaires à "vba exportation modules feuilles"