Pb pour affeter une "ThisWorkBook" à un new classeur

T

thuan

Guest
Bonjour le forum

J'ai un pb d'affectation d'une "ThisworkBook" à un nouveau classeur que je créer.

Voila je m'explique je créer dans un classeur 2 userforms
La premiere userform est celle qui me permet de tout gerer, c'est à dire de copier des feuilles excel dans mon nouveau classeur que je créer en meme temps.
La deuxième userform c'est celle que j'applique et donc que j'affecte à mon nouveau classeur.
Je sais comment faire pour créer ces fonctions mais le pb que j'ai c'est que après création de mon nouveau classeur et enregistrement de celui ci, je veux que ma userform2 ce lance automatiquement à chaque démarrage de mon nouveau classeur. Je sais qu'il faut mettre le code suivant dans le "ThisworkBook"

Private Sub Workbook_Open()
UserForm2.Show 0
End Sub

Private Sub workbook_Initialize()

End Sub

Mais le truc c'est que je veux que ce code s'écrive automatiquement dans le "ThisworkBook" de mon nouveau classeur. au lieu de ca il me copie le ThisWorkBook dans le répertoire Module de Classe
je joins un fichier pour exemple

Merci pour votre aide
 

Pièces jointes

  • Classeur1.zip
    12.5 KB · Affichages: 26
  • Classeur1.zip
    12.5 KB · Affichages: 25
  • Classeur1.zip
    12.5 KB · Affichages: 23
@

@+Thierry

Guest
Bonjour Thuan, le Forum

Je n'avais pas vu ta question, je m'y suis largement interressé à l'époque :

=> Voir ce Fil Lien supprimé

En autre tu pourras y trouver de quoi détruire mais aussi de quoi écrire dans ThisWorkbook :

Ecrire une évènementielle dans le module "ThisWorkBook" d'un autre classeur (2 exemples):

Pour cet exemple l'autre classeur se nomme donc "New.xls"

Sub EcrireThisWorkBook1()
Dim X As Integer

With Workbooks("New.xls").VBProject.VBComponents("ThisWorkbook").CodeModule
X = .CountOfLines
.InsertLines X + 1, "Private Sub Workbook_Open()"
.InsertLines X + 2, "UserForm2.Show 0"
.InsertLines X + 3, "End Sub"
End With
End Sub


ou encore :

Sub EcrireThisWorBook2()
Dim VBA As String
VBA = VBA & "Private Sub Workbook_Open()" & vbCrLf
VBA = VBA & "UserForm2.Show 0" & vbCrLf
VBA = VBA & "End Sub" & vbCrLf
With Workbooks("New.xls").VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString VBA
End With
End Sub

Bonne Après Midi
@+Thierry
 
T

thuan

Guest
Bonjour Thierry, le forum

Merci pour ton aide, mais vois tu j'essaye d'incorporer ton code dans le mien et cela donne ca:

Private Sub CommandButton1_Click()
Dim Classeur As Workbook
Dim Feuille As Worksheet
Dim MyArray() As String
Dim i As Integer
Dim X As Byte
Dim Y As Integer
Dim MyUSF As String
MyUSF = "I:\Production\HBU\UserForm2.frm"
Dim MyThisWorkBook As String
MyThisWorkBook = "I:\Production\HBU\ThisWorkbook.cls"
Application.ScreenUpdating = False
Set Classeur = ThisWorkbook
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
ReDim Preserve MyArray(X)
MyArray(X) = ListBox1.List(i)
X = X + 1
End If
Next
Classeur.Worksheets(MyArray).Copy
With ActiveWorkbook.VBProject
.VBComponents.Import MyUSF
.VBComponents.Import MyThisWorkBook
.VBComponents("ThisWorkbook").CodeModule
Y = .CountOfLines
.InsertLines Y + 1, "Private Sub Workbook_Open()"
.InsertLines Y + 2, "UserForm2.Show 0"
.InsertLines Y + 3, "End Sub"
End With
End Sub

Mais il me met comme message d'erreur pour .CodeModule
utilisation incorrecte de la propriété
 
Z

Zon

Guest
Salut,

Une autre approche en créant un procédure d'évènement.

With ActiveWorkbook.VBProject
.VBComponents.Import MyUSF
With .VBComponents("ThisWorkbook").CodeModule
.InsertLines .CreateEventProc("Open", "Workbook") + 1, "UserForm2.Show 0"
End With
End With

Sinon pour la soluce de @Thierry
with .VBComponents("ThisWorkbook").CodeModule
Y = .CountOfLines
.InsertLines Y + 1, "Private Sub Workbook_Open()"
.InsertLines Y + 2, "UserForm2.Show 0"
.InsertLines Y + 3, "End Sub"
End With
end with
end sub

A+++
 
@

@+Thierry

Guest
Bonjour Zon, re Thuan,

Merci, et donc ravi que tu t'en soies sorti Thuan.

Et sinon merci aussi à Zon, interressant cette méthode CreateEventProc, j'étais tombé dessus au hazard de mes ballades dans l'aide, mais je ne parvenais pas à inserrer une instruction dedans ! Donc je n'en voyais pas l'utilité !! lol

Enfin donc encore un bon renseignement de ta part Zon, merci.

Bonne fin de Journée
@+Thierry
 
@

@+Thierry

Guest
C'est re moi,

Suite à cette découverte j'ai un peu travaillé sur ce CreateEventProc... Et j'ai fait la même chose que Zon mais en décomposé pour mieux comprendre le processus ...

Option Explicit

Sub ZonTestEnDécomposé()
Dim TextLocation As Integer
Dim MyVBACode As String

MyVBACode = "MsgBox ""Hello le Forum XLD"""

With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString "Option Explicit"
TextLocation = .CreateEventProc("Open", "Workbook")
.InsertLines TextLocation + 1, MyVBACode
End With

End Sub

Très interressant...

@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 246
Messages
2 086 578
Membres
103 247
dernier inscrit
bottxok