Exporter un seul module vers un nouveau classeur

Signaler
Messages postés
3
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
15 avril 2011
-
Messages postés
3
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
15 avril 2011
-
Bonjour à tous.

Après avoir cherché sur pas mal de forums et trouvé quelques solutions se rapprochant (mais pas LA solution), je me permet de vous exposer mon problème.


Alors voilà ; j'ai créée un classeur Excel appellé "erreur_de_caisse" qui dispose notamment d'une feuille "selection".
Sur cette feuille "selection" il y a plusieurs boutons, menus déroulants, données qui sont liées à différentes macros et modules.

Un des boutons de cette page me permet de créer un nouveau classeur (nommé selon la date et la region sur laquelle je travaille) qui ne contient que la feuille "selection" et ne conserve plus qu'un seul menu déroulant.

Le problème est que ce menu déroulant, lors de la création du nouveau fichier, n'est plus liée à ma macro 'filtre_agence' dans le 'Module3'

Ma question est la suivante, comment faire pour exporter vers mon nouveau fichier ce seul 'Module3'?

Je vous remercie par avance.

4 réponses

Messages postés
7275
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 février 2021
120
Bonjour,

Essaie ceci:

'recopier le code d'un module dans un autre classeur
'(en ajoutant d'abord un module dans cet autre classeur)
Sub CopieCodeModule()

Dim S As String, Wbk As Workbook

  With ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule
    S = .Lines(1, .CountOfLines)
  End With
     Workbooks.Open Filename:= _
        "chemin du Classeur.xls"
  Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
    With ActiveWorkbook.VBProject.VBComponents("Module1").CodeModule
    .AddFromString S
  End With

End Sub 



@+Le Pivert
Messages postés
3
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
15 avril 2011

Merci beaucoup Pivert!

Ta méthode pour exporter marche parfaitement!

Toutefois il y a encore un petit soucis. En fait le fichier sur lequel est mon module avec les macros s'appelle erreur_de_caisse. Le Module3 est bien exporté sur mon nouveau fichier (qui s'appelle DROME_date).
Mais lorsque je déplace mon nouveau fichier (DROME_date) dans un autre répertoire, ma macro du module n'est plus liée au menu déroulant du fichier DROME_date.

J'ai le message d'erreur suivant "erreur_de_caisse.xls introuvable" (alors que je suis dans le fichier DROME_date).
En faisant clic-droit sur le menu déroulant, puis affecter une macro, je m'apperçois que le nom de mon ancien fichier se trouve devant le nom de ma macro (erreur_de_caisse.xls'!MaMacro).

Si je ne garde que le nom de ma macro le menu déroulant se remet à fonctionner.

N'y a-t-il pas un moyen pour que le nom de mon ancien fichier ne soit pas mis automatiquement devant le nom de ma macro?
Messages postés
7275
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 février 2021
120
Je ne comprends pas très bien. Cela doit provenir de ta macro et non pas du module que l'on vient de copier. Il faudrait que je vois ta macro qui doit-être lié à ton fichier
"erreur_de_caisse.xls"
Voici une autre façon de procéder. L'ouverture du classeur est à part, on peut donc la changer.

Option Explicit
Sub RecopieModule()
  Dim NewM As Object, NewCode As String
  ' Stockage du code du module "Module1" du classeur maitre
    With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule
      NewCode = .Lines(1, .CountOfLines)
    End With
  ' Ajout d'un module au CLASSEUR ACTIF
  Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
    With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
    ' Le DeleteLines sert à éviter éviter d'avoir 2 fois Option Explicit
    ' si la déclaration explicite est cochée dans les préférences
    'sans effet si l'option n'est pas cochée
      .DeleteLines 1, .CountOfLines
      .AddFromString NewCode
    End With
 End Sub
Sub Exportermodule()
'on ouvre le classeur cible
Workbooks.Open Filename:= _
        "chemin du Classeur1.xls"
RecopieModule
End Sub


Pour l'appeler
Exportermodule


Essaie avec celle-ci!
Messages postés
3
Date d'inscription
jeudi 14 avril 2011
Statut
Membre
Dernière intervention
15 avril 2011

Merci pour le temps que tu as passé pour me répondre.

J'ai fini par trouver une solution pour palier à mon 2ème problème. Avec un bout de code j'ajoute au nom de ma macro le nom de mon nouveau fichier Excel :
Ensuite avec OnAction, j'attribue ma macro au menu déroulant.

fichier = "'" & Nom & ".xls'!Filtre_agence"
ActiveSheet.Shapes("Drop Down 8").Select
Selection.OnAction = fichier


Encore marci de ton aide