Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copier ThisWorkbook et ses macros vers un nouveau classeur

7 réponses
Avatar
Versatile
Comment faire en vba ?

7 réponses

Avatar
Mgr Banni
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 ?


Avatar
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 ?



Avatar
Mgr.Abile
Bonjour d'après Vêpres,

http://frederic.sigonneau.free.fr/code/VBE/AjouterDuCodeDansUnModule.txt

--
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 ?


Avatar
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 ?
Avatar
LSteph
Enregistrer sous

Versatile a écrit :
Comment faire en vba ?


Avatar
LSteph
...en vba bien sûr!
save as

LSteph a écrit :
Enregistrer sous

Versatile a écrit :
Comment faire en vba ?




Avatar
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).

Cordialement.

--
lSteph