Macro qui écrit d'autres macros

  • Initiateur de la discussion Philou
  • Date de début
P

Philou

Guest
bonjour,

je cherche à faire une macro qui, quand elle s'exécute, permet de créer une nouvelle macro :
je clique sur un bouton qui crée une nouvelle feuile (jusqu'ici pas de pb). sur cette nouvelle feuille, je veux créer un bouton (pas de pb) qui permet de revenir sur la feuille précédente et je n'y arrive pas...

comment puis-je faire??

merci d'avance
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:Macro qui écrit d'autres macros EXCLUSIF !!!

Bonjour Philou, le Forum

En partant du Principe que la Feuille que tu ajoutes et toujours en dernière position d'Index...

En exclusivité voici un Barbatruc qui me sert à mes Démos :

Sub AddWorkSheet()
Dim MyButton As OLEObject

With ThisWorkbook
.Worksheets.Add After:=.Worksheets(.Worksheets.Count)
   
With .Worksheets(.Worksheets.Count)
       
Set MyButton = .OLEObjects.Add(ClassType:='Forms.CommandButton.1')
   
End With
End With

   
With MyButton
    .Left = 0
    .Top = 0
    .Width = 150
    .Height = 30
       
With .Object
        .Caption = 'Go
To UserForm !!!'
        .BackColor = 0
        .ForeColor = 65535
           
With .Font
            .Bold =
True
            .Italic =
True
            .Size = 12
           
End With
       
End With
   
End With
End Sub


Maintenant pour ton Code voici la suite :

Sub WritePrivateSubThisWorBookLastSheet()
Dim VBA As String
Dim WSNamePrevious As String


   
With ThisWorkbook
       
If .Worksheets.Count = 1 Then Exit Sub
        WSNamePrevious = .Worksheets(.Worksheets.Count - 1).Name
   
End With

VBA = VBA & 'Private
Sub CommandButton1_Click()' & vbCrLf
VBA = VBA & 'Worksheets(''' & WSNamePrevious & ''').Activate' & vbCrLf
VBA = VBA & 'End Sub' & vbCrLf

   
With ThisWorkbook
       
With .VBProject.VBComponents(.Sheets(.Sheets.Count).CodeName).CodeModule
                .AddFromString VBA
       
End With
   
End With
End Sub

Et oui, j'écris jamais mes Boutons LOL ;)

Bon Après Midi
[ol]@+Thierry[/ol]
 
P

Philou

Guest
Re:Macro qui écrit d'autres macros EXCLUSIF !!!

Merci thierry,
j'arrive à présent à créer le bouton mais j'ai des problèmes dans le code (qui permet le retour à la 1ère feuille)

la feuille surlaquelle je veux revenir en cliquant sur le bouton s'appelle 'récap'
la nouvelle feuille s'appelle 'PO'

peux-tu m'expliquer comment fonctionne ton deuxième code car je ne comprends pas tout...

merci encore
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re:Macro qui écrit d'autres macros EXCLUSIF !!!

Re Philou

C'est assez simple, si tu appliques bien la logique des deux codes que je t'ai fournis comme expliqué.

L'important est de créer une Nouvelle Feuille 'After:=.Worksheets(.Worksheets.Count)'

C'est à dire en dernier de l'Ordre Index... (De Gauche à Droite dans l'ordre des Onglets)

La Variable de Type String 'WSNamePrevious' sert à récupérer dynamiquement le Nom de l'avant dernier Onglet 'Worksheets(.Worksheets.Count - 1).Name'

Voilà c'est tout simple...

Il ne reste plus qu'à envoyer ce Nom d'Onglet dans la String VBA pour écrire le Code du CommandButton.

Of course tu peux écrire une Constante plutot qu'une Variable si tel est le besoin...

Const WSName As String ='Recap'


A ce moment là la construction de la STring VBA deviendra ceci
VBA = VBA & 'Private Sub CommandButton1_Click()' & vbCrLf
VBA = VBA & 'Worksheets(''' & WSName & ''').Activate' & vbCrLf
VBA = VBA & 'End Sub' & vbCrLf

Mais bien évidemment ce ne sera plus dynamique, le retour ne se fera que sur la FEuille Spécifiée et plus sur la feuille précédente...

Bonne Fin de Journée
[ol]@+Thierry[/ol]
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 958
Membres
103 990
dernier inscrit
lamiadebz