Excel ajout procédures dynamiquement

Résolu
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 - 9 mars 2007 à 13:18
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 !!!

4 réponses

valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
22 mars 2007 à 21:23
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é
3
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
9 mars 2007 à 14:19
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éé ...
0
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
9 mars 2007 à 14:19
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éé ...
0
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
23 mars 2007 à 09:58
je suis assez spécialiste donc ca devrait aller. En tout cas, ca fleure carrément bon ce code !
merci de ton aide.
0
Rejoignez-nous