de papou, garçon adorable qui dit toujours bien, bonjour, merci, cordialement -et j'en passe- lorsqu'il arrive sur ce forum :
'Référence obligatoire à Microsoft Visual Basic Extensibility 5.3
Sub Exporter_Tous_Modules()
Dim CompVba As VBComponent
For Each CompVba In ThisWorkbook.VBProject.VBComponents
If CompVba.Type = vbext_ct_StdModule Then
'adapter le chemin
CompVba.Export "C:" & CompVba.Name & ".bas"
End If
Next CompVba
End Sub
"Versatile" a écrit dans le message de news:
Comment faire en vba ?
Papyjac
Bonjour versatile mais peu locace
Il faut copier les modules 1 par 1 : pour cela, le plus simple et faire des exports du classeur source puis des imprts dans le classeur cible
Par contre çà ne marche pas pour Thisworkbook. Personnellement je stocke les lignes en mémoire puis je les recopie dans le Thisworkbook du classeur cible. J'ai eu des plantages énormes. Du coup j'utilise avec parsimonie le Thisworkbook : chaque procédure évenement tient sur 1 seule ligne, par exemple Private sub Workbook_Open: Call WorkbookOpen: End sub Et je mets le code de WorkbookOpen dans un autre module
-- Papyjac
"Versatile" a écrit :
Comment faire en vba ?
Bonjour versatile mais peu locace
Il faut copier les modules 1 par 1 : pour cela, le plus simple et faire des
exports du classeur source puis des imprts dans le classeur cible
Par contre çà ne marche pas pour Thisworkbook. Personnellement je stocke les
lignes en mémoire puis je les recopie dans le Thisworkbook du classeur cible.
J'ai eu des plantages énormes.
Du coup j'utilise avec parsimonie le Thisworkbook : chaque procédure
évenement tient sur 1 seule ligne, par exemple
Private sub Workbook_Open: Call WorkbookOpen: End sub
Et je mets le code de WorkbookOpen dans un autre module
Il faut copier les modules 1 par 1 : pour cela, le plus simple et faire des exports du classeur source puis des imprts dans le classeur cible
Par contre çà ne marche pas pour Thisworkbook. Personnellement je stocke les lignes en mémoire puis je les recopie dans le Thisworkbook du classeur cible. J'ai eu des plantages énormes. Du coup j'utilise avec parsimonie le Thisworkbook : chaque procédure évenement tient sur 1 seule ligne, par exemple Private sub Workbook_Open: Call WorkbookOpen: End sub Et je mets le code de WorkbookOpen dans un autre module
--
News://news.microsoft.com/microsoft.public.fr.excel
Allez en paix
T.Abile
"Versatile" <courrier.perso@gmail.com> a écrit dans le message de
news:44b811af-437f-4fb9-89ec-b11ef53cdcaf@j22g2000hsf.googlegroups.com...
-- News://news.microsoft.com/microsoft.public.fr.excel Allez en paix T.Abile "Versatile" a écrit dans le message de news:
Comment faire en vba ?
michdenis
En supposant que l'on retrouve dans le classeur source et le classeur destination les même modules ayant les mêmes noms, copie cette procédure dans un module du classeur source et exécute-la. Tout le code sera copié dans le classeur de destination.
La chose peut ce compliquer si le nombre de modules de chacun des classeurs est différent et ont un nom différent. Tu dois alors pouvoir indiquer où chacun des codes des modules du classeur source doit se retrouver dans le classeur de destination. Et si dans le classeur de destination, ce module n'existe pas, il faut le créer....etc...
Nul besoin d'ajouter une quelconque référence pour exécuter ceci : '----------------------------------- Sub Copier_Code_Vers_Autre_Classeur()
Dim Wk As Workbook, Nom As String Dim Code As String, C As Object
'le classeur de destination ouvert Set Wk = Workbooks("classeur2")
For Each C In ThisWorkbook.VBProject.VBComponents With C.CodeModule Code = .Lines(1, .CountOfLines) With Wk.VBProject.VBComponents(C.Name).CodeModule .AddFromString Code End With End With Next End Sub '-----------------------------------
"Versatile" a écrit dans le message de news:
Comment faire en vba ?
En supposant que l'on retrouve dans le classeur source et le classeur
destination les même modules ayant les mêmes noms, copie cette
procédure dans un module du classeur source et exécute-la. Tout
le code sera copié dans le classeur de destination.
La chose peut ce compliquer si le nombre de modules de chacun
des classeurs est différent et ont un nom différent. Tu dois alors
pouvoir indiquer où chacun des codes des modules du classeur
source doit se retrouver dans le classeur de destination. Et si
dans le classeur de destination, ce module n'existe pas, il faut
le créer....etc...
Nul besoin d'ajouter une quelconque référence pour exécuter ceci :
'-----------------------------------
Sub Copier_Code_Vers_Autre_Classeur()
Dim Wk As Workbook, Nom As String
Dim Code As String, C As Object
'le classeur de destination ouvert
Set Wk = Workbooks("classeur2")
For Each C In ThisWorkbook.VBProject.VBComponents
With C.CodeModule
Code = .Lines(1, .CountOfLines)
With Wk.VBProject.VBComponents(C.Name).CodeModule
.AddFromString Code
End With
End With
Next
End Sub
'-----------------------------------
"Versatile" <courrier.perso@gmail.com> a écrit dans le message de news:
44b811af-437f-4fb9-89ec-b11ef53cdcaf@j22g2000hsf.googlegroups.com...
Comment faire en vba ?
En supposant que l'on retrouve dans le classeur source et le classeur destination les même modules ayant les mêmes noms, copie cette procédure dans un module du classeur source et exécute-la. Tout le code sera copié dans le classeur de destination.
La chose peut ce compliquer si le nombre de modules de chacun des classeurs est différent et ont un nom différent. Tu dois alors pouvoir indiquer où chacun des codes des modules du classeur source doit se retrouver dans le classeur de destination. Et si dans le classeur de destination, ce module n'existe pas, il faut le créer....etc...
Nul besoin d'ajouter une quelconque référence pour exécuter ceci : '----------------------------------- Sub Copier_Code_Vers_Autre_Classeur()
Dim Wk As Workbook, Nom As String Dim Code As String, C As Object
'le classeur de destination ouvert Set Wk = Workbooks("classeur2")
For Each C In ThisWorkbook.VBProject.VBComponents With C.CodeModule Code = .Lines(1, .CountOfLines) With Wk.VBProject.VBComponents(C.Name).CodeModule .AddFromString Code End With End With Next End Sub '-----------------------------------
Pourquoi je suggère d'enregistrer sous le classeur?
Thisworkbook sert à gérer les évennements de classeur. Dans la plupart des cas il fait donc appel à d'autres macros que l'on peut vouloir executer tantôt à l'ouverture , fermeture ou autre évennement, mais qui souvent vont servir aussi dans ce classeur.
Il est donc bien courant d'avoir ces macros écrites (pas à 36 endroits) dans un module standard et ainsi le module Thisworkbook ou les modules de feuille y faire appel via l'instruction Call.
Il serait donc possible mais dans nombre de cas hasardeux de vouloir exporter pour le réimporter, uniquement ce module thisworkbook. Sans compter des userforms desquels il pourrait devoir s'assortir
C'est pourquoi je propose plutôt d'enregistrer ce classeur sous le nom du nouveau classeur et le cas échéant effacer les données inutiles des feuilles. Il conservera ainsi à la fois son coeur (thisworkbook) et ses muscles (les modules)sans solution complexe (intervention chirurgicale).
Cordialement.
-- lSteph
Bonjour,
Précision (avec ou sans vba):
Pourquoi je suggère d'enregistrer sous le classeur?
Thisworkbook sert à gérer les évennements de classeur.
Dans la plupart des cas il fait donc appel à d'autres macros que l'on
peut vouloir executer tantôt à l'ouverture , fermeture ou autre
évennement, mais qui souvent vont servir aussi dans ce classeur.
Il est donc bien courant d'avoir ces macros écrites (pas à 36 endroits)
dans un module standard et ainsi le module Thisworkbook ou les modules
de feuille y faire appel via l'instruction Call.
Il serait donc possible mais dans nombre de cas hasardeux de vouloir
exporter pour le réimporter, uniquement ce module thisworkbook.
Sans compter des userforms desquels il pourrait devoir s'assortir
C'est pourquoi je propose plutôt d'enregistrer ce classeur sous le nom
du nouveau classeur et le cas échéant effacer les données inutiles des
feuilles.
Il conservera ainsi à la fois son coeur (thisworkbook) et ses muscles
(les modules)sans solution complexe (intervention chirurgicale).
Pourquoi je suggère d'enregistrer sous le classeur?
Thisworkbook sert à gérer les évennements de classeur. Dans la plupart des cas il fait donc appel à d'autres macros que l'on peut vouloir executer tantôt à l'ouverture , fermeture ou autre évennement, mais qui souvent vont servir aussi dans ce classeur.
Il est donc bien courant d'avoir ces macros écrites (pas à 36 endroits) dans un module standard et ainsi le module Thisworkbook ou les modules de feuille y faire appel via l'instruction Call.
Il serait donc possible mais dans nombre de cas hasardeux de vouloir exporter pour le réimporter, uniquement ce module thisworkbook. Sans compter des userforms desquels il pourrait devoir s'assortir
C'est pourquoi je propose plutôt d'enregistrer ce classeur sous le nom du nouveau classeur et le cas échéant effacer les données inutiles des feuilles. Il conservera ainsi à la fois son coeur (thisworkbook) et ses muscles (les modules)sans solution complexe (intervention chirurgicale).