Enregistrer Sous, introduire code dans ThisWorkboo

Mi_

XLDnaute Occasionnel
Bonjour le forum,

J'utilise un macro pour Enregistrer Sous une feuille (seulement) d'un classeur.

ActiveSheet.Copy
ActiveSheet.SaveAs
etc


J'aimerais savoir comment faire pour qu'à la sauvegarde de la feuille en un nouveau fichier, soit introduit le code bla-bla dans son ThisWorkbook.

Merci pour toute aide,
Mi_
 

Zon

XLDnaute Impliqué
Re:Enregistrer Sous, introduire code dans ThisWork

Salut,

Tu n'es pas assez précis mais pour te mettre sur la voie voici un exemple pour rajouter du code évènementiel (ici dans thisworkbook_open) dans le classeur actif:

Sub Test()
 
Dim Chaine$
    Chaine = 'msgbox ''coucou XLD!'''
    AjouterProcEven ActiveWorkbook, 'ThisWorkbook', 'Open', 'Workbook', Chaine
End Sub
 
   
Sub AjouterProcEven(C As Workbook, NomModule$, Evenement$, Objet$, Code$)
   
With C.VBProject.VBComponents(NomModule).CodeModule
      .InsertLines .CreateEventProc(Evenement, Objet) + 1, Code
   
End With
 
End Sub

A+++
 

Mi_

XLDnaute Occasionnel
Re:Enregistrer Sous, introduire code dans ThisWork

Bonjour Zon, le forum,

Ton code m'est très utile. Mais comment faire pour y ajouter plusieurs lignes de code ?

Ex:
msgbox 'coucou XLD!'
Application.ScreenUpdating = False
ActiveWindow.DisplayGridlines = False
etc


Merci de ton aide,
Mi_
 

Zon

XLDnaute Impliqué
Re:Enregistrer Sous, introduire code dans ThisWork

Salut,


Un autre exemple , on utilise vblf pour passer à la ligne ici on passe en paramètre une variable.



Sub Test()
 
Dim Chaine$, Titre$
    Titre = 'coucou XLD!'
    Chaine = 'msgbox ''coucou XLD!''' & vbLf
    Chaine = Chaine & ' application.screenupdating=false' & vbLf
    Chaine = Chaine & ' affichage  ' & ' Titre  '
    AjouterProcEven ActiveWorkbook, 'ThisWorkbook', 'Open', 'Workbook', Chaine
End Sub
 
 
Sub Affichage(ByVal Msg$)
    MsgBox Msg
 
End Sub
 
   
Sub AjouterProcEven(C As Workbook, NomModule$, Evenement$, Objet$, Code$)
   
With C.VBProject.VBComponents(NomModule).CodeModule
      .InsertLines .CreateEventProc(Evenement, Objet) + 1, Code
   
End With
 
End Sub


A+++
 

Mi_

XLDnaute Occasionnel
Re:Enregistrer Sous, introduire code dans ThisWork

Zon, j'appelle encore une fois à ta gentilesse.

Stp, comment faire pour introduire des lignes de code, par exemple
Sub Imprimerlafeuille
ActiveWindow.SelectedSheets.PrintOut
End Sub


cette fois dans un module (Module1 par ex) au lieu de ThisWorkbook ?
 

Zon

XLDnaute Impliqué
Re:Enregistrer Sous, introduire code dans ThisWork

Re,

Une petite précision sur le dernier code:

en écrivant & ' Titre ' on met la variable Titre dans le code si on veut y mettre la valeur que contient un e varaible ' affichage ' & '''' & Titre & '''' .

Enfin pour te répondre, avec un epu de curiosité si tu regardes du côté des méthodes de l'objert codemodule tu aurais vu addfromstring ....


Sub Test()
 
Dim Ch$
  Ch = 'Sub Imprimerlafeuille' & vbLf
  Ch = Ch & ' ActiveWindow.SelectedSheets.PrintOut' & vbLf
  Ch = Ch & 'End Sub'
  AjouterCode ActiveWorkbook, 'Module1', Ch
End Sub


Sub AjouterCode(C As Workbook, NomModule$, Code$)
 
With C.VBProject.VBComponents(NomModule).CodeModule
    .AddFromString Code
   
End With
End Sub


A+++
 

Mi_

XLDnaute Occasionnel
Re:Enregistrer Sous, introduire code dans ThisWork

Bonjour Zon, eh oui c'est encore moi !

D'abord, merci de ton aide.

Cependant, j'ai deux petites problèmes:

D'abord, à chaque fois que je lance le macro
Sub Test()
Dim Chaine$
Chaine = 'msgbox ''coucou XLD!'''
Chaine = Chaine & ' application.screenupdating=false' & vbLf
etc
AjouterProcEven ActiveWorkbook, 'ThisWorkbook', 'Open', 'Workbook', Chaine
End Sub

j'ai la fenêtre de l'éditeur VBA qui s'ouvre tout seule. Aucune erreur, juste l'éditeur qui s'ouvre, et qu'on doit bien sûr refermer manuellement.

Ensuite, pour ton code pour inserer des lignes dans un module, j'ai la ligne
With C.VBProject.VBComponents(NomModule).CodeModule
qui plante. Tenant comte qu'il s'agit d'un nouveau classeur, ne faudrait-il pas créer d'abord un module pour y mettre ensuite le code ?

Merci,
Mi_
 

Mi_

XLDnaute Occasionnel
Re:Enregistrer Sous, introduire code dans ThisWork

Re,

Finalement j'ai trouvé pour le code dans ThisWorkbook: (sans ouvrir la fenêtre VBA)
Sub NewCode()
Dim X As Integer
With ActiveWorkbook.VBProject.VBComponents('ThisWorkbook').CodeModule
X = .CountOfLines
.InsertLines X + 1, 'Private Sub Workbook_Activate()'
.InsertLines X + 2, 'Application.ScreenUpdating = False'
....
End With
End Sub


et pour créer un Module dans le nouveau classeur:
Sub MakeModule()
Set NewM = ActiveWorkbook.VBProject.VBComponents.Add(1)
With ActiveWorkbook.VBProject.VBComponents(NewM.Name).CodeModule
End With
End Sub


pour introduire le code dedans:
ActiveWorkbook.VBProject.VBComponents('Module1').CodeModule

Maintenant la fenêtre VBE n'apparaît plus, mais le code pour la fermer aurait été:
Sub FermeVBA()
Application.VBE.MainWindow.Visible = False
End Sub



Merci pour ta patience, Zon.
A bientôt,
Mi_
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T