Bonjour,
J'ai une macro qui crée un nouvel onglet, je souhaiterai une fois que l'onglet est crée y affecter des macro du type private_sub.
Bonjour,
J'ai une macro qui crée un nouvel onglet, je souhaiterai une fois que l'onglet est crée y affecter des macro du type private_sub.
Apres quelques recherche j'ai trouvé ce code proposé par SilkyRoad qui pourrait correspondre à ce que j'attend:
Par contre dans ce code on rajoute un module de classe, ce que je souhaiterai c'est créer une nouvelle feuille est y ajouter le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 Sub creationModule() 'Nécéssite d'activer la référence '"Visual basic For Application Extensibility 5.3" ' Dim Wb As Workbook Dim VBComp As VBComponent Dim X As Integer 'Définit le classeur cible Set Wb = Workbooks("Classeur1.xls") 'Ajoute un module standard dans le classeur Set VBComp = Wb.VBProject.VBComponents.Add(1) 'Renomme le module VBComp.Name = "NouveauModule" 'Ajoute une macro dans le module With VBComp.CodeModule X = .CountOfLines .InsertLines X + 1, "Sub laMacro()" .InsertLines X + 2, "Range(""A1"").Value = ""Coucou""" .InsertLines X + 3, "End Sub" End With End Sub
Tout ceci est t'il possible? Par avance merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 1 Then Select Case MsgBox("Mettre à jour la date et l'heure", vbOKCancel) Case vbOK Cells(Target.Row, 1) = Date Cells(Target.Row, 1).NumberFormat = "dd/mm/yyyy" Cells(Target.Row, 2) = Time Cells(Target.Row, 2).NumberFormat = "hh:mm" End Select End If End Sub
Salut zeralium et le forum
Juste une proposition : pourquoi ne pas utiliser les macros automatiques WorkBook ?Cette macro qui est sur chaque module de classe pourrait être remplacée par une unique sur le module ThisWorkBook ;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 1 Then Select Case MsgBox("Mettre à jour la date et l'heure", vbOKCancel) Case vbOK Cells(Target.Row, 1) = Date Cells(Target.Row, 1).NumberFormat = "dd/mm/yyyy" Cells(Target.Row, 2) = Time Cells(Target.Row, 2).NumberFormat = "hh:mm" End Select End If End SubIl suffirait d'exclure les feuilles non concernée (avec un test en début). Toute nouvelle feuille de ce classeur serait automatiquement concernée, sans s'embêter a une création de code par du code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Cancel=true If Target.Column = 1 Then Select Case MsgBox("Mettre à jour la date et l'heure", vbOKCancel) Case vbOK Cells(Target.Row, 1) = Date Cells(Target.Row, 1).NumberFormat = "dd/mm/yyyy" Cells(Target.Row, 2) = Time Cells(Target.Row, 2).NumberFormat = "hh:mm" End Select End Sub
Cancel = True Permet de ne pas avoir l'affichage du menu contextuel
A+
Merci Gorfael pour cette remarque, en faisant de cette maniere cela simplifie grandement les choses.
Merci encore.![]()
Partager