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

code pour ajouter script à onglet

5 réponses
Avatar
Sylvain
Bonjour à tous !

J'ai une macro qui crée en automatique un grand nombre d'onglet s(sur le
même modèle mais avec des données différentes) et je voudrais qu'à la
création de chacun, ma fonction lui ajoute en plus un script VBA (sub
événementiel pour surveiller les changements de sélection).

Savez-vous comment procéder ?

Merci à tous

Sylvain Caillet

5 réponses

Avatar
garnote
Salut Sylvain,

Quand ta macro a terminé son boulot:
1. Fais un clic droit sur un onglet quelconque de ton classeur,
2. Clique sur Visualiser le code,
3. Tape éventuellement Ctrl+R pour faire apparaître l'explorateur de
projets,
4. Double-clique sur ThisWorbook,
5. Dans la liste déroulante (Général), choisis Workbook et dans la liste
déroulante (Déclarations), choisis SheetSelectionChange
Tu devrais obtenir :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target
As Range)

End Sub

Alors, par exemple, si tu écris If Target.Address = "$A$1" Then MsgBox
"Bonjour"
dans la macro précédente, le message "Bonjour" apparaîtra à chaque fois que
tu
sélectionneras A1 dans une feuille quelconque de ton classeur.

Cela te convient-il ?

Serge




"Sylvain" a écrit dans le message de news:
42fcba7a$0$25033$
Bonjour à tous !

J'ai une macro qui crée en automatique un grand nombre d'onglet s(sur le
même modèle mais avec des données différentes) et je voudrais qu'à la
création de chacun, ma fonction lui ajoute en plus un script VBA (sub
événementiel pour surveiller les changements de sélection).

Savez-vous comment procéder ?

Merci à tous

Sylvain Caillet



Avatar
michdenis
Bonjour Sylvain,

Suppose que tu veuilles ajouter 5 feuilles à ton projet et insérer dans chaque module feuille le même code. Copie la procédure
suivante dans le module de ton classeur .

'-------------------------------------
Sub AjouterCodeAUneFeuille()

Dim A As Integer, Nom As String
Nom = ActiveSheet.Name
Application.ScreenUpdating = False
For A = 1 To 5 ' à déterminer
Worksheets.Add after:=Sheets(Sheets.Count)
AjouterLeCode ThisWorkbook, ActiveSheet
Next
Worksheets(Nom).Activate
End Sub
'-------------------------------------
Sub AjouterLeCode(Wk As Workbook, Sh As Worksheet)

Dim Code As String
'Tu inscris le code que tu désires sous cette forme ...
Code = "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
Code = Code & vbCrLf & "MsgBox Me.Name"
Code = Code & vbCrLf & "End Sub"

With Wk
With .VBProject.VBComponents(Sh.Name).CodeModule
.AddFromString Code
End With
End With

End Sub
'-------------------------------------


Salutations!



"Sylvain" a écrit dans le message de news: 42fcba7a$0$25033$
Bonjour à tous !

J'ai une macro qui crée en automatique un grand nombre d'onglet s(sur le
même modèle mais avec des données différentes) et je voudrais qu'à la
création de chacun, ma fonction lui ajoute en plus un script VBA (sub
événementiel pour surveiller les changements de sélection).

Savez-vous comment procéder ?

Merci à tous

Sylvain Caillet
Avatar
Sylvain
Merci !

La technique est la bonne à une toute petite modif près : j'ai dû utiliser
sh.codeName au lieu de sh.name. Mais il reste un problème à surmonter car à
l'exécution, j'ai un message d'erreur persistent à la ligne du
.addCode(code) :
"Impossible d'entrer en mode arrêt maintenant" et je ne trouve pas le
déblocage.

J'ai réussi à le faire marcher une fois de la manière suivante :
- point d'arrêt sur ligne du .addCode
- ajout de l'objet ActiveWorkbook.VBProject.VBComponents(Sh.CodeName) comme
espion
- dans la fenêtre espion, j'explore l'objet codeModule, ce qui a pour effet
d'ouvrir visuellement la page Script de la feuille en question
- puis F8 et le addCode s'éxécute correctement
- fin du prog

Si ça peut aider ...

Merci de ton aide

Sylvain

"michdenis" a écrit dans le message de news:

Bonjour Sylvain,

Suppose que tu veuilles ajouter 5 feuilles à ton projet et insérer dans
chaque module feuille le même code. Copie la procédure
suivante dans le module de ton classeur .

'-------------------------------------
Sub AjouterCodeAUneFeuille()

Dim A As Integer, Nom As String
Nom = ActiveSheet.Name
Application.ScreenUpdating = False
For A = 1 To 5 ' à déterminer
Worksheets.Add after:=Sheets(Sheets.Count)
AjouterLeCode ThisWorkbook, ActiveSheet
Next
Worksheets(Nom).Activate
End Sub
'-------------------------------------
Sub AjouterLeCode(Wk As Workbook, Sh As Worksheet)

Dim Code As String
'Tu inscris le code que tu désires sous cette forme ...
Code = "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
Code = Code & vbCrLf & "MsgBox Me.Name"
Code = Code & vbCrLf & "End Sub"

With Wk
With .VBProject.VBComponents(Sh.Name).CodeModule
.AddFromString Code
End With
End With

End Sub
'-------------------------------------


Salutations!



"Sylvain" a écrit dans le message de news:
42fcba7a$0$25033$
Bonjour à tous !

J'ai une macro qui crée en automatique un grand nombre d'onglet s(sur le
même modèle mais avec des données différentes) et je voudrais qu'à la
création de chacun, ma fonction lui ajoute en plus un script VBA (sub
événementiel pour surveiller les changements de sélection).

