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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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.
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
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
'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 !
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
'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" <Lemg@discussions.microsoft.com> a écrit dans le message de groupe de discussion :
84B4B3D5-EAEF-411C-97E8-ED48A6088A67@microsoft.com...
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.
'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 !
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
'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
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
'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 !
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
'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
If VBP.Protection = 1 Then
SendKeys "%{F11}%Oe", True
End If
Password = ""
wbActive.Activate
End Sub
'--------------------------------------------------------------------
"Lemg" <Lemg@discussions.microsoft.com> a écrit dans le message de groupe de discussion :
074AD765-4BC2-4203-8D92-2E4B0B0666FF@microsoft.com...
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
'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" <Lemg@discussions.microsoft.com> a écrit dans le message de groupe de discussion
:
84B4B3D5-EAEF-411C-97E8-ED48A6088A67@microsoft.com...
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.
'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
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
'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.