mafiouC
Messages postés3Date d'inscriptionjeudi 14 avril 2011StatutMembreDernière intervention15 avril 2011
-
14 avril 2011 à 17:40
mafiouC
Messages postés3Date d'inscriptionjeudi 14 avril 2011StatutMembreDernière intervention15 avril 2011
-
15 avril 2011 à 17:11
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'?
cs_Le Pivert
Messages postés7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 15 avril 2011 à 11:27
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
mafiouC
Messages postés3Date d'inscriptionjeudi 14 avril 2011StatutMembreDernière intervention15 avril 2011 15 avril 2011 à 13:59
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?
cs_Le Pivert
Messages postés7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 15 avril 2011 à 14:55
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
mafiouC
Messages postés3Date d'inscriptionjeudi 14 avril 2011StatutMembreDernière intervention15 avril 2011 15 avril 2011 à 17:11
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