cs_DanyDan34
Messages postés8Date d'inscriptiondimanche 3 juin 2007StatutMembreDernière intervention 5 juin 2007
-
3 juin 2007 à 23:37
cs_DanyDan34
Messages postés8Date d'inscriptiondimanche 3 juin 2007StatutMembreDernière intervention 5 juin 2007
-
4 juin 2007 à 13:51
Bonjour,
est-il possible d'écrire du code ( par exemple définir des événements) depuis un classeur dans les modules ou objets Excel d'un nouveau classeur crée par code ( Genre "Workbooks.add" ) .
Plus précisément mon but serais que mon application crée un nouveau classeur vierge (ca je sais faire) puis définisse des événements par code dans ce nouveau classeur, notamment dans l' objet Excel "ThisWorkbook".
Cela est-il envisageable ?
Merci d'avance
A voir également:
Définir événements dans classeur vierge par prog depuis un autre classeur
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 3 juin 2007 à 23:56
Salut,
Bien sur c'est possible ne sachant pas trop ce que tu veux faire voici un bout de code pris sur la toile. Avec lui tu saura créer un bouton et son code ......
Tu peux le modifier ou t'en inspirer pour créer ton propre code.
Tu peux aussi si tu le désire écrire dans un classeur fermé en utilisant ADO
'Cet exemple consiste à ajouter une nouvelle feuille, un bouton
'de commande sur cette feuille et le code de l'événement Click
'du bouton.
'Denis Michon, mpfe
Sub Ajouter_Feuille_Bouton()
Dim NouvelleFeuille As Worksheet, NouveauBouton As OLEObject
Dim Code$, NextLine&
' Ajoute une Nouvelle feuille
Set NouvelleFeuille = Sheets.Add
' Ajoute un bouton de Commande
Set NouveauBouton = NouvelleFeuille.OLEObjects.Add _
("Forms.CommandButton.1")
With NouveauBouton
.Left = 4
.Top = 4
.Width = 100
.Height = 30
.Object.Caption = "Retour feuille 1..."
End With
' Ecriture du code dans le module de la feuille (fs)
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With
Satanas09
Messages postés18Date d'inscriptionsamedi 2 juin 2007StatutMembreDernière intervention22 août 2008 4 juin 2007 à 13:28
Bonjour,
pour un classeur tout neuf tu peu utiliser AddFromSring...par exemple :
'
' Pour pouvoir exécuter ce code
' rajouter la référence à "Microsof visual Basic 6.0 Extensibility"
'
Sub CreationClasseur()
Dim wk As Workbook
Dim st As String
Set wk = Workbooks.Add
st = "Private Sub Workbook_BeforeClose(Cancel As Boolean)" & vbCrLf
st = st & "MsgBox ""On ferme""" & vbCrLf
st = st & "End Sub"
wk.VBProject.VBComponents.Add(vbext_ct_ClassModule).CodeModule.AddFromString st
End Sub
Satanas09 ..... Sapristi, saprista, souris grise et face de rat
cs_DanyDan34
Messages postés8Date d'inscriptiondimanche 3 juin 2007StatutMembreDernière intervention 5 juin 2007 4 juin 2007 à 12:06
Merci de cette réponse Valtrase , d'autant plus précieuse que je trouve que l'on ne trouve pas beaucoup de réponses sur ces sujets dans l'aide en ligne d'office.
Je vais m'entrainer a partir de cet exemple.
Une petite précision, si possible:
pour définir précisément l'événement "BeforeSave" du classeur cible , comment faudrait-il reécrire la ligne de code suivante (extraite de ton exemple) :
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 4 juin 2007 à 13:35
Re,
Comme tu peux le constater dans l'exemple cette ligne qui est incomplète dans ta reprise sert à insérer le code que tu as écris
Donc :
'Le With te permet de déterniner dans quel module tu travaille ici le module de la feuille active mais tu peux la nomer (ActiveSheet.Name deviens "Tafeuille"
With ThisWorkbook.VBProject.VBComponents ActiveSheet.Name).CodeModule
'Avec le nextLine on se positionne à la fin du code (s'il existe du code)
NextLine = .CountOfLines + 1
'Ici tu demande l'insertion du code que tu as créé
.InsertLines NextLine, Code
End With
Donc en gros tu ne peux pas utiliser ses lignes sans avoir auparavant créer ton code et l'avoir mis dans la variable Code