Savez-vous comment procéder ?

Merci à tous

Sylvain Caillet





Avatar
Sylvain
Ca marche si je ne suis pas en mode debug ... Merci de de votre aide

Sylvain
"Sylvain" a écrit dans le message de news:
43018c48$0$20252$
Merci !

La technique est la bonne à une toute petite modif près : j'ai dû utiliser
sh.codeName au lieu de sh.name. Mais il reste un problème à surmonter car
à l'exécution, j'ai un message d'erreur persistent à la ligne du
.addCode(code) :
"Impossible d'entrer en mode arrêt maintenant" et je ne trouve pas le
déblocage.

J'ai réussi à le faire marcher une fois de la manière suivante :
- point d'arrêt sur ligne du .addCode
- ajout de l'objet ActiveWorkbook.VBProject.VBComponents(Sh.CodeName)
comme espion
- dans la fenêtre espion, j'explore l'objet codeModule, ce qui a pour
effet d'ouvrir visuellement la page Script de la feuille en question
- puis F8 et le addCode s'éxécute correctement
- fin du prog

Si ça peut aider ...

Merci de ton aide

Sylvain

"michdenis" a écrit dans le message de news:

Bonjour Sylvain,

Suppose que tu veuilles ajouter 5 feuilles à ton projet et insérer dans
chaque module feuille le même code. Copie la procédure
suivante dans le module de ton classeur .

'-------------------------------------
Sub AjouterCodeAUneFeuille()

Dim A As Integer, Nom As String
Nom = ActiveSheet.Name
Application.ScreenUpdating = False
For A = 1 To 5 ' à déterminer
Worksheets.Add after:=Sheets(Sheets.Count)
AjouterLeCode ThisWorkbook, ActiveSheet
Next
Worksheets(Nom).Activate
End Sub
'-------------------------------------
Sub AjouterLeCode(Wk As Workbook, Sh As Worksheet)

Dim Code As String
'Tu inscris le code que tu désires sous cette forme ...
Code = "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
Code = Code & vbCrLf & "MsgBox Me.Name"
Code = Code & vbCrLf & "End Sub"

With Wk
With .VBProject.VBComponents(Sh.Name).CodeModule
.AddFromString Code
End With
End With

End Sub
'-------------------------------------


Salutations!



"Sylvain" a écrit dans le message de news:
42fcba7a$0$25033$
Bonjour à tous !

J'ai une macro qui crée en automatique un grand nombre d'onglet s(sur le
même modèle mais avec des données différentes) et je voudrais qu'à la
création de chacun, ma fonction lui ajoute en plus un script VBA (sub
événementiel pour surveiller les changements de sélection).

Savez-vous comment procéder ?

Merci à tous

Sylvain Caillet









Avatar
michdenis
Bonjour Sylvain,

Effectivement, ce type de procédure ne peut pas s'exécuter en mode pas à pas. C'est le comportement normal d'excel.


Salutations!


"Sylvain" a écrit dans le message de news: 43018eec$0$25056$
Ca marche si je ne suis pas en mode debug ... Merci de de votre aide

Sylvain
"Sylvain" a écrit dans le message de news:
43018c48$0$20252$
Merci !

La technique est la bonne à une toute petite modif près : j'ai dû utiliser
sh.codeName au lieu de sh.name. Mais il reste un problème à surmonter car
à l'exécution, j'ai un message d'erreur persistent à la ligne du
.addCode(code) :
"Impossible d'entrer en mode arrêt maintenant" et je ne trouve pas le
déblocage.

J'ai réussi à le faire marcher une fois de la manière suivante :
- point d'arrêt sur ligne du .addCode
- ajout de l'objet ActiveWorkbook.VBProject.VBComponents(Sh.CodeName)
comme espion
- dans la fenêtre espion, j'explore l'objet codeModule, ce qui a pour
effet d'ouvrir visuellement la page Script de la feuille en question
- puis F8 et le addCode s'éxécute correctement
- fin du prog

Si ça peut aider ...

Merci de ton aide

Sylvain

"michdenis" a écrit dans le message de news:

Bonjour Sylvain,

Suppose que tu veuilles ajouter 5 feuilles à ton projet et insérer dans
chaque module feuille le même code. Copie la procédure
suivante dans le module de ton classeur .

'-------------------------------------
Sub AjouterCodeAUneFeuille()

Dim A As Integer, Nom As String
Nom = ActiveSheet.Name
Application.ScreenUpdating = False
For A = 1 To 5 ' à déterminer
Worksheets.Add after:=Sheets(Sheets.Count)
AjouterLeCode ThisWorkbook, ActiveSheet
Next
Worksheets(Nom).Activate
End Sub
'-------------------------------------
Sub AjouterLeCode(Wk As Workbook, Sh As Worksheet)

Dim Code As String
'Tu inscris le code que tu désires sous cette forme ...
Code = "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
Code = Code & vbCrLf & "MsgBox Me.Name"
Code = Code & vbCrLf & "End Sub"

With Wk
With .VBProject.VBComponents(Sh.Name).CodeModule
.AddFromString Code
End With
End With

End Sub
'-------------------------------------


Salutations!



"Sylvain" a écrit dans le message de news:
42fcba7a$0$25033$
Bonjour à tous !

J'ai une macro qui crée en automatique un grand nombre d'onglet s(sur le
même modèle mais avec des données différentes) et je voudrais qu'à la
création de chacun, ma fonction lui ajoute en plus un script VBA (sub
événementiel pour surveiller les changements de sélection).

Savez-vous comment procéder ?

Merci à tous

Sylvain Caillet