Créer un module de code VB dans un autre workbook
Le
Lemg
Bonjour,
J'ai posé une question le 31 mars dernier qui se nommait "Activation des
Macros". Grâce aux réponses que j'ai obtenu, j'arrive à partir d'une macro
dans un classeur à créer dans ce même classeur un module et y écrire un code.
J'arrive aussi à créer un bouton et à y affecter la nouvelle procédure ainsi
crée.
Ce que je voudrais faire maintenant c'est à partir d'une macro dans un
classeur, ouvrir un classeur déjà existant, créer dans ce classeur le bouton,
le module et le code. Jusqu'à maintenant, j'arrive à ouvrir le classeur,
j'arrive à y créer le bouton, mais je n'arrive pas à créer le module et y
écrire le code.
Est-ce que quelqu'un peut m'aider?
Merci !
J'ai posé une question le 31 mars dernier qui se nommait "Activation des
Macros". Grâce aux réponses que j'ai obtenu, j'arrive à partir d'une macro
dans un classeur à créer dans ce même classeur un module et y écrire un code.
J'arrive aussi à créer un bouton et à y affecter la nouvelle procédure ainsi
crée.
Ce que je voudrais faire maintenant c'est à partir d'une macro dans un
classeur, ouvrir un classeur déjà existant, créer dans ce classeur le bouton,
le module et le code. Jusqu'à maintenant, j'arrive à ouvrir le classeur,
j'arrive à y créer le bouton, mais je n'arrive pas à créer le module et y
écrire le code.
Est-ce que quelqu'un peut m'aider?
Merci !

Poser une question


tu dois ajouter la référence suivante dans la fenêtre de l'éditeur de code
Barre des menus / outils / références et dans la fenêtre ouvrante, tu
coches ceci : "'Microsoft Visual Basic For Applications Extensibility 5.3"
Cependant, tu peux t'en passer mais tu dois modifier cette ligne de code :
With .VBProject.VBComponents.Add(vbext_ct_StdModule)
Remplace par :
With .VBProject.VBComponents.Add(1)
Le 1 représente la valeur numérique de la constante texte : "vext_ct_StdModule"
Un dernier détail, tu peux enlever la ligne de code ".Save "
l'enregistrement du fichier n'est pas obligatoire... pour valider la procédure.
protégé, comment faire si le projet est protégé?
Merci !
"MichDenis" a écrit :
'--------------------------------------------------------------------
Sub Créer_Une_Procédure()
Dim Code As String
Dim Chemin As String
Dim Fichier As String
Dim Wk As Workbook
Application.ScreenUpdating = False
'Création du code
Code = "Sub Dites_Bonjour()" & vbCrLf
Code = Code & "Msgbox ""bonjour "" & Environ(""UserName"")" & vbCrLf
Code = Code & "End Sub"
'ouverture du nouveau classeur
Chemin = "C:UsersDMDocuments"
Fichier = "Exercice.xls"
'Ouverture du fichier
Set Wk = Workbooks.Open(Chemin & Fichier)
'Déprotection du code , "a" représente le mot de passe
UnprotectVBProject Wk, "a"
Application.ScreenUpdating = False
With Wk 'Avec le nouveau fichier
'Ajout d'un module standard
With .VBProject.VBComponents.Add(1)
'Insertion du code dans le nouveau module
.CodeModule.AddFromString Code
End With
End With
'Création d'un bouton dans la feuil ayant l'index 1
With Wk
With .Worksheets(1)
With .Buttons.Add(400, 76.5, 158.25, 30)
'Le texte du bouton
.Caption = "Dites Bonjour"
'Affecter la macro
.OnAction = Wk.Name & "!Dites_Bonjour"
End With
End With
End With
Wk.Close True
Application.Wait Now + TimeValue("00:00:02")
Set Wk = Workbooks.Open(Chemin & Fichier)
ThisWorkbook.VBProject.VBE.MainWindow.Visible = False
End Sub
'--------------------------------------------------------------------
Sub UnprotectVBProject(WB As Workbook, ByVal Password As String)
Dim VBP As Object, oWin As Object
Dim wbActive As Workbook
Dim i As Integer
Set VBP = WB.VBProject
Set wbActive = ActiveWorkbook
If VBP.Protection <> 1 Then Exit Sub
Application.ScreenUpdating = False
For Each oWin In VBP.VBE.Windows
If InStr(oWin.Caption, "(") > 0 Then oWin.Close
Next oWin
WB.Activate
Application.OnKey "%{F11}"
SendKeys "%{F11}%Oe" & Password & "~~%{F11}", True
If VBP.Protection = 1 Then
SendKeys "%{F11}%Oe", True
End If
Password = ""
wbActive.Activate
End Sub
'--------------------------------------------------------------------
"Lemg"
Merci votre code fonctionne bien lorsque le projet VBA du classeur n'est pas
protégé, comment faire si le projet est protégé?
Merci !
"MichDenis" a écrit :