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 !
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #19046871
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.
Lemg
Le #19047971
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"
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 !





MichDenis
Le #19048411
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"
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" :

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 !





Publicité
Poster une réponse
Anonyme