Excel ajout procédures dynamiquement [Résolu]

Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
- - Dernière réponse : cs_mabrouklepoux
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
- 23 mars 2007 à 09:58
bonjour,
j'ai un fichier excel qui crée une feuille excel à l'intérieur de lui meme. trop fou le truc je vous jure  (on est vendredi je craque désolé ...)
je voudrais pouvoir mettre une procédure dans le ondoubleclick de cette feuille.
idée ???
un truc du style :
Set cursheet.OnDoubleClick = triData
mais en version "quimarche" plutot qu'en verison qui marche pas ...
par avance merci !!!
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
936
Date d'inscription
lundi 19 janvier 2004
Statut
Membre
Dernière intervention
17 mars 2017
3
3
Merci
Salut,
Bon si t'es pas spécialiste de VBA ça va être dur mais bon voilà un code que tu peu adapter pour toi.
J'ai pas testé ce code viens de la toile
Sub AddSheet()
'Patrick Molloy, mpep
Dim wb As Workbook
Dim ws As Worksheet
   
  ' add a new book with a single sheet
  Set wb = Workbooks.Add(xlWBATWorksheet)
  Set ws = wb.ActiveSheet
  ws.Name = "MyNewSheet"
  
  'create a code module
'  Open "MyModule" For Output As #1
'  Print #1, "Private Sub Worksheet_BeforeDoubleClick" _
'               & "(ByVal Target As Range, Cancel As Boolean)"
'  Print #1, "  MsgBox ActiveSheet.Name,,Activeworkbook.name"
'  Print #1, "End Sub"
'  Close #1



  'autre méthode (fs) (évite le fichier temporaire "MyModule")
  Code = "Private Sub Worksheet_BeforeDoubleClick" _
               & "(ByVal Target As Range, Cancel As Boolean)" & vbLf
  Code = Code & "  MsgBox ActiveSheet.Name,,Activeworkbook.name" & vbLf
  Code = Code & "End Sub"
 
  'load the code into the new wb
'  wb.VBProject.VBComponents.Item(2).CodeModule.AddFromFile "MyModule"
  wb.VBProject.VBComponents.Item(2).CodeModule.AddFromString Code



  Set ws = Nothing
  Set wb = Nothing
 
End Sub

Et dessous le code pour créer un bouton et son code puis le détruire





Public Const NomBouton$ = "MonBouton"



Sub CreeBoutonFeuilleEtCode()
Dim Btn As OLEObject, VbCodeMod As Object
Dim i&, Code$
 
  'le bouton
  Set Btn = ActiveSheet.OLEObjects.Add _
                      (ClassType:="Forms.CommandButton.1") '
  i = ActiveSheet.OLEObjects.Count
  With Btn
    .Object.Caption = "Test bouton " & i
    .Object.Font.Bold = True
    .Top = ActiveCell(1, 2).Top
    .Left = ActiveCell(1, 2).Left
    .Name = NomBouton & i
    .Visible = True
  End With
 
  'son code
  Set VbCodeMod = ActiveWorkbook.VBProject. _
                  VBComponents(Btn.Parent.CodeName).CodeModule
              
  Code = "Private Sub " & Btn.Name & "_Click()" & vbLf
  Code = Code & "  MsgBox ""Test réussi : " & Btn.Name & "" & vbLf
  Code = Code & "  ActiveCell.Select" & vbLf
  Code = Code & "End Sub"
 
  VbCodeMod.AddFromString Code
 
End Sub 'fs



Sub NettoieBoutonEtCode()
Dim NomBtn$, Shp As OLEObject, Sht As Worksheet
  For Each Sht In ActiveWorkbook.Sheets
    For Each Shp In Sht.OLEObjects
      NomBtn = Shp.Name
      If Left(NomBtn, 9) = NomBouton Then
        Shp.Delete
        With ActiveWorkbook.VBProject. _
              VBComponents(Sht.CodeName).CodeModule
          Deb = .ProcStartLine(NomBtn & "_Click", 0)
          NbLi = .ProcCountLines(NomBtn & "_Click", 0)
          .DeleteLines Deb, NbLi
        End With
      End If
    Next Shp
  Next Sht
End Sub

Bonne lecture, et bonne prog.

Cordialement, Jean-Paul  

______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 207 internautes nous ont dit merci ce mois-ci

Commenter la réponse de valtrase
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
0
Merci
j'ai trouvé une parade, qui consiste à mettre mon code dans le worsbook, et à en limiter l'execution à une feuille par le biais d'un range.
donc quand je créé ma feuille, j'y créé aussi un range
dans le code du workbook, sur l'evt doubleclic, je vérifie que la cellule cliquée appartient bien à ce range.
c pas top, mais ca me suffit.
je reste preneur d'une manière de modifier le code d'une feuille qu'on créé ...
Commenter la réponse de cs_mabrouklepoux
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
0
Merci
j'ai trouvé une parade, qui consiste à mettre mon code dans le worsbook, et à en limiter l'execution à une feuille par le biais d'un range.
donc quand je créé ma feuille, j'y créé aussi un range
dans le code du workbook, sur l'evt doubleclic, je vérifie que la cellule cliquée appartient bien à ce range.
c pas top, mais ca me suffit.
je reste preneur d'une manière de modifier le code d'une feuille qu'on créé ...
Commenter la réponse de cs_mabrouklepoux
Messages postés
84
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
25 juillet 2008
0
Merci
je suis assez spécialiste donc ca devrait aller. En tout cas, ca fleure carrément bon ce code !
merci de ton aide.
Commenter la réponse de cs_mabrouklepoux