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

Créer un module de code VB dans un autre workbook

3 réponses
Avatar
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 !

3 réponses

Avatar
MichDenis
Pour faire fonctionner la procédure telle qu'elle est écrite,
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.
Avatar
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 :

Bonjour Lerng,

Essaie ceci en adaptant les variables selon ton application & environnement.

'---------------------------------------------------------
Sub Créer_Une_Procédure()

Dim Code As String
Dim Chemin As String
Dim Fichier As String
Dim Wk As Workbook

'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 = "Classeur2.xls"
'Ouverture du fichier
Set Wk = Workbooks.Open(Chemin & Fichier)

With Wk 'Avec le nouveau fichier
'Ajout d'un module standard
With .VBProject.VBComponents.Add(vbext_ct_StdModule)
'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
.Save
End With
End Sub
'---------------------------------------------------------







"Lemg" a écrit dans le message de groupe de discussion :

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 !





Avatar
MichDenis
C'était ma dernière intervention sur ce fil.

'--------------------------------------------------------------------
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" a écrit dans le message de groupe de discussion :

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 :

Bonjour Lerng,

Essaie ceci en adaptant les variables selon ton application & environnement.

'---------------------------------------------------------
Sub Créer_Une_Procédure()

Dim Code As String
Dim Chemin As String
Dim Fichier As String
Dim Wk As Workbook

'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 = "Classeur2.xls"
'Ouverture du fichier
Set Wk = Workbooks.Open(Chemin & Fichier)

With Wk 'Avec le nouveau fichier
'Ajout d'un module standard
With .VBProject.VBComponents.Add(vbext_ct_StdModule)
'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
.Save
End With
End Sub
'---------------------------------------------------------







"Lemg" a écrit dans le message de groupe de discussion
:

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 !