Insérer par VBA une procédure événementielle a une feuille exist an

Le
jpc
Bonjour,

J'utilise une application qui crée un classeur MS Excel. Je voudrais ajouter
du code à une feuille existante dans ce classeur. Il s'agit d'une procédure
worksheet_change. Est-ce possible de le faire au moyen de code VBA (exécuté à
partir d'un autre classeur) ?

Merci pour vos contributions
--
jpc
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
Philippe.R
Le #4859411
Bonsoir,
Regarde du côté de chez Frédéric, il y a ceci entre autres :

http://frederic.sigonneau.free.fr/code/VBE/AjoutFeuilleEtCode.txt
--
http://www.excelabo.net/mpfe/connexion.php
Avec plaisir
Philippe.R
"jpc" news:
Bonjour,

J'utilise une application qui crée un classeur MS Excel. Je voudrais
ajouter
du code à une feuille existante dans ce classeur. Il s'agit d'une
procédure
worksheet_change. Est-ce possible de le faire au moyen de code VBA
(exécuté à
partir d'un autre classeur) ?

Merci pour vos contributions
--
jpc


Michel Gaboly
Le #4859241
Bonsoir,

Voici un exemple :

Il te faut créer un classeur avec 2 modules, l'un nommé pré cisément "MWorksheet" contenant le code que tu veux
avoir dans le module de ta feuille pour gérer l'événement Change :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' Ici ton Code
End Sub

et un second module, dont le nom est sans importance contenant cette proc édure :

Sub InsereProcedure()
Dim Wb As Workbook, NewCode As String
' Création du classeur
Workbooks.Add
Set Wb = ActiveWorkbook
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MWorksheet").CodeModul e
NewCode = .Lines(1, .CountOfLines)
End With
' MAJ du code
With Wb.VBProject.VBComponents(Sheets(1).CodeName).CodeModule
' Le DeleteLines évite de devoir vérifier si le module de la feuille comporte déjà Option Explicit : on
remplace tout.
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub

Cette procédure créer un classeur, puis lire le code du module "MWorksheet", et le recopier dans le module de la
première feuille, en utilsant le CodeName de celle-ci (le nom de la feuille tel qu'il apparaît dans l'environnement VBA
et non sur l'onglet correspondant à la feuille.

Pour que le code de l'événement Change concerne une feuille nom mée "Toto", il faut que celle-ci existe, par exemple
ajoutant cette ligne :

Sheets(1).Name = "Toto"

après le

Workbooks.Add

Il faut également rempacer

With Wb.VBProject.VBComponents(Sheets(1).CodeName).CodeModule

par

With Wb.VBProject.VBComponents(Sheets("Toto").CodeName).CodeModule



Par ailleurs, dans l'environnement Visual Basic, il faut aller dans les r éférences (menu Outils), et cocher "Microsoft
Visual Basic for Applications Extensibility 5.3".

NB - Le numéro de version (5.3) peut varier : sur Mac, il n'y en a p as, il faut cocher "Microsoft Visual Basic for
Applications Extensibility".

Enfin, avec Excel 2003 (et peut-être 2002), il faut aller (dans l'en vironnement Excel, pas VBA) dans le menu "Outils",
piuis dans le sous-menu "Macros" et choisir "Sécurité...". Une fenêtre aparaît ; il faut sélectionner l'onglet "Editeurs
approuvés" et cocher la case "Faire confiance au projet Visual Basic ".

Si on oublie cette étape, la Sub ne s'exécute pas et un message informe l'utilisateur que "le projet n'est pas fiable.".
Il s'agit d'une protection contre les virus écrits en VBA.

Sous Excel 2007, l'interface est différente : le plus simple est d'a fficher l'onglet "Développeur" et de cliquer sur
l'icône "Sécurité des macros" de la zone "Code". Il faut a lors cocher "Accès approuvé au modèle d'objet du projet VB A".


Bonjour,

J'utilise une application qui crée un classeur MS Excel. Je voudra is ajouter
du code à une feuille existante dans ce classeur. Il s'agit d'une procédure
worksheet_change. Est-ce possible de le faire au moyen de code VBA (exà ©cuté à
partir d'un autre classeur) ?

Merci pour vos contributions



--
Cordialement,

Michel Gaboly
www.gaboly.com

Michel Gaboly
Le #4859101
Bonsoir,

Voici un exemple :

Il te faut créer un classeur avec 2 modules, l'un nommé pré cisément "MWorksheet" contenant le code que tu veux
avoir dans le module de ta feuille pour gérer l'événement Change :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' Ici ton Code
End Sub

et un second module, dont le nom est sans importance contenant cette proc édure :

Sub InsereProcedure()
Dim Wb As Workbook, NewCode As String
' Création du classeur
Workbooks.Add
Set Wb = ActiveWorkbook
' Stockage du code du module (lu dans CE CLASSEUR)
With ThisWorkbook.VBProject.VBComponents("MWorksheet").CodeModul e
NewCode = .Lines(1, .CountOfLines)
End With
' MAJ du code
With Wb.VBProject.VBComponents(Sheets(1).CodeName).CodeModule
' Le DeleteLines évite de devoir vérifier si le module de la feuille comporte déjà Option Explicit : on
remplace tout.
.DeleteLines 1, .CountOfLines
.AddFromString NewCode
End With
End Sub

Cette procédure crée un classeur, lit le code du module "MWorks heet", et le recopie dans le module de la première
feuille, en utilsant le CodeName de celle-ci (le nom de la feuille tel qu 'il apparaît dans l'environnement VBA
et non sur l'onglet correspondant à la feuille.

Pour que le code de l'événement Change concerne une feuille nom mée "Toto", il faut que celle-ci existe, par exemple
en ayant ajouté cette ligne :

Sheets(1).Name = "Toto"

après le

Workbooks.Add

Il faut également rempacer

With Wb.VBProject.VBComponents(Sheets(1).CodeName).CodeModule

par

With Wb.VBProject.VBComponents(Sheets("Toto").CodeName).CodeModule



Par ailleurs, dans l'environnement Visual Basic, il faut aller dans les r éférences (menu Outils), et cocher "Microsoft
Visual Basic for Applications Extensibility 5.3".

NB - Le numéro de version (5.3) peut varier : sur Mac, il n'y en a p as, il faut cocher "Microsoft Visual Basic for
Applications Extensibility".

Enfin, avec Excel 2003 (et peut-être 2002), il faut aller (dans l'en vironnement Excel, pas VBA) dans le menu "Outils",
puis dans le sous-menu "Macros" et choisir "Sécurité...". Une f enêtre aparaît ; il faut sélectionner l'onglet "Editeurs
approuvés" et cocher la case "Faire confiance au projet Visual Basic ".

Si on oublie cette étape, la Sub ne s'exécute pas et un message informe l'utilisateur que "le projet n'est pas fiable.".
Il s'agit d'une protection contre les virus écrits en VBA.

Sous Excel 2007, l'interface est différente : le plus simple est d'a fficher l'onglet "Développeur" et de cliquer sur
l'icône "Sécurité des macros" de la zone "Code". Il faut a lors cocher "Accès approuvé au modèle d'objet du projet VB A".


Bonjour,

J'utilise une application qui crée un classeur MS Excel. Je voudra is ajouter
du code à une feuille existante dans ce classeur. Il s'agit d'une procédure
worksheet_change. Est-ce possible de le faire au moyen de code VBA (exà ©cuté à
partir d'un autre classeur) ?

Merci pour vos contributions



--
Cordialement,

Michel Gaboly
www.gaboly.com

Publicité
Poster une réponse
Anonyme