Enregistrer Sous, introduire code dans ThisWorkboo

  • Initiateur de la discussion Initiateur de la discussion Mi_
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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_
 
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+++
 
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_
 
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+++
 
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 ?
 
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+++
 
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_
 
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_
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
430
Réponses
3
Affichages
878
Réponses
9
Affichages
882
Réponses
1
Affichages
494
Retour